Demonstrate usage of Lua closure to access 'upvalues' for scene update.
This commit is contained in:
parent
45b0db3590
commit
03b9908c1d
@ -3,12 +3,12 @@
|
||||
-- - Creating a 2D scene with sprite
|
||||
-- - Displaying the scene using the Renderer subsystem
|
||||
-- - Handling keyboard to move and zoom 2D camera
|
||||
-- - Using Lua Closure to update scene
|
||||
|
||||
require "LuaScripts/Utilities/Sample"
|
||||
|
||||
local scene_ = nil
|
||||
local cameraNode = nil
|
||||
local spriteNodes = {}
|
||||
|
||||
function Start()
|
||||
-- Execute the common startup for samples
|
||||
@ -53,6 +53,7 @@ function CreateScene()
|
||||
return
|
||||
end
|
||||
|
||||
local spriteNodes = {}
|
||||
local NUM_SPRITES = 200
|
||||
local halfWidth = width * 0.5
|
||||
local halfHeight = height * 0.5
|
||||
@ -76,6 +77,27 @@ function CreateScene()
|
||||
table.insert(spriteNodes, spriteNode)
|
||||
end
|
||||
|
||||
scene_.Update = function(self, timeStep)
|
||||
for _, spriteNode in ipairs(spriteNodes) do
|
||||
local position = spriteNode.position
|
||||
local moveSpeed = spriteNode.moveSpeed
|
||||
local newPosition = position + moveSpeed * timeStep
|
||||
|
||||
if newPosition.x < -halfWidth or newPosition.x > halfWidth then
|
||||
newPosition.x = position.x
|
||||
moveSpeed.x = -moveSpeed.x
|
||||
end
|
||||
|
||||
if newPosition.y < -halfHeight or newPosition.y > halfHeight then
|
||||
newPosition.y = position.y
|
||||
moveSpeed.y = -moveSpeed.y
|
||||
end
|
||||
|
||||
spriteNode.position = newPosition
|
||||
spriteNode:Roll(spriteNode.rotateSpeed * timeStep)
|
||||
end
|
||||
end
|
||||
|
||||
local animation = cache:GetResource("Animation2D", "Urho2D/GoldIcon.anm")
|
||||
if animation == nil then
|
||||
return
|
||||
@ -159,26 +181,6 @@ function HandleUpdate(eventType, eventData)
|
||||
-- Move the camera, scale movement with time step
|
||||
MoveCamera(timeStep)
|
||||
|
||||
local halfWidth = graphics.width * 0.5
|
||||
local halfHeight = graphics.height * 0.5
|
||||
|
||||
for _, spriteNode in ipairs(spriteNodes) do
|
||||
|
||||
local position = spriteNode.position
|
||||
local moveSpeed = spriteNode.moveSpeed
|
||||
local newPosition = position + moveSpeed * timeStep
|
||||
|
||||
if newPosition.x < -halfWidth or newPosition.x > halfWidth then
|
||||
newPosition.x = position.x
|
||||
moveSpeed.x = -moveSpeed.x
|
||||
end
|
||||
|
||||
if newPosition.y < -halfHeight or newPosition.y > halfHeight then
|
||||
newPosition.y = position.y
|
||||
moveSpeed.y = -moveSpeed.y
|
||||
end
|
||||
|
||||
spriteNode.position = newPosition
|
||||
spriteNode:Roll(spriteNode.rotateSpeed * timeStep)
|
||||
end
|
||||
-- Update scene
|
||||
scene_:Update(timeStep)
|
||||
end
|
||||
|
4
Rakefile
4
Rakefile
@ -122,6 +122,10 @@ task :travis_ci_package_upload do
|
||||
# Upload the package
|
||||
setup_digital_keys
|
||||
system "scp #{platform_prefix}Build/Urho3D-* urho-travis-ci@frs.sourceforge.net:/home/frs/project/urho3d/Urho3D/Snapshots" or abort 'Failed to upload binary package'
|
||||
# Upload readme file
|
||||
if ENV['SITE_UPDATE']
|
||||
system 'scp Readme.txt urho-travis-ci@frs.sourceforge.net:/home/frs/project/urho3d/Urho3D' or abort 'Failed to upload readme file'
|
||||
end
|
||||
end
|
||||
|
||||
def scaffolding(dir)
|
||||
|
Loading…
Reference in New Issue
Block a user