| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- 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
|