Alien.lua 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. class "Alien"
  2. function Alien:Alien(scene, alienBody ,player)
  3. self.scene = scene
  4. self.body = alienBody
  5. self.physicsBody = scene:trackPhysicsChild(alienBody, PhysicsScene2DEntity.ENTITY_CIRCLE, false, 1.0, 40.0, 0.5, false, true)
  6. self.dead = false
  7. self.player = player
  8. self.timeSinceDead = 0.0
  9. self.targetPosition = Vector3(0.0, 0.0, 0.0)
  10. end
  11. function Alien:Think(elapsed)
  12. local direction = Vector3(player.playerBody:getPosition().x - self.targetPosition.x, player.playerBody:getPosition().y - self.targetPosition.y, 0.0)
  13. direction:Normalize()
  14. self.targetPosition.x = self.targetPosition.x + (direction.x * elapsed * 1.5)
  15. self.targetPosition.y = self.targetPosition.y + (direction.y * elapsed * 1.5)
  16. if self.targetPosition.y > self.body:getPosition().y then
  17. self.physicsBody:setVelocityY(5.0)
  18. else
  19. self.physicsBody:setVelocityY(0.1)
  20. end
  21. if self.targetPosition.x > self.body:getPosition().x then
  22. self.physicsBody:setVelocityX(5.0)
  23. else
  24. self.physicsBody:setVelocityX(-5.0)
  25. end
  26. end
  27. function Alien:Respawn()
  28. self.timeSinceDead = 0.0
  29. self.dead = false
  30. local respawnAngle = random(pi * 2.0)
  31. local respawnDistance = 20.0
  32. self.physicsBody:setTransform(Vector2(cos(respawnAngle) * respawnDistance, sin(respawnAngle) * respawnDistance), 0.0)
  33. end
  34. function Alien:Update(elapsed)
  35. if self.dead == false then
  36. self:Think(elapsed)
  37. else
  38. self.timeSinceDead = self.timeSinceDead + elapsed
  39. if self.timeSinceDead > 2.0 then
  40. self:Respawn()
  41. end
  42. end
  43. end