peasant.lua 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. Peasant = extend(Person)
  2. Peasant.rangeRange = {200, 350}
  3. Peasant.reloadRange = {1, 1.5}
  4. ----------------
  5. -- Core
  6. ----------------
  7. function Peasant:activate()
  8. local genders = {'male', 'female', 'knight', 'wizard'}
  9. self.gender = genders[love.math.random(1, #genders)]
  10. if self.gender == 'knight' or self.gender == 'wizard' then
  11. self.index = 1
  12. else
  13. self.index = love.math.random(1, 2)
  14. end
  15. self.image = data.media.graphics.kingdumb[self.gender]['normal' .. self.index]
  16. self.direction = 1
  17. self.state = self.state or self.idle
  18. self.walkTimer = 1
  19. self.reloadTimer = 0
  20. self.range = lume.random(unpack(self.rangeRange))
  21. Person.activate(self)
  22. end
  23. function Peasant:update()
  24. self.walkTimer = timer.rot(self.walkTimer)
  25. Person.update(self)
  26. end
  27. ----------------
  28. -- Helpers
  29. ----------------
  30. function Peasant:inRange()
  31. return self:distanceTo(ctx.pigeon) < self.range
  32. end
  33. ----------------
  34. -- States
  35. ----------------
  36. Peasant.idle = {}
  37. Peasant.idle.walkRate = {.4, .5}
  38. function Peasant.idle:update()
  39. self.image = data.media.graphics.kingdumb[self.gender]['normal' .. self.index]
  40. if self:distanceTo(ctx.pigeon) < 300 then
  41. self:changeState('panic')
  42. end
  43. if self.walkTimer == 0 then
  44. self:hop(0)
  45. self.walkTimer = lume.random(unpack(self.state.walkRate))
  46. end
  47. end
  48. Peasant.panic = {}
  49. Peasant.panic.walkRate = {.3, .4}
  50. function Peasant.panic:update()
  51. self.direction = 1
  52. self.image = data.media.graphics.kingdumb[self.gender]['panic' .. self.index]
  53. if self.walkTimer == 0 then
  54. self:hop(self.direction)
  55. self.walkTimer = lume.random(unpack(self.state.walkRate))
  56. end
  57. end