Przeglądaj źródła

Added a demo platformer to the Lua examples

Ivan Safrin 11 lat temu
rodzic
commit
887581d22d

+ 8 - 0
Examples/Lua/Game_Demos/DemoPlatformer/DemoPlatformer.polyproject

@@ -0,0 +1,8 @@
+<?xml version="1.0" ?>
+<PolycodeProject defaultWidth="1280" defaultHeight="720" antiAliasingLevel="0" entryPoint="Scripts/Main.lua" textureFiltering="linear" vSync="true" anisotropyLevel="0" frameRate="60">
+    <backgroundColor red="0.25" green="0.25" blue="0.25" />
+    <polyarray:packedItems>
+        <item type="folder" path="Resources" />
+        <item type="folder" path="Scripts" />
+    </polyarray:packedItems>
+</PolycodeProject>

+ 25 - 0
Examples/Lua/Game_Demos/DemoPlatformer/Resources/entities/alien.entity

@@ -0,0 +1,25 @@
+<?xml version="1.0" ?>
+<entity version="2">
+    <settings>
+        <linkedResourcePools>
+            <resourcePool path="Resources/sprites/main.sprites" />
+        </linkedResourcePools>
+        <layers />
+    </settings>
+    <root polystring:id="" layerID="0" polystring:tags="" type="Entity" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1" sY="1" sZ="1" rX="0" rY="0" rZ="0" rW="1" pX="0" pY="0" pZ="0" bbX="0" bbY="0" bbZ="0.001">
+        <children>
+            <child polystring:id="" layerID="0" polystring:tags="" type="SceneSprite" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1.07787" sY="1.07787" sZ="1.07787" rX="0" rY="0" rZ="0" rW="1" pX="0" pY="-0.0218377" pZ="0" bbX="1.14453" bbY="0.90625" bbZ="0.001">
+                <SceneSprite sprite_set="Resources/sprites/main.sprites" sprite="alien" random_frame="false" state="default" />
+                <SceneMesh material="Unlit">
+                    <shader_options>
+                        <shader>
+                            <textures>
+                                <texture name="diffuse">Resources/textures/spritesheet1.png</texture>
+                            </textures>
+                        </shader>
+                    </shader_options>
+                </SceneMesh>
+            </child>
+        </children>
+    </root>
+</entity>

+ 183 - 0
Examples/Lua/Game_Demos/DemoPlatformer/Resources/entities/level.entity

@@ -0,0 +1,183 @@
+<?xml version="1.0" ?>
+<entity version="2">
+    <settings>
+        <linkedResourcePools>
+            <resourcePool path="Resources/sprites/main.sprites" />
+        </linkedResourcePools>
+        <layers>
+            <layer name="background" id="1" visible="true" />
+        </layers>
+    </settings>
+    <root polystring:id="" layerID="0" polystring:tags="" type="Entity" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1" sY="1" sZ="1" rX="0" rY="0" rZ="0" rW="1" pX="0" pY="0" pZ="0" bbX="0" bbY="0" bbZ="0.001">
+        <children>
+            <child polystring:id="" layerID="0" polystring:tags="" type="ScenePrimitive" cR="0.849735" cG="0.776717" cB="0.925134" cA="1" blendMode="0" sX="0.0529437" sY="0.0529437" sZ="0.0529437" rX="0" rY="0" rZ="0" rW="1" pX="0" pY="0" pZ="0" bbX="480" bbY="270" bbZ="0.001">
+                <ScenePrimitive type="2" p1="480" p2="270" p3="1" p4="0" p5="0" />
+                <SceneMesh material="Unlit">
+                    <shader_options>
+                        <shader>
+                            <textures>
+                                <texture name="diffuse">Resources/textures/bg.png</texture>
+                            </textures>
+                        </shader>
+                    </shader_options>
+                </SceneMesh>
+            </child>
+            <child polystring:id="" layerID="0" tags="shot" type="SceneSprite" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1" sY="1" sZ="1" rX="0" rY="0" rZ="0" rW="1" pX="13.2232" pY="-1.29746" pZ="0" bbX="0.75" bbY="0.15" bbZ="0.001">
+                <SceneSprite sprite_set="Resources/sprites/main.sprites" sprite="shot" random_frame="false" state="default" />
+                <SceneMesh material="UnlitAdditive">
+                    <shader_options>
+                        <shader>
+                            <textures>
+                                <texture name="diffuse">Resources/textures/spritesheet1.png</texture>
+                            </textures>
+                        </shader>
+                    </shader_options>
+                </SceneMesh>
+            </child>
+            <child polystring:id="" layerID="0" tags="shot" type="SceneSprite" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1" sY="1" sZ="1" rX="0" rY="0" rZ="0" rW="1" pX="13.2232" pY="-0.92342" pZ="0" bbX="0.75" bbY="0.15" bbZ="0.001">
+                <SceneSprite sprite_set="Resources/sprites/main.sprites" sprite="shot" random_frame="false" state="default" />
+                <SceneMesh material="UnlitAdditive">
+                    <shader_options>
+                        <shader>
+                            <textures>
+                                <texture name="diffuse">Resources/textures/spritesheet1.png</texture>
+                            </textures>
+                        </shader>
+                    </shader_options>
+                </SceneMesh>
+            </child>
+            <child polystring:id="" layerID="0" tags="shot" type="SceneSprite" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1" sY="1" sZ="1" rX="0" rY="0" rZ="0" rW="1" pX="13.2232" pY="-0.467555" pZ="0" bbX="0.75" bbY="0.15" bbZ="0.001">
+                <SceneSprite sprite_set="Resources/sprites/main.sprites" sprite="shot" random_frame="false" state="default" />
+                <SceneMesh material="UnlitAdditive">
+                    <shader_options>
+                        <shader>
+                            <textures>
+                                <texture name="diffuse">Resources/textures/spritesheet1.png</texture>
+                            </textures>
+                        </shader>
+                    </shader_options>
+                </SceneMesh>
+            </child>
+            <child polystring:id="" layerID="0" tags="shot" type="SceneSprite" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1" sY="1" sZ="1" rX="0" rY="0" rZ="0" rW="1" pX="13.2232" pY="0" pZ="0" bbX="0.75" bbY="0.15" bbZ="0.001">
+                <SceneSprite sprite_set="Resources/sprites/main.sprites" sprite="shot" random_frame="false" state="default" />
+                <SceneMesh material="UnlitAdditive">
+                    <shader_options>
+                        <shader>
+                            <textures>
+                                <texture name="diffuse">Resources/textures/spritesheet1.png</texture>
+                            </textures>
+                        </shader>
+                    </shader_options>
+                </SceneMesh>
+            </child>
+            <child polystring:id="" layerID="0" tags="alien" type="SceneEntityInstance" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1" sY="1" sZ="1" rX="0" rY="0" rZ="0" rW="1" pX="15.1582" pY="2.18427" pZ="0" bbX="0.8" bbY="0.8" bbZ="0.001">
+                <SceneEntityInstance filePath="Resources/entities/alien.entity" />
+            </child>
+            <child polystring:id="" layerID="0" tags="shot" type="SceneSprite" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1" sY="1" sZ="1" rX="0" rY="0" rZ="0" rW="1" pX="13.2232" pY="-1.72364" pZ="0" bbX="0.75" bbY="0.15" bbZ="0.001">
+                <SceneSprite sprite_set="Resources/sprites/main.sprites" sprite="shot" random_frame="false" state="default" />
+                <SceneMesh material="UnlitAdditive">
+                    <shader_options>
+                        <shader>
+                            <textures>
+                                <texture name="diffuse">Resources/textures/spritesheet1.png</texture>
+                            </textures>
+                        </shader>
+                    </shader_options>
+                </SceneMesh>
+            </child>
+            <child polystring:id="" layerID="0" tags="shot" type="SceneSprite" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1" sY="1" sZ="1" rX="0" rY="0" rZ="0" rW="1" pX="13.2232" pY="-2.2171" pZ="0" bbX="0.75" bbY="0.15" bbZ="0.001">
+                <SceneSprite sprite_set="Resources/sprites/main.sprites" sprite="shot" random_frame="false" state="default" />
+                <SceneMesh material="UnlitAdditive">
+                    <shader_options>
+                        <shader>
+                            <textures>
+                                <texture name="diffuse">Resources/textures/spritesheet1.png</texture>
+                            </textures>
+                        </shader>
+                    </shader_options>
+                </SceneMesh>
+            </child>
+            <child id="player" layerID="0" polystring:tags="" type="SceneEntityInstance" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1" sY="1" sZ="1" rX="0" rY="0" rZ="0" rW="1" pX="0.231572" pY="1.58956" pZ="0" bbX="0.7" bbY="1" bbZ="0.001">
+                <SceneEntityInstance filePath="Resources/entities/spaceman.entity" />
+            </child>
+            <child polystring:id="" layerID="0" tags="platform" type="SceneSprite" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="2.57258" sY="2.57258" sZ="2.57258" rX="0" rY="0" rZ="0.0264116" rW="0.999651" pX="0" pY="-2.12834" pZ="0" bbX="2.40625" bbY="0.820312" bbZ="0.001">
+                <SceneSprite sprite_set="Resources/sprites/main.sprites" sprite="platform1" random_frame="false" state="default" />
+                <SceneMesh material="Unlit">
+                    <shader_options>
+                        <shader>
+                            <textures>
+                                <texture name="diffuse">Resources/textures/spritesheet1.png</texture>
+                            </textures>
+                        </shader>
+                    </shader_options>
+                </SceneMesh>
+            </child>
+            <child polystring:id="" layerID="0" tags="platform" type="SceneSprite" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1.45782" sY="1.45782" sZ="1.45782" rX="0" rY="0" rZ="-0.0980919" rW="0.995177" pX="-8.2646" pY="-4.23049" pZ="0" bbX="2.40625" bbY="0.820312" bbZ="0.001">
+                <SceneSprite sprite_set="Resources/sprites/main.sprites" sprite="platform1" random_frame="false" state="default" />
+                <SceneMesh material="Unlit">
+                    <shader_options>
+                        <shader>
+                            <textures>
+                                <texture name="diffuse">Resources/textures/spritesheet1.png</texture>
+                            </textures>
+                        </shader>
+                    </shader_options>
+                </SceneMesh>
+            </child>
+            <child polystring:id="" layerID="0" tags="platform" type="SceneSprite" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1.45782" sY="1.45782" sZ="1.45782" rX="0" rY="0" rZ="0.071745" rW="0.997423" pX="-4.45665" pY="2.13247" pZ="0" bbX="2.40625" bbY="0.820312" bbZ="0.001">
+                <SceneSprite sprite_set="Resources/sprites/main.sprites" sprite="platform1" random_frame="false" state="default" />
+                <SceneMesh material="Unlit">
+                    <shader_options>
+                        <shader>
+                            <textures>
+                                <texture name="diffuse">Resources/textures/spritesheet1.png</texture>
+                            </textures>
+                        </shader>
+                    </shader_options>
+                </SceneMesh>
+            </child>
+            <child polystring:id="" layerID="0" tags="platform" type="SceneSprite" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1.45782" sY="1.45782" sZ="1.45782" rX="0" rY="0" rZ="-0.0218" rW="0.999762" pX="4.88306" pY="2.32545" pZ="0" bbX="2.40625" bbY="0.820312" bbZ="0.001">
+                <SceneSprite sprite_set="Resources/sprites/main.sprites" sprite="platform1" random_frame="false" state="default" />
+                <SceneMesh material="Unlit">
+                    <shader_options>
+                        <shader>
+                            <textures>
+                                <texture name="diffuse">Resources/textures/spritesheet1.png</texture>
+                            </textures>
+                        </shader>
+                    </shader_options>
+                </SceneMesh>
+            </child>
+            <child polystring:id="" layerID="0" tags="platform" type="SceneSprite" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1.45782" sY="1.45782" sZ="1.45782" rX="0" rY="0" rZ="0.126274" rW="0.991995" pX="8.60203" pY="-4.63835" pZ="0" bbX="2.40625" bbY="0.820312" bbZ="0.001">
+                <SceneSprite sprite_set="Resources/sprites/main.sprites" sprite="platform1" random_frame="false" state="default" />
+                <SceneMesh material="Unlit">
+                    <shader_options>
+                        <shader>
+                            <textures>
+                                <texture name="diffuse">Resources/textures/spritesheet1.png</texture>
+                            </textures>
+                        </shader>
+                    </shader_options>
+                </SceneMesh>
+            </child>
+            <child polystring:id="" layerID="0" tags="alien" type="SceneEntityInstance" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1" sY="1" sZ="1" rX="0" rY="0" rZ="0" rW="1" pX="15.1582" pY="3.43773" pZ="0" bbX="0.8" bbY="0.8" bbZ="0.001">
+                <SceneEntityInstance filePath="Resources/entities/alien.entity" />
+            </child>
+            <child polystring:id="" layerID="0" tags="alien" type="SceneEntityInstance" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1" sY="1" sZ="1" rX="0" rY="0" rZ="0" rW="1" pX="15.1582" pY="4.71904" pZ="0" bbX="0.8" bbY="0.8" bbZ="0.001">
+                <SceneEntityInstance filePath="Resources/entities/alien.entity" />
+            </child>
+            <child polystring:id="" layerID="0" tags="alien" type="SceneEntityInstance" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1" sY="1" sZ="1" rX="0" rY="0" rZ="0" rW="1" pX="15.1582" pY="5.88893" pZ="0" bbX="0.8" bbY="0.8" bbZ="0.001">
+                <SceneEntityInstance filePath="Resources/entities/alien.entity" />
+            </child>
+            <child polystring:id="" layerID="0" tags="alien" type="SceneEntityInstance" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1" sY="1" sZ="1" rX="0" rY="0" rZ="0" rW="1" pX="15.1582" pY="7.22595" pZ="0" bbX="0.8" bbY="0.8" bbZ="0.001">
+                <SceneEntityInstance filePath="Resources/entities/alien.entity" />
+            </child>
+            <child polystring:id="" layerID="0" tags="alien" type="SceneEntityInstance" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1" sY="1" sZ="1" rX="0" rY="0" rZ="0" rW="1" pX="15.1582" pY="8.59083" pZ="0" bbX="0.8" bbY="0.8" bbZ="0.001">
+                <SceneEntityInstance filePath="Resources/entities/alien.entity" />
+            </child>
+            <child polystring:id="" layerID="0" tags="alien" type="SceneEntityInstance" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1" sY="1" sZ="1" rX="0" rY="0" rZ="0" rW="1" pX="15.1582" pY="9.85506" pZ="0" bbX="0.8" bbY="0.8" bbZ="0.001">
+                <SceneEntityInstance filePath="Resources/entities/alien.entity" />
+            </child>
+        </children>
+    </root>
+</entity>

+ 38 - 0
Examples/Lua/Game_Demos/DemoPlatformer/Resources/entities/spaceman.entity

@@ -0,0 +1,38 @@
+<?xml version="1.0" ?>
+<entity version="2">
+    <settings>
+        <linkedResourcePools>
+            <resourcePool path="Resources/sprites/main.sprites" />
+        </linkedResourcePools>
+        <layers />
+    </settings>
+    <root polystring:id="" layerID="0" polystring:tags="" type="Entity" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1" sY="1" sZ="1" rX="0" rY="0" rZ="0" rW="1" pX="0" pY="0" pZ="0" bbX="0" bbY="0" bbZ="0.001">
+        <children>
+            <child id="legs" layerID="0" polystring:tags="" type="SceneSprite" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1" sY="1" sZ="1" rX="0" rY="0" rZ="0" rW="1" pX="-0.0284691" pY="-0.25339" pZ="0" bbX="0.640625" bbY="0.476562" bbZ="0.001">
+                <SceneSprite sprite_set="Resources/sprites/main.sprites" sprite="spaceman_legs" random_frame="false" state="idle" />
+                <SceneMesh material="Unlit">
+                    <shader_options>
+                        <shader>
+                            <textures>
+                                <texture name="diffuse">Resources/textures/spritesheet1.png</texture>
+                            </textures>
+                        </shader>
+                    </shader_options>
+                </SceneMesh>
+            </child>
+            <child id="top" layerID="0" polystring:tags="" type="SceneSprite" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1" sY="1" sZ="1" rX="0" rY="0" rZ="0.00174197" rW="0.999999" pX="0.0131945" pY="0.0609013" pZ="0" bbX="0.972656" bbY="0.824219" bbZ="0.001">
+                <SceneSprite sprite_set="Resources/sprites/main.sprites" sprite="spaceman_top" random_frame="false" state="default" />
+                <SceneMesh material="Unlit">
+                    <shader_options>
+                        <shader>
+                            <textures>
+                                <texture name="diffuse">Resources/textures/spritesheet1.png</texture>
+                            </textures>
+                        </shader>
+                    </shader_options>
+                </SceneMesh>
+            </child>
+            <child id="groundSensor" layerID="0" polystring:tags="" type="Entity" cR="1" cG="1" cB="1" cA="1" blendMode="0" sX="1" sY="1" sZ="1" rX="0" rY="0" rZ="0" rW="1" pX="-0.0200045" pY="-0.493096" pZ="0" bbX="0.2" bbY="0.2" bbZ="0.2" />
+        </children>
+    </root>
+</entity>

BIN
Examples/Lua/Game_Demos/DemoPlatformer/Resources/music/level1.ogg


BIN
Examples/Lua/Game_Demos/DemoPlatformer/Resources/sounds/jump.ogg


BIN
Examples/Lua/Game_Demos/DemoPlatformer/Resources/sounds/shot.ogg


+ 50 - 0
Examples/Lua/Game_Demos/DemoPlatformer/Resources/sprites/main.sprites

@@ -0,0 +1,50 @@
+<?xml version="1.0" ?>
+<sprite_set>
+    <sprite_sheet fileName="Resources/textures/spritesheet1.png">
+        <frames>
+            <frame id="0" x="0.549805" y="0.0175781" w="0.0527344" h="0.0605469" ax="0" ay="0.5" />
+            <frame id="1" x="0.606445" y="0.0615234" w="0.0683594" h="0.0595703" ax="0" ay="0.5" />
+            <frame id="2" x="0.491211" y="0.0791016" w="0.0507812" h="0.0488281" ax="0" ay="0.5" />
+            <frame id="3" x="0.259766" y="0.0341797" w="0.222656" h="0.116211" ax="0" ay="0.003121" />
+            <frame id="4" x="0.0117188" y="0.0185547" w="0.243164" h="0.206055" ax="-0.0107939" ay="0.181557" />
+            <frame id="5" x="0.699219" y="0.0078125" w="0.286133" h="0.226562" ax="0" ay="0.00185537" />
+            <frame id="6" x="0.446289" y="0.305664" w="0.136719" h="0.121094" ax="0" ay="0.5" />
+            <frame id="7" x="0.0185547" y="0.293945" w="0.201172" h="0.132812" ax="0" ay="0.5" />
+            <frame id="8" x="0.585938" y="0.322266" w="0.146484" h="0.116211" ax="0" ay="0.5" />
+            <frame id="9" x="0.226562" y="0.311523" w="0.207031" h="0.119141" ax="0.0633884" ay="0.5" />
+            <frame id="10" x="0.749023" y="0.321289" w="0.132812" h="0.120117" ax="0" ay="0.5" />
+            <frame id="11" x="0.0527344" y="0.476562" w="0.145508" h="0.129883" ax="0" ay="0.5" />
+            <frame id="12" x="0.255859" y="0.480469" w="0.160156" h="0.119141" ax="0" ay="0.5" />
+            <frame id="14" x="0.392578" y="0.723633" w="0.601562" h="0.266602" ax="-0.00872618" ay="0.0471335" />
+        </frames>
+    </sprite_sheet>
+    <sprites>
+        <sprite name="spaceman_legs">
+            <states>
+                <state name="running" fps="18" scale="256" width="206" height="136" offset_x="0" offset_y="-0.5" frame_ids="7,9,6,8,10,11" />
+                <state name="idle" fps="60" scale="256" width="164" height="122" offset_x="0" offset_y="-0.5" frame_ids="12" />
+                <state name="jumping" fps="60" scale="256" width="206" height="136" offset_x="0" offset_y="-0.5" frame_ids="7" />
+            </states>
+        </sprite>
+        <sprite name="spaceman_top">
+            <states>
+                <state name="default" fps="60" scale="256" width="249" height="211" offset_x="0" offset_y="0" frame_ids="4" />
+            </states>
+        </sprite>
+        <sprite name="alien">
+            <states>
+                <state name="default" fps="60" scale="256" width="293" height="232" offset_x="0" offset_y="0" frame_ids="5" />
+            </states>
+        </sprite>
+        <sprite name="platform1">
+            <states>
+                <state name="default" fps="60" scale="256" width="616" height="210" offset_x="0" offset_y="0" frame_ids="14" />
+            </states>
+        </sprite>
+        <sprite name="shot">
+            <states>
+                <state name="default" fps="60" scale="200" width="150" height="30" offset_x="0" offset_y="0" frame_ids="3" />
+            </states>
+        </sprite>
+    </sprites>
+</sprite_set>

BIN
Examples/Lua/Game_Demos/DemoPlatformer/Resources/textures/bg.png


BIN
Examples/Lua/Game_Demos/DemoPlatformer/Resources/textures/spritesheet1.png


+ 53 - 0
Examples/Lua/Game_Demos/DemoPlatformer/Scripts/Alien.lua

@@ -0,0 +1,53 @@
+
+class "Alien"
+
+function Alien:Alien(scene, alienBody ,player)
+	self.scene = scene
+	self.body = alienBody
+	self.physicsBody = scene:trackPhysicsChild(alienBody, PhysicsScene2DEntity.ENTITY_CIRCLE, false, 1.0, 40.0, 0.5, false, true)
+	self.dead = false
+	self.player = player
+	self.timeSinceDead = 0.0
+	self.targetPosition = Vector3(0.0, 0.0, 0.0)
+end
+
+function Alien:Think(elapsed)
+
+	local direction = Vector3(player.playerBody:getPosition().x - self.targetPosition.x, player.playerBody:getPosition().y - self.targetPosition.y, 0.0)
+	direction:Normalize()
+
+	self.targetPosition.x  = self.targetPosition.x + (direction.x * elapsed * 1.5)
+	self.targetPosition.y  = self.targetPosition.y + (direction.y * elapsed * 1.5)
+	
+	if self.targetPosition.y > self.body:getPosition().y then
+		self.physicsBody:setVelocityY(5.0)
+	else
+		self.physicsBody:setVelocityY(0.1)
+	end
+
+	if self.targetPosition.x > self.body:getPosition().x then
+		self.physicsBody:setVelocityX(5.0)
+	else
+		self.physicsBody:setVelocityX(-5.0)
+	end
+end
+
+function Alien:Respawn()
+	self.timeSinceDead = 0.0
+	self.dead = false
+
+	local respawnAngle = random(pi * 2.0)
+	local respawnDistance = 20.0
+	self.physicsBody:setTransform(Vector2(cos(respawnAngle) * respawnDistance, sin(respawnAngle) * respawnDistance), 0.0)
+end
+
+function Alien:Update(elapsed)
+	if self.dead == false then
+		self:Think(elapsed)
+	else
+		self.timeSinceDead = self.timeSinceDead + elapsed
+		if self.timeSinceDead > 2.0 then
+			self:Respawn()
+		end
+	end
+end

+ 103 - 0
Examples/Lua/Game_Demos/DemoPlatformer/Scripts/Main.lua

@@ -0,0 +1,103 @@
+
+require "Scripts/Player"
+require "Scripts/Alien"
+
+music = Sound("Resources/music/level1.ogg")
+music:Play(true)
+
+Services.MaterialManager.premultiplyAlphaOnLoad = true
+
+scene = PhysicsScene2D(1.0, 60)
+scene:setGravity(Vector2(0.0, -30.0))
+
+scene:getDefaultCamera():setOrthoSize(0, 14)
+
+level = SceneEntityInstance(scene, "Resources/entities/level.entity")
+scene:addChild(level)
+
+playerBody = level:getEntityById("player", true)
+player = Player(scene, playerBody)
+
+alienBodies = level:getEntitiesByTag("alien", false)
+aliens = {}
+for i=1,count(alienBodies) do
+	local alien = Alien(scene, alienBodies[i], player)
+	aliens[i] = alien	
+	alien:Respawn()
+end
+
+shootTimer = 0.0
+
+
+platforms = level:getEntitiesByTag("platform", false)
+for i=1,count(platforms) do
+		scene:trackPhysicsChild(platforms[i], PhysicsScene2DEntity.ENTITY_RECT, true, 2.0, 1, 0, false, false)
+end
+
+shots = level:getEntitiesByTag("shot", false)
+shotDirections = {}
+for i=1,count(shots) do
+	shots[i] = safe_cast(shots[i], SceneSprite)
+	scene:trackCollisionChild(shots[i], PhysicsScene2DEntity.ENTITY_RECT, -1)
+	shots[i].backfaceCulled = false
+	shotDirections[i] = 0.0
+end
+shotIndex = 1
+
+function onKeyDown(key)
+	player:onKeyDown(key)
+end
+
+function onCollision(t, event)
+	local physicsEvent = safe_cast(event, PhysicsScene2DEvent)
+
+	for i=1,count(shots) do
+		if physicsEvent.entity2 == shots[i] or physicsEvent.entity1 == shots[i] then
+			for j=1,count(aliens) do
+				if aliens[j].body == physicsEvent.entity1 or aliens[j].body == physicsEvent.entity2 then
+					aliens[j].dead = true
+					if shots[i]:getPosition().x > aliens[j].body:getPosition().x then
+						aliens[j].physicsBody:applyImpulse(-230.0, 0.0)
+					else
+						aliens[j].physicsBody:applyImpulse(230.0, 0.0)
+					end
+				end
+			end
+			shots[i]:setPositionX(1000.0)						
+		end
+	end
+end
+
+scene:addEventListener(nil, onCollision, PhysicsScene2DEvent.EVENT_NEW_SHAPE_COLLISION)
+
+function Update(elapsed)
+
+	player:Update(elapsed)
+
+	shootTimer = shootTimer + elapsed
+	if Services.Input:getKeyState(KEY_x) then
+		if shootTimer > 0.15 then
+			shotDirections[shotIndex] = player:Shoot(shots[shotIndex])
+			shotIndex = shotIndex +1
+			if shotIndex > count(shots) then shotIndex = 1 end
+			shootTimer = 0.0
+		end
+	else
+		shootTimer = 100.0
+	end
+end
+
+function fixedUpdate()
+	local elapsed = Services.Core:getFixedTimestep()
+	player:fixedUpdate(elapsed)
+
+	for i=1,count(aliens) do
+		aliens[i]:Update(elapsed)
+	end
+
+	for i=1,count(shots) do
+		shots[i]:setRoll(shotDirections[i])
+		shots[i]:Translate(elapsed * 18.0 * cos(shotDirections[i] * 0.0174532925), elapsed * 18.0 * sin(shotDirections[i] * 0.0174532925), 0.0)
+	end
+
+end

+ 107 - 0
Examples/Lua/Game_Demos/DemoPlatformer/Scripts/Player.lua

@@ -0,0 +1,107 @@
+
+class "Player"
+
+function Player:Player(scene, playerBody)
+	self.scene = scene
+	self.playerBody = playerBody
+	self.top = safe_cast(playerBody:getEntityById("top", true), SceneSprite)
+	self.legs = safe_cast(playerBody:getEntityById("legs", true), SceneSprite)
+	self.groundSensor = playerBody:getEntityById("groundSensor", true)
+	scene:trackCollisionChild(self.groundSensor, PhysicsScene2DEntity.ENTITY_RECT, -1)
+	self.topSinValue = 0.0
+	self.physicsBody = scene:trackPhysicsChild(playerBody, PhysicsScene2DEntity.ENTITY_TRIPLE_CIRCLE, false, 0.0, 10, 0, false, true, -1)
+	self.legs.backfaceCulled = false
+	self.top.backfaceCulled = false
+	self.touchingGround = false
+	self.jumpsLeft = 1
+	self.shootSound = Sound("Resources/sounds/shot.ogg")
+	self.jumpSound = Sound("Resources/sounds/jump.ogg")
+	self.shootAngle = 0.0
+	self.moveDir = 0.0
+end
+
+function Player:onKeyDown(key)
+	if key == KEY_z and self.jumpsLeft > 0 then
+		self.physicsBody:setVelocityY(0.0)
+		self.physicsBody:applyImpulse(0.0, 140.0)
+		self.jumpsLeft = self.jumpsLeft -1
+		self.jumpSound:Play()
+	end
+end
+
+function Player:Shoot(shot)
+	shot:setPosition(self.playerBody:getPosition().x + (0.25  * cos(self.shootAngle * 0.0174532925))-0.1, self.playerBody:getPosition().y + (0.25 * sin(self.shootAngle * 0.0174532925)) + 0.3, self.playerBody:getPosition().z)
+	self.shootSound:Play()
+	return self.shootAngle
+end
+
+function Player:Update(elapsed)
+	self.topSinValue = self.topSinValue + elapsed * 20.0
+	self.top:setPositionY(0.06090 + sin(self.topSinValue) * 0.025)
+
+	self.moveDir = 0.0
+
+	if Services.Input:getKeyState(KEY_LEFT) then
+		self.moveDir = -1.0
+		self.playerBody:setScaleX(-1.0)
+	elseif Services.Input:getKeyState(KEY_RIGHT) then
+		self.moveDir = 1.0
+		self.playerBody:setScaleX(1.0)
+	end
+
+	if Services.Input:getKeyState(KEY_UP) then
+		self.top:setRoll(45)
+		if self.playerBody:getScale().x > 0.0 then
+			self.shootAngle = 45
+		else
+			self.shootAngle = 135
+			end
+	elseif Services.Input:getKeyState(KEY_DOWN) then
+		self.top:setRoll(-45)
+		if self.playerBody:getScale().x > 0.0 then
+			self.shootAngle = -45
+		else
+			self.shootAngle = -135
+		end
+	else
+		self.top:setRoll(0)
+		if self.playerBody:getScale().x > 0.0 then
+			self.shootAngle = 0
+		else
+			self.shootAngle = 180
+		end
+	end
+
+	if self.scene:isEntityColliding(self.groundSensor) then
+		self.touchingGround = true
+		self.jumpsLeft = 1
+	else
+		self.touchingGround = false
+		self.legs:setSpriteStateByName("jumping", 0, false)
+	end
+
+	if self.touchingGround == true then
+		if self.moveDir == 0.0 then
+			self.legs:setSpriteStateByName("idle", 0, false)
+		else
+			self.legs:setSpriteStateByName("running", 0, false)
+		end
+	end
+		
+	self.physicsBody:setVelocityX(self.moveDir * 5.0)
+end
+
+function Player:fixedUpdate(elapsed)
+
+	if self.playerBody:getPosition().y < -8.0 then
+		self.physicsBody:setTransform(Vector2(self.playerBody:getPosition().x, 8.0), 0.0)
+	end
+
+	if self.playerBody:getPosition().x < -12.0 then
+		self.physicsBody:setTransform(Vector2(12, self.playerBody:getPosition().y), 0.0)
+	end
+
+	if self.playerBody:getPosition().x > 12.0 then
+		self.physicsBody:setTransform(Vector2(-12, self.playerBody:getPosition().y), 0.0)
+	end
+end