87 lines
1.9 KiB

  1. Planet = Class {}
  2. function Planet:init(tempX, tempY, tempR, tempM, tempXSpeed, tempYSpeed, tempName, tempC, tempP)
  3. -- Planet Position:
  4. self.x = tempX
  5. self.y = tempY
  6. -- Speed:
  7. self.xSpeed = 0
  8. self.ySpeed = 0
  9. -- Speed Change: (throttle 0 - 1; variable) (speed; constant (max speed change))
  10. self.throttle = 0.5
  11. self.speed = 0.05
  12. -- Planet Radius and Mass:
  13. self.r = tempR
  14. self.m = tempM
  15. -- Planet Data:
  16. self.name = tempName
  17. self.colour = tempC
  18. -- Planet Family:
  19. self.children = {}
  20. if (tempP ~= "star") then
  21. self.xSpeed = tempXSpeed
  22. self.ySpeed = tempYSpeed
  23. self.parent = planet[tempP]
  24. table.insert(planet[tempP].children, self)
  25. end
  26. end
  27. -- FUNCTIONS
  28. function Planet:updatePosition()
  29. self.x = self.x + self.xSpeed
  30. self.y = self.y + self.ySpeed
  31. debug("Updating position of planet " .. self.name .. ": " .. self.x .. " " .. self.y)
  32. end
  33. function Planet:attract(dt) --Planet doing the attracting, divided in two parts:
  34. --Attracting children
  35. for i, child in ipairs(self.children) do
  36. local grav = calc.gPull(self, child)
  37. local dist = calc.distance(self.x, self.y, child.x, child.y)
  38. local pull = 20/dist * grav
  39. child.xSpeed = child.xSpeed - (child.x - self.x)*pull
  40. child.ySpeed = child.ySpeed - (child.y - self.y)*pull
  41. end
  42. --Attracting the player
  43. -- IF IN SPHERE OF INFLUENCE
  44. local grav = calc.gPull(self, player)
  45. local dist = calc.distance(self.x, self.y, player.x, player.y)
  46. local pull = 20/dist * grav
  47. player.xSpeed = player.xSpeed - (player.x - self.x)*pull
  48. player.ySpeed = player.ySpeed - (player.y - self.y)*pull
  49. end
  50. -- MAIN
  51. function Planet:update(dt)
  52. self:attract(dt)
  53. self:updatePosition()
  54. for i, child in ipairs(self.children) do
  55. child:update(dt)
  56. end
  57. end
  58. function Planet:draw()
  59. local col = self.colour
  60. love.graphics.setColor(calc.c(col[1]), calc.c(col[2]), calc.c(col[3]))
  61. love.graphics.circle("fill", self.x, self.y, self.r)
  62. end