<?xml version="1.0"?>
<rss version="2.0"><channel><title/><link>https://www.leadwerks.com/community/blogs/blog/283-c-first-player-game-start/</link><description><![CDATA[
<p>
	This is my first blog and I will make a First Player Minigame to have all the stuff I need for a bigger game.
</p>

<p>
	I hope I can use most of them with Leadwerks5 later, but it's allways a good training.
</p>

<p>
	 
</p>

<p>
	Since 3 years I have not programmed anything with Leadwerks, that has nothing to do with Leadwerks it was a real life thing.
</p>

<p>
	So I must learn the stuff from the beginning. <span lang="en" xml:lang="en"><span title="">My natural language is not English, I hope you can forgive me a mistake or two</span></span> .
</p>

<p>
	If you want test the code you make a new project and a map. I made some test objects to see if climbing fails or not and under which steps I can crouch
</p>

<p>
	and on which step I can jump.
</p>

<p>
	<img alt="Map1.jpg.735656557cb3bc979ec04551b1e56525.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="14982" data-ratio="56.30" width="1000" src="<fileStore.core_Attachment>/monthly_2020_08/Map1.jpg.735656557cb3bc979ec04551b1e56525.jpg" />
</p>

<p>
	I make this blog for me to save the source code. Two times in my life I lost nearly all my source I programmed by HardDrive crashes.
</p>

<p>
	So it is a nice thing to have that online. And for beginnes to have a start code.
</p>

<p>
	In your project folder, by me in "documents/Leadwerks/Projects/.... &lt;-- here are my Projects"
</p>

<p>
	you have a subfolder also named projects:
</p>

<p>
	"documents/Leadwerks/Projects/ProjectName/projects/"
</p>

<p>
	by me in the folder windows is the VisualStudio 17 project: "ProjectName.sln"  &lt;&lt; Start this with Doubleclick, but first install VisualStudio.
</p>

<p>
	 
</p>

<p>
	I delete all the stuff inside main.cpp, App.cpp and app.h
</p>

<p>
	and put the following code in main.cpp
</p>

<p>
	change your mapname  &gt; "YouMapName.map" from your project and compile. I can not say whats the menu names in english because I have the german GUI.
</p>

<p>
	For VisualStudio tutorials look in the Web or YouTube, I am sure there are dozens of them.
</p>

<p>
	 
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted">
<span class="com">#include</span><span class="pln"> </span><span class="str">"Leadwerks.h"</span><span class="pln">
</span><span class="com">#include</span><span class="pln"> </span><span class="str">&lt;string&gt;</span><span class="pln"> 

</span><span class="kwd">using</span><span class="pln"> </span><span class="kwd">namespace</span><span class="pln"> </span><span class="typ">Leadwerks</span><span class="pun">;</span><span class="pln">

</span><span class="typ">int</span><span class="pln"> screenwidth </span><span class="pun">=</span><span class="pln"> </span><span class="typ">GetSystemMetrics</span><span class="pun">(</span><span class="lit">0</span><span class="pun">);</span><span class="pln">
</span><span class="typ">int</span><span class="pln"> screenheight </span><span class="pun">=</span><span class="pln"> </span><span class="typ">GetSystemMetrics</span><span class="pun">(</span><span class="lit">1</span><span class="pun">);</span><span class="pln">

</span><span class="typ">Window</span><span class="pun">*</span><span class="pln"> window</span><span class="pun">;</span><span class="pln">
</span><span class="typ">Context</span><span class="pun">*</span><span class="pln"> context</span><span class="pun">;</span><span class="pln">
</span><span class="typ">World</span><span class="pun">*</span><span class="pln"> world</span><span class="pun">;</span><span class="pln">
</span><span class="typ">Model</span><span class="pun">*</span><span class="pln"> thePlayer</span><span class="pun">;</span><span class="pln">
</span><span class="typ">Camera</span><span class="pun">*</span><span class="pln"> theCam</span><span class="pun">;</span><span class="pln">

</span><span class="com">// declare functions that we need, they are used once so I made them inline for faster code.</span><span class="pln">
</span><span class="kwd">inline</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">Start</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">inline</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> loop</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">inline</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">DrawInfo</span><span class="pun">();</span><span class="pln">





</span><span class="com">//crouch, crawl, jog, run</span><span class="pln">


</span><span class="com">// used for mouse handling</span><span class="pln">
</span><span class="typ">Vec3</span><span class="pln"> mausdata </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Vec3</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
</span><span class="typ">float</span><span class="pln"> mausx </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">;</span><span class="pln">
</span><span class="typ">float</span><span class="pln"> mausy </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">;</span><span class="pln">

</span><span class="com">// used for player movement</span><span class="pln">
</span><span class="typ">Vec3</span><span class="pln"> mdat </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Vec3</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
</span><span class="typ">Vec3</span><span class="pln"> ppos </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Vec3</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
</span><span class="typ">Vec3</span><span class="pln"> velo </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Vec3</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
</span><span class="typ">float</span><span class="pln"> walk </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">;</span><span class="pln">
</span><span class="typ">float</span><span class="pln"> strafe </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">;</span><span class="pln">
</span><span class="typ">float</span><span class="pln"> jump </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">;</span><span class="pln">
</span><span class="typ">float</span><span class="pln"> crouch </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">;</span><span class="pln">
</span><span class="typ">float</span><span class="pln"> strafespeed </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2.0</span><span class="pun">;</span><span class="pln">
</span><span class="typ">float</span><span class="pln"> movespeed </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2.4</span><span class="pun">;</span><span class="pln">
</span><span class="typ">float</span><span class="pln"> jumpspeed </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5.0</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">bool</span><span class="pln"> cdown </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">bool</span><span class="pln"> sdown </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">

</span><span class="com">// used for mainloop</span><span class="pln">
</span><span class="kwd">bool</span><span class="pln"> mainloop </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">


</span><span class="com">// mainfunction</span><span class="pln">
</span><span class="typ">int</span><span class="pln"> main</span><span class="pun">(</span><span class="typ">int</span><span class="pln"> argc</span><span class="pun">,</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">char</span><span class="pln"> </span><span class="pun">*</span><span class="pln">argv</span><span class="pun">[])</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
</span><span class="com">// hold the mainfuntion small and insert what we need with an inline function.</span><span class="pln">
	</span><span class="typ">Start</span><span class="pun">();</span><span class="pln">

	

</span><span class="com">// mainloop</span><span class="pln">
	</span><span class="kwd">while</span><span class="pln"> </span><span class="pun">(</span><span class="pln">mainloop</span><span class="pun">)</span><span class="pln"> 
	</span><span class="pun">{</span><span class="pln">
		
		loop</span><span class="pun">();</span><span class="pln"> </span><span class="com">// Here is the most mailoop stuff</span><span class="pln">

		</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">window</span><span class="pun">-&gt;</span><span class="typ">Closed</span><span class="pun">()</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> window</span><span class="pun">-&gt;</span><span class="typ">KeyDown</span><span class="pun">(</span><span class="typ">Key</span><span class="pun">::</span><span class="typ">Escape</span><span class="pun">))</span><span class="pln"> mainloop </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln"> </span><span class="com">//Quit if ESC is pressed</span><span class="pln">

		</span><span class="typ">Leadwerks</span><span class="pun">::</span><span class="typ">Time</span><span class="pun">::</span><span class="typ">Update</span><span class="pun">();</span><span class="pln">
		world</span><span class="pun">-&gt;</span><span class="typ">Update</span><span class="pun">();</span><span class="pln">
		world</span><span class="pun">-&gt;</span><span class="typ">Render</span><span class="pun">();</span><span class="pln">
		
		</span><span class="com">// For holding the mainloop small put all drawing stuff inside an inline function.</span><span class="pln">
		</span><span class="typ">DrawInfo</span><span class="pun">();</span><span class="pln">
	
		context</span><span class="pun">-&gt;</span><span class="typ">Sync</span><span class="pun">(</span><span class="kwd">true</span><span class="pun">);</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">
	</span><span class="kwd">return</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">// Inline functions we use only once.</span><span class="pln">
</span><span class="kwd">inline</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">DrawInfo</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln"> 
	</span><span class="com">// For the first, all the drawing stuff in this funtion.</span><span class="pln">
	context</span><span class="pun">-&gt;</span><span class="typ">SetBlendMode</span><span class="pun">(</span><span class="typ">Blend</span><span class="pun">::</span><span class="typ">Alpha</span><span class="pun">);</span><span class="pln">
	context</span><span class="pun">-&gt;</span><span class="typ">SetColor</span><span class="pun">(</span><span class="lit">1.0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1.0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1.0</span><span class="pun">);</span><span class="pln">
	context</span><span class="pun">-&gt;</span><span class="typ">DrawText</span><span class="pun">(</span><span class="str">"Camera Rotation: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> theCam</span><span class="pun">-&gt;</span><span class="typ">GetRotation</span><span class="pun">().</span><span class="typ">ToString</span><span class="pun">(),</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">);</span><span class="pln">
	context</span><span class="pun">-&gt;</span><span class="typ">DrawText</span><span class="pun">(</span><span class="str">"Player Position: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> thePlayer</span><span class="pun">-&gt;</span><span class="typ">GetPosition</span><span class="pun">().</span><span class="typ">ToString</span><span class="pun">(),</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">40</span><span class="pun">);</span><span class="pln">
	context</span><span class="pun">-&gt;</span><span class="typ">DrawText</span><span class="pun">(</span><span class="str">"Player Position: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> std</span><span class="pun">::</span><span class="pln">to_string</span><span class="pun">(</span><span class="pln">ppos</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]),</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">70</span><span class="pun">);</span><span class="pln">
	context</span><span class="pun">-&gt;</span><span class="typ">DrawText</span><span class="pun">(</span><span class="str">"Player Position: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> std</span><span class="pun">::</span><span class="pln">to_string</span><span class="pun">(</span><span class="pln">ppos</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]),</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">);</span><span class="pln">
	context</span><span class="pun">-&gt;</span><span class="typ">DrawText</span><span class="pun">(</span><span class="str">"Player Position: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> std</span><span class="pun">::</span><span class="pln">to_string</span><span class="pun">(</span><span class="pln">ppos</span><span class="pun">[</span><span class="lit">2</span><span class="pun">]),</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">130</span><span class="pun">);</span><span class="pln">
	context</span><span class="pun">-&gt;</span><span class="typ">DrawText</span><span class="pun">(</span><span class="str">"UPS: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="typ">String</span><span class="pun">(</span><span class="typ">Time</span><span class="pun">::</span><span class="pln">UPS</span><span class="pun">()),</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">160</span><span class="pun">);</span><span class="pln">
	context</span><span class="pun">-&gt;</span><span class="typ">DrawText</span><span class="pun">(</span><span class="str">"Velocity: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> thePlayer</span><span class="pun">-&gt;</span><span class="typ">GetVelocity</span><span class="pun">().</span><span class="typ">ToString</span><span class="pun">(),</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">190</span><span class="pun">);</span><span class="pln">

	</span><span class="com">// a way to check if the player is not on ground, for possibly later use.</span><span class="pln">
	</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">thePlayer</span><span class="pun">-&gt;</span><span class="typ">GetAirborne</span><span class="pun">())</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		context</span><span class="pun">-&gt;</span><span class="typ">DrawText</span><span class="pun">(</span><span class="str">"In the air"</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">220</span><span class="pun">);</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">
	context</span><span class="pun">-&gt;</span><span class="typ">SetBlendMode</span><span class="pun">(</span><span class="typ">Blend</span><span class="pun">::</span><span class="typ">Solid</span><span class="pun">);</span><span class="pln">

</span><span class="pun">}</span><span class="pln">


</span><span class="kwd">inline</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">Start</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
	</span><span class="com">// Window</span><span class="pln">
	</span><span class="com">//window = Window::Create("",0,0, 2560, 1440,  Window::Fullscreen);</span><span class="pln">
	</span><span class="com">//window = Window::Create("", 0, 0, screenwidth, screenheight, Window::Fullscreen);</span><span class="pln">
	window </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Window</span><span class="pun">::</span><span class="typ">Create</span><span class="pun">(</span><span class="str">""</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> screenwidth</span><span class="pun">,</span><span class="pln"> screenheight</span><span class="pun">);</span><span class="pln">
	context </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Context</span><span class="pun">::</span><span class="typ">Create</span><span class="pun">(</span><span class="pln">window</span><span class="pun">);</span><span class="pln">
	window</span><span class="pun">-&gt;</span><span class="typ">Maximize</span><span class="pun">();</span><span class="pln">
	</span><span class="com">// The world</span><span class="pln">
	world </span><span class="pun">=</span><span class="pln"> </span><span class="typ">World</span><span class="pun">::</span><span class="typ">Create</span><span class="pun">();</span><span class="pln">
	</span><span class="com">// The player that we need for "First Player Sight"</span><span class="pln">
	thePlayer </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Model</span><span class="pun">::</span><span class="typ">Create</span><span class="pun">();</span><span class="pln">
	thePlayer</span><span class="pun">-&gt;</span><span class="typ">SetPhysicsMode</span><span class="pun">(</span><span class="typ">Entity</span><span class="pun">::</span><span class="typ">CharacterPhysics</span><span class="pun">);</span><span class="pln">
	thePlayer</span><span class="pun">-&gt;</span><span class="typ">SetPosition</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
	thePlayer</span><span class="pun">-&gt;</span><span class="typ">SetMass</span><span class="pun">(</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
	</span><span class="com">// Put the camera as a child to the player, so we can move and look up and down separately</span><span class="pln">
	theCam </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Camera</span><span class="pun">::</span><span class="typ">Create</span><span class="pun">(</span><span class="pln">thePlayer</span><span class="pun">);</span><span class="pln">
	theCam</span><span class="pun">-&gt;</span><span class="typ">SetPosition</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="lit">1.65</span><span class="pun">,</span><span class="lit">0</span><span class="pun">);</span><span class="pln">
	</span><span class="com">// Font we use for drawing operations</span><span class="pln">
	</span><span class="typ">Font</span><span class="pun">*</span><span class="pln"> font </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Font</span><span class="pun">::</span><span class="typ">Load</span><span class="pun">(</span><span class="str">"Fonts/Arial.ttf"</span><span class="pun">,</span><span class="pln"> </span><span class="lit">12</span><span class="pun">);</span><span class="pln">
	context</span><span class="pun">-&gt;</span><span class="typ">SetFont</span><span class="pun">(</span><span class="pln">font</span><span class="pun">);</span><span class="pln">
	</span><span class="com">// Map</span><span class="pln">
	</span><span class="com">//Map::Load("Maps/TheWorld.map");</span><span class="pln">
	</span><span class="typ">Map</span><span class="pun">::</span><span class="typ">Load</span><span class="pun">(</span><span class="str">"Maps/BetonMap.map"</span><span class="pun">);</span><span class="pln">  </span><span class="com">// &lt;&lt;&lt;&lt;----- put here your mapname .............................................</span><span class="pln">


	
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">inline</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> loop</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln"> 
	ppos </span><span class="pun">=</span><span class="pln"> thePlayer</span><span class="pun">-&gt;</span><span class="typ">GetPosition</span><span class="pun">();</span><span class="pln">
	mausdata </span><span class="pun">=</span><span class="pln"> window</span><span class="pun">-&gt;</span><span class="typ">GetMousePosition</span><span class="pun">();</span><span class="pln">
	mausx </span><span class="pun">+=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">mausdata</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> window</span><span class="pun">-&gt;</span><span class="typ">GetWidth</span><span class="pun">()</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">0.1</span><span class="pun">;</span><span class="pln">
	mausy </span><span class="pun">+=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">mausdata</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> window</span><span class="pun">-&gt;</span><span class="typ">GetHeight</span><span class="pun">()</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">0.1</span><span class="pun">;</span><span class="pln">
	window</span><span class="pun">-&gt;</span><span class="typ">SetMousePosition</span><span class="pun">(</span><span class="pln">window</span><span class="pun">-&gt;</span><span class="typ">GetWidth</span><span class="pun">()</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> window</span><span class="pun">-&gt;</span><span class="typ">GetHeight</span><span class="pun">()</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pun">);</span><span class="pln">

	</span><span class="com">// not Shift: walk</span><span class="pln">
	</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">window</span><span class="pun">-&gt;</span><span class="typ">KeyDown</span><span class="pun">(</span><span class="typ">Key</span><span class="pun">::</span><span class="typ">Shift</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> sdown </span><span class="pun">==</span><span class="pln"> </span><span class="lit">1</span><span class="pun">)</span><span class="pln">
	</span><span class="pun">{</span><span class="pln"> 
		sdown </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
		movespeed </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2.4</span><span class="pun">;</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">

	</span><span class="com">//Shift: run</span><span class="pln">
	</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">window</span><span class="pun">-&gt;</span><span class="typ">KeyDown</span><span class="pun">(</span><span class="typ">Key</span><span class="pun">::</span><span class="typ">Shift</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> sdown </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		sdown </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
		movespeed </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5.0</span><span class="pun">;</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">

	</span><span class="com">// not CTRL: stay</span><span class="pln">
	</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">window</span><span class="pun">-&gt;</span><span class="typ">KeyDown</span><span class="pun">(</span><span class="typ">Key</span><span class="pun">::</span><span class="typ">ControlKey</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> cdown </span><span class="pun">==</span><span class="pln"> </span><span class="lit">1</span><span class="pun">)</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		cdown </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
		movespeed </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3.0</span><span class="pun">;</span><span class="pln">
		ppos </span><span class="pun">=</span><span class="pln"> thePlayer</span><span class="pun">-&gt;</span><span class="typ">GetPosition</span><span class="pun">();</span><span class="pln">
		theCam</span><span class="pun">-&gt;</span><span class="typ">SetPosition</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="lit">1.65</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
		crouch </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">

	</span><span class="pun">}</span><span class="pln">

	</span><span class="com">// CTRL: crouch</span><span class="pln">
	</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">window</span><span class="pun">-&gt;</span><span class="typ">KeyDown</span><span class="pun">(</span><span class="typ">Key</span><span class="pun">::</span><span class="typ">ControlKey</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> cdown </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		cdown </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
		movespeed </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1.0</span><span class="pun">;</span><span class="pln">
		crouch </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
		ppos </span><span class="pun">=</span><span class="pln"> thePlayer</span><span class="pun">-&gt;</span><span class="typ">GetPosition</span><span class="pun">();</span><span class="pln">
		theCam</span><span class="pun">-&gt;</span><span class="typ">SetPosition</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="lit">0.95</span><span class="pun">,</span><span class="lit">0</span><span class="pun">);</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">

	</span><span class="com">// Walk with movespeed when press Key W</span><span class="pln">
	walk </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">window</span><span class="pun">-&gt;</span><span class="typ">KeyDown</span><span class="pun">(</span><span class="typ">Key</span><span class="pun">::</span><span class="pln">W</span><span class="pun">)</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> window</span><span class="pun">-&gt;</span><span class="typ">KeyDown</span><span class="pun">(</span><span class="typ">Key</span><span class="pun">::</span><span class="pln">S</span><span class="pun">))</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> movespeed</span><span class="pun">;</span><span class="pln">

	strafe </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">window</span><span class="pun">-&gt;</span><span class="typ">KeyDown</span><span class="pun">(</span><span class="typ">Key</span><span class="pun">::</span><span class="pln">D</span><span class="pun">)</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> window</span><span class="pun">-&gt;</span><span class="typ">KeyDown</span><span class="pun">(</span><span class="typ">Key</span><span class="pun">::</span><span class="pln">A</span><span class="pun">))</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> strafespeed</span><span class="pun">;</span><span class="pln">

	</span><span class="com">// check if player is on ground, this means velo[1] = "y direction" has no velocity = 0</span><span class="pln">
	</span><span class="com">// in this way the player kann not jump if he is already in the air.</span><span class="pln">
	velo </span><span class="pun">=</span><span class="pln"> thePlayer</span><span class="pun">-&gt;</span><span class="typ">GetVelocity</span><span class="pun">();</span><span class="pln">
	</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">velo</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">)</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		jump </span><span class="pun">=</span><span class="pln"> window</span><span class="pun">-&gt;</span><span class="typ">KeyHit</span><span class="pun">(</span><span class="typ">Key</span><span class="pun">::</span><span class="typ">Space</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> jumpspeed</span><span class="pun">;</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">
	</span><span class="kwd">else</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		jump </span><span class="pun">=</span><span class="pln"> window</span><span class="pun">-&gt;</span><span class="typ">KeyHit</span><span class="pun">(</span><span class="typ">Key</span><span class="pun">::</span><span class="typ">Space</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">;</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">


	</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">mausy </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">50.0</span><span class="pun">)</span><span class="pln"> mausy </span><span class="pun">=</span><span class="pln"> </span><span class="lit">50.0</span><span class="pun">;</span><span class="pln">
	</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">mausy </span><span class="pun">&lt;</span><span class="pln"> </span><span class="pun">-</span><span class="lit">90.0</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> mausy </span><span class="pun">=</span><span class="pln"> </span><span class="pun">-</span><span class="lit">90.0</span><span class="pun">;</span><span class="pln">
	thePlayer</span><span class="pun">-&gt;</span><span class="typ">SetInput</span><span class="pun">(</span><span class="pln">mausx</span><span class="pun">,</span><span class="pln"> walk</span><span class="pun">,</span><span class="pln"> strafe</span><span class="pun">,</span><span class="pln"> jump</span><span class="pun">,</span><span class="pln"> crouch</span><span class="pun">);</span><span class="pln">
	</span><span class="com">//void SetInput(float angle, float move, float strafe = 0, float jump = 0, const bool crouch = false, const float maxaccel = 1, const float maxdecel = 0.5, const bool detailed = false, const float maxrotationspeed = 5.0)</span><span class="pln">
	
	theCam</span><span class="pun">-&gt;</span><span class="typ">SetRotation</span><span class="pun">(</span><span class="pln">mausy</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
	mdat </span><span class="pun">=</span><span class="pln"> theCam</span><span class="pun">-&gt;</span><span class="typ">GetRotation</span><span class="pun">();</span><span class="pln">
	
</span><span class="pun">}</span></pre>

<p>
	 
</p>

<p>
	The next step I will made is to put the code into a class.
</p>

<p>
	Use the C Key for toggle crouching and use the CTRL for faster runnig, the I have walk with Key W, jogging with Shift+W and running with CTRL and W.
</p>

<p>
	 
</p>
]]></description><language>en</language><item><title>First step C++ First Player game start</title><link>https://www.leadwerks.com/community/blogs/entry/2583-first-step-c-first-player-game-start/</link><description><![CDATA[<p>
	Since 3 years I have not programmed anything with Leadwerks, that has nothing to do with Leadwerks it was a real life thing.
</p>

<p>
	So I must learn the stuff from the beginning. <span lang="en" xml:lang="en"><span title="">My natural language is not English, I hope you can forgive me a mistake or two</span></span> .
</p>

<p>
	If you want test the code you make a new project and a map. I made some test objects to see if climbing fails or not and under which steps I can crouch
</p>

<p>
	and on which step I can jump.
</p>

<p>
	<img alt="Map1.jpg.735656557cb3bc979ec04551b1e56525.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="14982" data-ratio="56.30" width="1000" src="https://www.ultraengine.com/community/applications/core/interface/js/spacer.png" data-src="//leadwerksstorage.s3.us-east-2.amazonaws.com/monthly_2020_08/Map1.jpg.735656557cb3bc979ec04551b1e56525.jpg">
</p>

<p>
	I make this blog for me to save the source code. Two times in my life I lost nearly all my source I programmed by HardDrive crashes.
</p>

<p>
	So it is a nice thing to have that online. And for beginnes to have a start code.
</p>

<p>
	In your project folder, by me in "documents/Leadwerks/Projects/.... &lt;-- here are my Projects"
</p>

<p>
	you have a subfolder also named projects:
</p>

<p>
	"documents/Leadwerks/Projects/ProjectName/projects/"
</p>

<p>
	by me in the folder windows is the VisualStudio 17 project: "ProjectName.sln"  &lt;&lt; Start this with Doubleclick, but first install VisualStudio.
</p>

<p>
	 
</p>

<p>
	I delete all the stuff inside main.cpp, App.cpp and app.h
</p>

<p>
	and put the following code in main.cpp
</p>

<p>
	change your mapname  &gt; "YouMapName.map" from your project and compile. I can not say whats the menu names in english because I have the german GUI.
</p>

<p>
	For VisualStudio tutorials look in the Web or YouTube, I am sure there are dozens of them.
</p>

<p>
	 
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted">
<span class="com">#include</span><span class="pln"> </span><span class="str">"Leadwerks.h"</span><span class="pln">
</span><span class="com">#include</span><span class="pln"> </span><span class="str">&lt;string&gt;</span><span class="pln"> 

</span><span class="kwd">using</span><span class="pln"> </span><span class="kwd">namespace</span><span class="pln"> </span><span class="typ">Leadwerks</span><span class="pun">;</span><span class="pln">

</span><span class="typ">int</span><span class="pln"> screenwidth </span><span class="pun">=</span><span class="pln"> </span><span class="typ">GetSystemMetrics</span><span class="pun">(</span><span class="lit">0</span><span class="pun">);</span><span class="pln">
</span><span class="typ">int</span><span class="pln"> screenheight </span><span class="pun">=</span><span class="pln"> </span><span class="typ">GetSystemMetrics</span><span class="pun">(</span><span class="lit">1</span><span class="pun">);</span><span class="pln">

</span><span class="typ">Window</span><span class="pun">*</span><span class="pln"> window</span><span class="pun">;</span><span class="pln">
</span><span class="typ">Context</span><span class="pun">*</span><span class="pln"> context</span><span class="pun">;</span><span class="pln">
</span><span class="typ">World</span><span class="pun">*</span><span class="pln"> world</span><span class="pun">;</span><span class="pln">
</span><span class="typ">Model</span><span class="pun">*</span><span class="pln"> thePlayer</span><span class="pun">;</span><span class="pln">
</span><span class="typ">Camera</span><span class="pun">*</span><span class="pln"> theCam</span><span class="pun">;</span><span class="pln">

</span><span class="com">// declare functions that we need, they are used once so I made them inline for faster code.</span><span class="pln">
</span><span class="kwd">inline</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">Start</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">inline</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> loop</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">inline</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">DrawInfo</span><span class="pun">();</span><span class="pln">





</span><span class="com">//crouch, crawl, jog, run</span><span class="pln">


</span><span class="com">// used for mouse handling</span><span class="pln">
</span><span class="typ">Vec3</span><span class="pln"> mausdata </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Vec3</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
</span><span class="typ">float</span><span class="pln"> mausx </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">;</span><span class="pln">
</span><span class="typ">float</span><span class="pln"> mausy </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">;</span><span class="pln">

</span><span class="com">// used for player movement</span><span class="pln">
</span><span class="typ">Vec3</span><span class="pln"> mdat </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Vec3</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
</span><span class="typ">Vec3</span><span class="pln"> ppos </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Vec3</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
</span><span class="typ">Vec3</span><span class="pln"> velo </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Vec3</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
</span><span class="typ">float</span><span class="pln"> walk </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">;</span><span class="pln">
</span><span class="typ">float</span><span class="pln"> strafe </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">;</span><span class="pln">
</span><span class="typ">float</span><span class="pln"> jump </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">;</span><span class="pln">
</span><span class="typ">float</span><span class="pln"> crouch </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">;</span><span class="pln">
</span><span class="typ">float</span><span class="pln"> strafespeed </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2.0</span><span class="pun">;</span><span class="pln">
</span><span class="typ">float</span><span class="pln"> movespeed </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2.4</span><span class="pun">;</span><span class="pln">
</span><span class="typ">float</span><span class="pln"> jumpspeed </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5.0</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">bool</span><span class="pln"> cdown </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">bool</span><span class="pln"> sdown </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">

</span><span class="com">// used for mainloop</span><span class="pln">
</span><span class="kwd">bool</span><span class="pln"> mainloop </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">


</span><span class="com">// mainfunction</span><span class="pln">
</span><span class="typ">int</span><span class="pln"> main</span><span class="pun">(</span><span class="typ">int</span><span class="pln"> argc</span><span class="pun">,</span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">char</span><span class="pln"> </span><span class="pun">*</span><span class="pln">argv</span><span class="pun">[])</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
</span><span class="com">// hold the mainfuntion small and insert what we need with an inline function.</span><span class="pln">
	</span><span class="typ">Start</span><span class="pun">();</span><span class="pln">

	

</span><span class="com">// mainloop</span><span class="pln">
	</span><span class="kwd">while</span><span class="pln"> </span><span class="pun">(</span><span class="pln">mainloop</span><span class="pun">)</span><span class="pln"> 
	</span><span class="pun">{</span><span class="pln">
		
		loop</span><span class="pun">();</span><span class="pln"> </span><span class="com">// Here is the most mailoop stuff</span><span class="pln">

		</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">window</span><span class="pun">-&gt;</span><span class="typ">Closed</span><span class="pun">()</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> window</span><span class="pun">-&gt;</span><span class="typ">KeyDown</span><span class="pun">(</span><span class="typ">Key</span><span class="pun">::</span><span class="typ">Escape</span><span class="pun">))</span><span class="pln"> mainloop </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln"> </span><span class="com">//Quit if ESC is pressed</span><span class="pln">

		</span><span class="typ">Leadwerks</span><span class="pun">::</span><span class="typ">Time</span><span class="pun">::</span><span class="typ">Update</span><span class="pun">();</span><span class="pln">
		world</span><span class="pun">-&gt;</span><span class="typ">Update</span><span class="pun">();</span><span class="pln">
		world</span><span class="pun">-&gt;</span><span class="typ">Render</span><span class="pun">();</span><span class="pln">
		
		</span><span class="com">// For holding the mainloop small put all drawing stuff inside an inline function.</span><span class="pln">
		</span><span class="typ">DrawInfo</span><span class="pun">();</span><span class="pln">
	
		context</span><span class="pun">-&gt;</span><span class="typ">Sync</span><span class="pun">(</span><span class="kwd">true</span><span class="pun">);</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">
	</span><span class="kwd">return</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">// Inline functions we use only once.</span><span class="pln">
</span><span class="kwd">inline</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">DrawInfo</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln"> 
	</span><span class="com">// For the first, all the drawing stuff in this funtion.</span><span class="pln">
	context</span><span class="pun">-&gt;</span><span class="typ">SetBlendMode</span><span class="pun">(</span><span class="typ">Blend</span><span class="pun">::</span><span class="typ">Alpha</span><span class="pun">);</span><span class="pln">
	context</span><span class="pun">-&gt;</span><span class="typ">SetColor</span><span class="pun">(</span><span class="lit">1.0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1.0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1.0</span><span class="pun">);</span><span class="pln">
	context</span><span class="pun">-&gt;</span><span class="typ">DrawText</span><span class="pun">(</span><span class="str">"Camera Rotation: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> theCam</span><span class="pun">-&gt;</span><span class="typ">GetRotation</span><span class="pun">().</span><span class="typ">ToString</span><span class="pun">(),</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">);</span><span class="pln">
	context</span><span class="pun">-&gt;</span><span class="typ">DrawText</span><span class="pun">(</span><span class="str">"Player Position: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> thePlayer</span><span class="pun">-&gt;</span><span class="typ">GetPosition</span><span class="pun">().</span><span class="typ">ToString</span><span class="pun">(),</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">40</span><span class="pun">);</span><span class="pln">
	context</span><span class="pun">-&gt;</span><span class="typ">DrawText</span><span class="pun">(</span><span class="str">"Player Position: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> std</span><span class="pun">::</span><span class="pln">to_string</span><span class="pun">(</span><span class="pln">ppos</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]),</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">70</span><span class="pun">);</span><span class="pln">
	context</span><span class="pun">-&gt;</span><span class="typ">DrawText</span><span class="pun">(</span><span class="str">"Player Position: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> std</span><span class="pun">::</span><span class="pln">to_string</span><span class="pun">(</span><span class="pln">ppos</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]),</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">100</span><span class="pun">);</span><span class="pln">
	context</span><span class="pun">-&gt;</span><span class="typ">DrawText</span><span class="pun">(</span><span class="str">"Player Position: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> std</span><span class="pun">::</span><span class="pln">to_string</span><span class="pun">(</span><span class="pln">ppos</span><span class="pun">[</span><span class="lit">2</span><span class="pun">]),</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">130</span><span class="pun">);</span><span class="pln">
	context</span><span class="pun">-&gt;</span><span class="typ">DrawText</span><span class="pun">(</span><span class="str">"UPS: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="typ">String</span><span class="pun">(</span><span class="typ">Time</span><span class="pun">::</span><span class="pln">UPS</span><span class="pun">()),</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">160</span><span class="pun">);</span><span class="pln">
	context</span><span class="pun">-&gt;</span><span class="typ">DrawText</span><span class="pun">(</span><span class="str">"Velocity: "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> thePlayer</span><span class="pun">-&gt;</span><span class="typ">GetVelocity</span><span class="pun">().</span><span class="typ">ToString</span><span class="pun">(),</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">190</span><span class="pun">);</span><span class="pln">

	</span><span class="com">// a way to check if the player is not on ground, for possibly later use.</span><span class="pln">
	</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">thePlayer</span><span class="pun">-&gt;</span><span class="typ">GetAirborne</span><span class="pun">())</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		context</span><span class="pun">-&gt;</span><span class="typ">DrawText</span><span class="pun">(</span><span class="str">"In the air"</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">220</span><span class="pun">);</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">
	context</span><span class="pun">-&gt;</span><span class="typ">SetBlendMode</span><span class="pun">(</span><span class="typ">Blend</span><span class="pun">::</span><span class="typ">Solid</span><span class="pun">);</span><span class="pln">

</span><span class="pun">}</span><span class="pln">


</span><span class="kwd">inline</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> </span><span class="typ">Start</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
	</span><span class="com">// Window</span><span class="pln">
	</span><span class="com">//window = Window::Create("",0,0, 2560, 1440,  Window::Fullscreen);</span><span class="pln">
	</span><span class="com">//window = Window::Create("", 0, 0, screenwidth, screenheight, Window::Fullscreen);</span><span class="pln">
	window </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Window</span><span class="pun">::</span><span class="typ">Create</span><span class="pun">(</span><span class="str">""</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> screenwidth</span><span class="pun">,</span><span class="pln"> screenheight</span><span class="pun">);</span><span class="pln">
	context </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Context</span><span class="pun">::</span><span class="typ">Create</span><span class="pun">(</span><span class="pln">window</span><span class="pun">);</span><span class="pln">
	window</span><span class="pun">-&gt;</span><span class="typ">Maximize</span><span class="pun">();</span><span class="pln">
	</span><span class="com">// The world</span><span class="pln">
	world </span><span class="pun">=</span><span class="pln"> </span><span class="typ">World</span><span class="pun">::</span><span class="typ">Create</span><span class="pun">();</span><span class="pln">
	</span><span class="com">// The player that we need for "First Player Sight"</span><span class="pln">
	thePlayer </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Model</span><span class="pun">::</span><span class="typ">Create</span><span class="pun">();</span><span class="pln">
	thePlayer</span><span class="pun">-&gt;</span><span class="typ">SetPhysicsMode</span><span class="pun">(</span><span class="typ">Entity</span><span class="pun">::</span><span class="typ">CharacterPhysics</span><span class="pun">);</span><span class="pln">
	thePlayer</span><span class="pun">-&gt;</span><span class="typ">SetPosition</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
	thePlayer</span><span class="pun">-&gt;</span><span class="typ">SetMass</span><span class="pun">(</span><span class="lit">1</span><span class="pun">);</span><span class="pln">
	</span><span class="com">// Put the camera as a child to the player, so we can move and look up and down separately</span><span class="pln">
	theCam </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Camera</span><span class="pun">::</span><span class="typ">Create</span><span class="pun">(</span><span class="pln">thePlayer</span><span class="pun">);</span><span class="pln">
	theCam</span><span class="pun">-&gt;</span><span class="typ">SetPosition</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="lit">1.65</span><span class="pun">,</span><span class="lit">0</span><span class="pun">);</span><span class="pln">
	</span><span class="com">// Font we use for drawing operations</span><span class="pln">
	</span><span class="typ">Font</span><span class="pun">*</span><span class="pln"> font </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Font</span><span class="pun">::</span><span class="typ">Load</span><span class="pun">(</span><span class="str">"Fonts/Arial.ttf"</span><span class="pun">,</span><span class="pln"> </span><span class="lit">12</span><span class="pun">);</span><span class="pln">
	context</span><span class="pun">-&gt;</span><span class="typ">SetFont</span><span class="pun">(</span><span class="pln">font</span><span class="pun">);</span><span class="pln">
	</span><span class="com">// Map</span><span class="pln">
	</span><span class="com">//Map::Load("Maps/TheWorld.map");</span><span class="pln">
	</span><span class="typ">Map</span><span class="pun">::</span><span class="typ">Load</span><span class="pun">(</span><span class="str">"Maps/BetonMap.map"</span><span class="pun">);</span><span class="pln">  </span><span class="com">// &lt;&lt;&lt;&lt;----- put here your mapname .............................................</span><span class="pln">


	
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">inline</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> loop</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln"> 
	ppos </span><span class="pun">=</span><span class="pln"> thePlayer</span><span class="pun">-&gt;</span><span class="typ">GetPosition</span><span class="pun">();</span><span class="pln">
	mausdata </span><span class="pun">=</span><span class="pln"> window</span><span class="pun">-&gt;</span><span class="typ">GetMousePosition</span><span class="pun">();</span><span class="pln">
	mausx </span><span class="pun">+=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">mausdata</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> window</span><span class="pun">-&gt;</span><span class="typ">GetWidth</span><span class="pun">()</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">0.1</span><span class="pun">;</span><span class="pln">
	mausy </span><span class="pun">+=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">mausdata</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> window</span><span class="pun">-&gt;</span><span class="typ">GetHeight</span><span class="pun">()</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">0.1</span><span class="pun">;</span><span class="pln">
	window</span><span class="pun">-&gt;</span><span class="typ">SetMousePosition</span><span class="pun">(</span><span class="pln">window</span><span class="pun">-&gt;</span><span class="typ">GetWidth</span><span class="pun">()</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> window</span><span class="pun">-&gt;</span><span class="typ">GetHeight</span><span class="pun">()</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="lit">2</span><span class="pun">);</span><span class="pln">

	</span><span class="com">// not Shift: walk</span><span class="pln">
	</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">window</span><span class="pun">-&gt;</span><span class="typ">KeyDown</span><span class="pun">(</span><span class="typ">Key</span><span class="pun">::</span><span class="typ">Shift</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> sdown </span><span class="pun">==</span><span class="pln"> </span><span class="lit">1</span><span class="pun">)</span><span class="pln">
	</span><span class="pun">{</span><span class="pln"> 
		sdown </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
		movespeed </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2.4</span><span class="pun">;</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">

	</span><span class="com">//Shift: run</span><span class="pln">
	</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">window</span><span class="pun">-&gt;</span><span class="typ">KeyDown</span><span class="pun">(</span><span class="typ">Key</span><span class="pun">::</span><span class="typ">Shift</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> sdown </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		sdown </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
		movespeed </span><span class="pun">=</span><span class="pln"> </span><span class="lit">5.0</span><span class="pun">;</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">

	</span><span class="com">// not CTRL: stay</span><span class="pln">
	</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">window</span><span class="pun">-&gt;</span><span class="typ">KeyDown</span><span class="pun">(</span><span class="typ">Key</span><span class="pun">::</span><span class="typ">ControlKey</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> cdown </span><span class="pun">==</span><span class="pln"> </span><span class="lit">1</span><span class="pun">)</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		cdown </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
		movespeed </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3.0</span><span class="pun">;</span><span class="pln">
		ppos </span><span class="pun">=</span><span class="pln"> thePlayer</span><span class="pun">-&gt;</span><span class="typ">GetPosition</span><span class="pun">();</span><span class="pln">
		theCam</span><span class="pun">-&gt;</span><span class="typ">SetPosition</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="lit">1.65</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
		crouch </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">

	</span><span class="pun">}</span><span class="pln">

	</span><span class="com">// CTRL: crouch</span><span class="pln">
	</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">window</span><span class="pun">-&gt;</span><span class="typ">KeyDown</span><span class="pun">(</span><span class="typ">Key</span><span class="pun">::</span><span class="typ">ControlKey</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> cdown </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		cdown </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
		movespeed </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1.0</span><span class="pun">;</span><span class="pln">
		crouch </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
		ppos </span><span class="pun">=</span><span class="pln"> thePlayer</span><span class="pun">-&gt;</span><span class="typ">GetPosition</span><span class="pun">();</span><span class="pln">
		theCam</span><span class="pun">-&gt;</span><span class="typ">SetPosition</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="lit">0.95</span><span class="pun">,</span><span class="lit">0</span><span class="pun">);</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">

	</span><span class="com">// Walk with movespeed when press Key W</span><span class="pln">
	walk </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">window</span><span class="pun">-&gt;</span><span class="typ">KeyDown</span><span class="pun">(</span><span class="typ">Key</span><span class="pun">::</span><span class="pln">W</span><span class="pun">)</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> window</span><span class="pun">-&gt;</span><span class="typ">KeyDown</span><span class="pun">(</span><span class="typ">Key</span><span class="pun">::</span><span class="pln">S</span><span class="pun">))</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> movespeed</span><span class="pun">;</span><span class="pln">

	strafe </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">window</span><span class="pun">-&gt;</span><span class="typ">KeyDown</span><span class="pun">(</span><span class="typ">Key</span><span class="pun">::</span><span class="pln">D</span><span class="pun">)</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> window</span><span class="pun">-&gt;</span><span class="typ">KeyDown</span><span class="pun">(</span><span class="typ">Key</span><span class="pun">::</span><span class="pln">A</span><span class="pun">))</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> strafespeed</span><span class="pun">;</span><span class="pln">

	</span><span class="com">// check if player is on ground, this means velo[1] = "y direction" has no velocity = 0</span><span class="pln">
	</span><span class="com">// in this way the player kann not jump if he is already in the air.</span><span class="pln">
	velo </span><span class="pun">=</span><span class="pln"> thePlayer</span><span class="pun">-&gt;</span><span class="typ">GetVelocity</span><span class="pun">();</span><span class="pln">
	</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">velo</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">)</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		jump </span><span class="pun">=</span><span class="pln"> window</span><span class="pun">-&gt;</span><span class="typ">KeyHit</span><span class="pun">(</span><span class="typ">Key</span><span class="pun">::</span><span class="typ">Space</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> jumpspeed</span><span class="pun">;</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">
	</span><span class="kwd">else</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		jump </span><span class="pun">=</span><span class="pln"> window</span><span class="pun">-&gt;</span><span class="typ">KeyHit</span><span class="pun">(</span><span class="typ">Key</span><span class="pun">::</span><span class="typ">Space</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">;</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">


	</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">mausy </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">50.0</span><span class="pun">)</span><span class="pln"> mausy </span><span class="pun">=</span><span class="pln"> </span><span class="lit">50.0</span><span class="pun">;</span><span class="pln">
	</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">mausy </span><span class="pun">&lt;</span><span class="pln"> </span><span class="pun">-</span><span class="lit">90.0</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> mausy </span><span class="pun">=</span><span class="pln"> </span><span class="pun">-</span><span class="lit">90.0</span><span class="pun">;</span><span class="pln">
	thePlayer</span><span class="pun">-&gt;</span><span class="typ">SetInput</span><span class="pun">(</span><span class="pln">mausx</span><span class="pun">,</span><span class="pln"> walk</span><span class="pun">,</span><span class="pln"> strafe</span><span class="pun">,</span><span class="pln"> jump</span><span class="pun">,</span><span class="pln"> crouch</span><span class="pun">);</span><span class="pln">
	</span><span class="com">//void SetInput(float angle, float move, float strafe = 0, float jump = 0, const bool crouch = false, const float maxaccel = 1, const float maxdecel = 0.5, const bool detailed = false, const float maxrotationspeed = 5.0)</span><span class="pln">
	
	theCam</span><span class="pun">-&gt;</span><span class="typ">SetRotation</span><span class="pun">(</span><span class="pln">mausy</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
	mdat </span><span class="pun">=</span><span class="pln"> theCam</span><span class="pun">-&gt;</span><span class="typ">GetRotation</span><span class="pun">();</span><span class="pln">
	
</span><span class="pun">}</span></pre>

<p>
	 
</p>

<p>
	The next step I will made is to put the code into a class.
</p>

<p>
	Use the C Key for toggle crouching and use the CTRL for faster runnig, the I have walk with Key W, jogging with Shift+W and running with CTRL and W.
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">2583</guid><pubDate>Tue, 04 Aug 2020 16:25:00 +0000</pubDate></item></channel></rss>
