166 lines
No EOL
5 KiB
Lua
166 lines
No EOL
5 KiB
Lua
GameScene = Object.extend(Object)
|
|
|
|
function GameScene:new()
|
|
end
|
|
|
|
function GameScene:init()
|
|
GameScene:playerChanged(currentPlayer)
|
|
movementDelta = 0
|
|
|
|
pSystem = love.graphics.newParticleSystem(boosterParticle,128)
|
|
pSystem:setParticleLifetime(0,0.6)
|
|
pSystem:setLinearAcceleration(0,20,0,25)
|
|
pSystem:setSpeed(40,50)
|
|
pSystem:setRotation(10,20)
|
|
pSystem:setSpin(10,20)
|
|
pSystem:setRadialAcceleration(10,20)
|
|
pSystem:setTangentialAcceleration(10,20)
|
|
pSystem:setSizeVariation(0.3)
|
|
pSystem:setSizes(1,0.9,0.8,0.7,0.5,0.3,0.1,0.05)
|
|
pSystem:setColors(
|
|
1,1,1,1,
|
|
1,1,1,1,
|
|
1,1,1,1,
|
|
1,1,1,0.8,
|
|
1,1,1,0.6,
|
|
1,1,1,0.5,
|
|
1,1,1,0.4,
|
|
1,1,1,0.3
|
|
)
|
|
end
|
|
|
|
function GameScene:update(dt)
|
|
pSystem:update(dt)
|
|
GameScene:updateInput(dt)
|
|
GameScene:updateBounds(dt)
|
|
end
|
|
|
|
function GameScene:draw()
|
|
love.graphics.setColor(255,255,255, 1)
|
|
love.graphics.draw(pSystem, currentPlayer.px-2, currentPlayer.py)
|
|
love.graphics.draw(pSystem, currentPlayer.px+2, currentPlayer.py)
|
|
love.graphics.draw(
|
|
currentPlayer.ship.image,
|
|
currentPlayer.px,
|
|
currentPlayer.py,
|
|
currentPlayer.rot*(math.pi/180),
|
|
1, 1,
|
|
currentPlayer.ship.image:getWidth()/2,
|
|
currentPlayer.ship.image:getHeight()/2
|
|
)
|
|
|
|
love.graphics.print(currentPlayer.px..","..currentPlayer.py.." s: " .. currentPlayer.speed .. " a: " ..currentPlayer.acc,10,10)
|
|
end
|
|
|
|
function GameScene:drawHud()
|
|
|
|
love.graphics.setColor(255,255,255, 1)
|
|
love.graphics.draw( gameHud, 0, 600-66 )
|
|
|
|
love.graphics.setColor(255,255,255, 0.75)
|
|
love.graphics.draw( currentPlayer.image, 14, 550, 0, 0.5, 0.5 )
|
|
|
|
love.graphics.setColor( text.r, text.g, text.b, text.alpha )
|
|
love.graphics.print( currentPlayer.name, 48, 550 )
|
|
love.graphics.print( currentPlayer:getShipname(), 48, 566 )
|
|
|
|
end
|
|
|
|
function GameScene:keypressed(key,unicode)
|
|
if key == "1" then
|
|
GameScene:playerChanged(CaptainSteve)
|
|
elseif key == "2" then
|
|
GameScene:playerChanged(CaptainRobert)
|
|
elseif key == "3" then
|
|
GameScene:playerChanged(CaptainJohn)
|
|
end
|
|
end
|
|
|
|
function GameScene:playerChanged(to)
|
|
currentPlayer = to
|
|
currentPlayer.px = windowWidth/2
|
|
currentPlayer.py = windowHeight/2
|
|
currentPlayer.rot = 0
|
|
currentPlayer.acc = 0
|
|
currentPlayer.bounds = { x1= 20, y1= 20, x2= windowWidth-20, y2= windowHeight - 86}
|
|
end
|
|
|
|
function GameScene:updateInput(dt)
|
|
movementDelta = movementDelta + dt
|
|
if (movementDelta > 0.02) then
|
|
movementDelta = 0
|
|
|
|
local isUp = false
|
|
local isLeft = false
|
|
local isDown = false
|
|
local isRight = false
|
|
|
|
--local hAxis, vAxis, hAxis2, vAxis2 = love.joystick.getAxes(1)
|
|
--local axisMargin = 0.5
|
|
|
|
isUp = love.keyboard.isDown( "w" )-- or (not (vAxis == nil) and vAxis < -(1-axisMargin)) or (not (vAxis2 == nil) and vAxis2 < -(1-axisMargin)) or love.joystick.isDown(1, 1)
|
|
isDown = love.keyboard.isDown( "s" )-- or (not (vAxis == nil) and vAxis > (1-axisMargin)) or (not (vAxis2 == nil) and vAxis2 > (1-axisMargin)) or love.joystick.isDown(1, 2)
|
|
isLeft = love.keyboard.isDown( "a" )-- or (not (hAxis == nil) and hAxis < -(1-axisMargin)) or (not (hAxis2 == nil) and hAxis2 < -(1-axisMargin)) or love.joystick.isDown(1, 3)
|
|
isRight = love.keyboard.isDown( "d" )-- or (not (hAxis == nil) and hAxis > (1-axisMargin)) or (not (hAxis2 == nil) and hAxis2 > (1-axisMargin)) or love.joystick.isDown(1, 4)
|
|
|
|
if isUp and isLeft then
|
|
currentPlayer.rot = 315
|
|
particleRot = 45
|
|
elseif isUp and isRight then
|
|
currentPlayer.rot = 45
|
|
particleRot = 135
|
|
elseif isUp then
|
|
currentPlayer.rot = 0
|
|
particleRot = 90
|
|
elseif isDown and isLeft then
|
|
currentPlayer.rot = 225
|
|
particleRot = 315
|
|
elseif isDown and isRight then
|
|
currentPlayer.rot = 135
|
|
particleRot = 225
|
|
elseif isDown then
|
|
currentPlayer.rot = 180
|
|
particleRot = 270
|
|
elseif isLeft then
|
|
currentPlayer.rot = 270
|
|
particleRot = 0
|
|
elseif isRight then
|
|
currentPlayer.rot = 90
|
|
particleRot = 180
|
|
end
|
|
|
|
if isUp or isDown or isLeft or isRight then
|
|
currentPlayer.acc = currentPlayer.acc + currentPlayer.accIncr
|
|
elseif currentPlayer.acc > 0 then
|
|
currentPlayer.acc = currentPlayer.acc - currentPlayer.accIncr
|
|
end
|
|
|
|
currentPlayer.acc = math.clamp(0, currentPlayer.acc, 1)
|
|
|
|
if currentPlayer.acc > 0 then
|
|
pSystem:setDirection(particleRot*(math.pi/180))
|
|
pSystem:emit( 64 * currentPlayer.acc )
|
|
end
|
|
|
|
if isUp then
|
|
currentPlayer.py = currentPlayer.py - (currentPlayer.speed*currentPlayer.acc)
|
|
end
|
|
|
|
if isDown then
|
|
currentPlayer.py = currentPlayer.py + (currentPlayer.speed*currentPlayer.acc)
|
|
end
|
|
|
|
if isLeft then
|
|
currentPlayer.px = currentPlayer.px - (currentPlayer.speed*currentPlayer.acc)
|
|
end
|
|
|
|
if isRight then
|
|
currentPlayer.px = currentPlayer.px + (currentPlayer.speed*currentPlayer.acc)
|
|
end
|
|
end
|
|
end
|
|
|
|
function GameScene:updateBounds(dt)
|
|
currentPlayer.px = math.clamp( currentPlayer.bounds.x1, currentPlayer.px, currentPlayer.bounds.x2 )
|
|
currentPlayer.py = math.clamp( currentPlayer.bounds.y1, currentPlayer.py, currentPlayer.bounds.y2 )
|
|
end |