Player.lua 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. class "Player"
  2. function Player:Player(scene, playerBody)
  3. self.scene = scene
  4. self.playerBody = playerBody
  5. self.top = safe_cast(playerBody:getEntityById("top", true), SceneSprite)
  6. self.legs = safe_cast(playerBody:getEntityById("legs", true), SceneSprite)
  7. self.groundSensor = playerBody:getEntityById("groundSensor", true)
  8. scene:trackCollisionChild(self.groundSensor, PhysicsScene2DEntity.ENTITY_RECT, -1)
  9. self.topSinValue = 0.0
  10. self.physicsBody = scene:trackPhysicsChild(playerBody, PhysicsScene2DEntity.ENTITY_TRIPLE_CIRCLE, false, 0.0, 10, 0, false, true, -1)
  11. self.legs.backfaceCulled = false
  12. self.top.backfaceCulled = false
  13. self.touchingGround = false
  14. self.jumpsLeft = 1
  15. self.shootSound = Sound("Resources/sounds/shot.ogg")
  16. self.jumpSound = Sound("Resources/sounds/jump.ogg")
  17. self.shootAngle = 0.0
  18. self.moveDir = 0.0
  19. end
  20. function Player:onKeyDown(key)
  21. if key == KEY_z and self.jumpsLeft > 0 then
  22. self.physicsBody:setVelocityY(0.0)
  23. self.physicsBody:applyImpulse(0.0, 140.0)
  24. self.jumpsLeft = self.jumpsLeft -1
  25. self.jumpSound:Play()
  26. end
  27. end
  28. function Player:Shoot(shot)
  29. 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)
  30. self.shootSound:Play()
  31. return self.shootAngle
  32. end
  33. function Player:Update(elapsed)
  34. self.topSinValue = self.topSinValue + elapsed * 20.0
  35. self.top:setPositionY(0.06090 + sin(self.topSinValue) * 0.025)
  36. self.moveDir = 0.0
  37. if Services.Input:getKeyState(KEY_LEFT) then
  38. self.moveDir = -1.0
  39. self.playerBody:setScaleX(-1.0)
  40. elseif Services.Input:getKeyState(KEY_RIGHT) then
  41. self.moveDir = 1.0
  42. self.playerBody:setScaleX(1.0)
  43. end
  44. if Services.Input:getKeyState(KEY_UP) then
  45. self.top:setRoll(45)
  46. if self.playerBody:getScale().x > 0.0 then
  47. self.shootAngle = 45
  48. else
  49. self.shootAngle = 135
  50. end
  51. elseif Services.Input:getKeyState(KEY_DOWN) then
  52. self.top:setRoll(-45)
  53. if self.playerBody:getScale().x > 0.0 then
  54. self.shootAngle = -45
  55. else
  56. self.shootAngle = -135
  57. end
  58. else
  59. self.top:setRoll(0)
  60. if self.playerBody:getScale().x > 0.0 then
  61. self.shootAngle = 0
  62. else
  63. self.shootAngle = 180
  64. end
  65. end
  66. if self.scene:isEntityColliding(self.groundSensor) then
  67. self.touchingGround = true
  68. self.jumpsLeft = 1
  69. else
  70. self.touchingGround = false
  71. self.legs:setSpriteStateByName("jumping", 0, false)
  72. end
  73. if self.touchingGround == true then
  74. if self.moveDir == 0.0 then
  75. self.legs:setSpriteStateByName("idle", 0, false)
  76. else
  77. self.legs:setSpriteStateByName("running", 0, false)
  78. end
  79. end
  80. self.physicsBody:setVelocityX(self.moveDir * 5.0)
  81. end
  82. function Player:fixedUpdate(elapsed)
  83. if self.playerBody:getPosition().y < -8.0 then
  84. self.physicsBody:setTransform(Vector2(self.playerBody:getPosition().x, 8.0), 0.0)
  85. end
  86. if self.playerBody:getPosition().x < -12.0 then
  87. self.physicsBody:setTransform(Vector2(12, self.playerBody:getPosition().y), 0.0)
  88. end
  89. if self.playerBody:getPosition().x > 12.0 then
  90. self.physicsBody:setTransform(Vector2(-12, self.playerBody:getPosition().y), 0.0)
  91. end
  92. end