Pārlūkot izejas kodu

Fixed up contributed 3D physics examples in Lua

Ivan Safrin 11 gadi atpakaļ
vecāks
revīzija
f26962cd7a

+ 2 - 2
Examples/Lua/3D_Physics/3DPhysics_Basic/3DPhysics_Basic.polyproject

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

+ 1 - 1
Examples/Lua/3D_Physics/3DPhysics_Basic/Scripts/Main.lua

@@ -14,4 +14,4 @@ for i = 1, 100 do
 end
 
 scene:getDefaultCamera():setPosition(7, 7, 7)
-scene:getDefaultCamera():lookAt(Vector3(0, 0, 0), Vector3(1, 1, 1))
+scene:getDefaultCamera():lookAt(Vector3(0, 0, 0), Vector3(0, 1, 0))

+ 22 - 32
Examples/Lua/3D_Physics/3DPhysics_Character/Scripts/Main.lua

@@ -45,41 +45,31 @@ hud:addChild(onGroundLabel)
 
 
 scene:getDefaultCamera():setPosition(7, 7, 7)
-scene:getDefaultCamera():lookAt(Vector3(0, 0, 0), Vector3(1, 1, 1))
-
-function handleKeyEvent(t, e)
-	if not e:getDispatcher() == CoreServices.getInstance():getCore():getInput() then return end
-
-	local inputEvent = safe_cast(e, InputEvent)
-	
-	local eventKeyCode = e:getEventCode()
-	if eventKeyCode == InputEvent.EVENT_KEYDOWN then
-		local keyCode = inputEvent:keyCode()
-
-		if keyCode == KEY_r then
-			playerController:warpCharacter(Vector3(2, 1, 2))
-		elseif keyCode == KEY_UP then
-			walkSpeed = 0.05
-		elseif keyCode == KEY_DOWN then
-			walkSpeed = -0.05
-		elseif keyCode == KEY_LEFT then
-			rotateSpeed = 3
-		elseif keyCode == KEY_RIGHT then
-			rotateSpeed = -3
-		elseif keyCode == KEY_SPACE then
-			playerController:jump()
-		end
-	elseif eventKeyCode == InputEvent.EVENT_KEYUP then
-		if inputEvent.key == KEY_DOWN then
-			walkSpeed = 0
-		elseif inputEvent.key == KEY_RIGHT then
-			rotateSpeed = 0
-		end
+scene:getDefaultCamera():lookAt(Vector3(0, 0, 0), Vector3(0, 1, 0))
+
+function onKeyDown(keyCode)
+	if keyCode == KEY_r then
+		playerController:warpCharacter(Vector3(2, 1, 2))
+	elseif keyCode == KEY_UP then
+		walkSpeed = 0.05
+	elseif keyCode == KEY_DOWN then
+		walkSpeed = -0.05
+	elseif keyCode == KEY_LEFT then
+		rotateSpeed = 3
+	elseif keyCode == KEY_RIGHT then
+		rotateSpeed = -3
+	elseif keyCode == KEY_SPACE then
+		playerController:jump()
 	end
 end
 
-CoreServices.getInstance():getCore():getInput():addEventListener(nil, handleKeyEvent, InputEvent.EVENT_KEYDOWN)
-CoreServices.getInstance():getCore():getInput():addEventListener(nil, handleKeyEvent, InputEvent.EVENT_KEYUP)
+function onKeyUp(keyCode)
+	if keyCode == KEY_DOWN or keyCode == KEY_UP then
+		walkSpeed = 0
+	elseif keyCode == KEY_RIGHT or keyCode == KEY_LEFT then
+		rotateSpeed = 0
+	end
+end
 
 function Update(elapsed)
 	playerDirection = playerDirection + rotateSpeed * elapsed

+ 2 - 2
Examples/Lua/3D_Physics/3DPhysics_CollisionOnly/Scripts/Main.lua

@@ -17,7 +17,7 @@ scene:addCollisionChild(bigBox, CollisionEntity.SHAPE_BOX)
 
 
 scene:getDefaultCamera():setPosition(7, 7, 7)
-scene:getDefaultCamera():lookAt(Vector3(0, 0, 0), Vector3(1, 1, 1))
+scene:getDefaultCamera():lookAt(Vector3(0, 0, 0), Vector3(0, 1, 0))
 
 local swingValue = 0
 
@@ -26,7 +26,7 @@ function Update(elapsed)
 	box:setPosition(math.sin(swingValue) * 5, 1, 0)	
 	
 	if scene:testCollision(box, bigBox).collided then
-		bigBox:setColor(1, 1, 0, 0)		
+		bigBox:setColor(1, 1, 0, 0.5)		
 	else
 		bigBox:setColor(0, 1, 1, 0.5)	
 	end

+ 3 - 4
Examples/Lua/3D_Physics/3DPhysics_Contacts/Scripts/Main.lua

@@ -16,14 +16,13 @@ for i = 1, 100 do
 end
 
 scene:getDefaultCamera():setPosition(7, 7, 7)
-scene:getDefaultCamera():lookAt(Vector3(0, 0, 0), Vector3(1, 1, 1))
+scene:getDefaultCamera():lookAt(Vector3(0, 0, 0), Vector3(0, 1, 0))
 
 collisionSound = Sound("Resources/hit.wav")
 
 function onCollisionEvent(t, event)
-	if not event:getDispatcher() == scene then return end
-
-	if safe_cast(event, PhysicsSceneEvent).physEvent.appliedImpulse > 2 then
+	local physEvent = safe_cast(event, PhysicsSceneEvent)
+	if physEvent.appliedImpulse > 2 then
 			collisionSound:Play()
 	end
 end

+ 11 - 17
Examples/Lua/3D_Physics/3DPhysics_RayTest/Scripts/Main.lua

@@ -28,26 +28,20 @@ scene:addCollisionChild(cylinder, CollisionEntity.SHAPE_CYLINDER)
 
 
 scene:getDefaultCamera():setPosition(7, 7, 7)
-scene:getDefaultCamera():lookAt(Vector3(0, 0, 0), Vector3(1, 1, 1))
+scene:getDefaultCamera():lookAt(Vector3(0, 0, 0), Vector3(0, 1, 0))
 
 local lastEntity = nil
-function mouseDownEvent(t, e)
-	if not e:getDispatcher() == CoreServices.getInstance():getCore():getInput() then return end
 
-	local inputEvent = safe_cast(e, InputEvent)
+function onMouseDown(button, x, y)
+	local ray = scene:projectRayFromCameraAndViewportCoordinate(scene:getActiveCamera(), Vector2(x,y))
+	local res = scene:getFirstEntityInRay(ray.origin, Vector3(ray.direction.x * 100, ray.direction.y * 100, ray.direction.z * 100))
 
-	if e:getEventCode() == InputEvent.EVENT_MOUSEDOWN then
-        local ray = scene:projectRayFromCameraAndViewportCoordinate(scene:getActiveCamera(), inputEvent.mousePosition)
-		local res = scene:getFirstEntityInRay(ray.origin, Vector3(ray.direction.x * 100, ray.direction.y * 100, ray.direction.z * 100))
-
-		if lastEntity then
-			lastEntity:setColor(1, 1, 1, 1)
-		end
+	if lastEntity then
+		lastEntity:setColor(1, 1, 1, 1)
+	end
 
-		if res.entity then
-			res.entity:setColor(1, 0, 0, 1)
-			lastEntity = res.entity
+	if res.entity then
+		res.entity:setColor(1, 0, 0, 1)
+		lastEntity = res.entity
 		end
-	end
-end
-CoreServices.getInstance():getCore():getInput():addEventListener(nil, mouseDownEvent, InputEvent.EVENT_MOUSEDOWN)
+end

+ 26 - 35
Examples/Lua/3D_Physics/3DPhysics_Vehicle/Scripts/Main.lua

@@ -7,14 +7,14 @@ scene:addPhysicsChild(ground, 0, 0)
 -- Some obstacles
 local box = ScenePrimitive(ScenePrimitive.TYPE_BOX, 4,4,6)
 box:setPitch(25)
-box:setPosition(7, -15, 0)
+box:setPosition(7, -1, 0)
 box:setColor(0.5, 0.5, 1,1)
 box:loadTexture("Resources/green_texture.png")
 scene:addPhysicsChild(box, 0, 0)
 
 box = ScenePrimitive(ScenePrimitive.TYPE_BOX, 4, 4, 6)
 box:setPitch(25)
-box:setPosition(-7,-15, 0)
+box:setPosition(-7, -1, 0)
 box:setColor(0.5,0.5,1,1)
 box:loadTexture("Resources/green_texture.png")
 scene:addPhysicsChild(box, 0, 0)
@@ -77,42 +77,33 @@ scene:addCollisionChild(testBox, 0)
 
 
 scene:getDefaultCamera():setPosition(16, 16, 16)
-scene:getDefaultCamera():lookAt(Vector3(0, 0, 0), Vector3(1, 1, 1))
+scene:getDefaultCamera():lookAt(Vector3(0, 0, 0), Vector3(0, 1, 0))
+
+function onKeyDown(keyCode)
+	if keyCode == KEY_r then
+		vehicleController:warpVehicle(Vector3(6,1,5))
+	elseif keyCode == KEY_UP then
+		engineForce = -15
+	elseif keyCode == KEY_DOWN then
+		engineForce = 15
+	elseif keyCode == KEY_LEFT then
+		steeringValue = 0.5
+	elseif keyCode == KEY_RIGHT then
+		steeringValue = -0.5
+	elseif keyCode == KEY_SPACE then
+		breaking = true
+	end
+end
 
-local function handleKeyEvent(t, e)
-	if not e:getDispatcher() == CoreServices.getInstance():getCore():getInput() then return end
-	
-	local inputEvent = safe_cast(e, InputEvent)
-	
-	local eventKeyCode = e:getEventCode()
-	if eventKeyCode == InputEvent.EVENT_KEYDOWN then
-		local keyCode = inputEvent:keyCode()
-
-		if keyCode == KEY_r then
-			vehicleController:warpVehicle(Vector3(6,1,5))
-		elseif keyCode == KEY_UP then
-			engineForce = -15
-		elseif keyCode == KEY_DOWN then
-			engineForce = 15
-		elseif keyCode == KEY_LEFT then
-			steeringValue = 0.5
-		elseif keyCode == KEY_RIGHT then
-			steeringValue = -0.5
-		elseif keyCode == KEY_SPACE then
-			breaking = true
-		end
-	elseif eventKeyCode == InputEvent.EVENT_KEYUP then
-		if inputEvent.key == KEY_DOWN then
-			engineForce = 0	
-		elseif inputEvent.key == KEY_RIGHT then
-			steeringValue = 0
-		elseif inputEvent.key == KEY_SPACE then
-			breaking = false
-		end
+function onKeyUp(keyCode)
+	if keyCode == KEY_DOWN or keyCode == KEY_UP then
+		engineForce = 0	
+	elseif keyCode == KEY_RIGHT or keyCode == KEY_LEFT then
+		steeringValue = 0
+	elseif keyCode == KEY_SPACE then
+		breaking = false
 	end
 end
-CoreServices.getInstance():getCore():getInput():addEventListener(nil, handleKeyEvent, InputEvent.EVENT_KEYDOWN)
-CoreServices.getInstance():getCore():getInput():addEventListener(nil, handleKeyEvent, InputEvent.EVENT_KEYUP)
 
 function Update(elapsed)