sail.lua 936 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. local sail_attach = {x = -10, y = 5, z = 10}
  2. local function put_sail(self)
  3. local pos = self.object:get_pos()
  4. self.sail = minetest.add_entity(pos, "sailing_canoe:sail")
  5. if self.sail
  6. then
  7. self.sail:set_attach(
  8. self.object,
  9. "",
  10. sail_attach,
  11. {x = 0, y = self.sail_yaw, z = 0})
  12. end
  13. end
  14. local function toggle_sail(self)
  15. if self.control_cooldown > 0
  16. then
  17. return
  18. end
  19. self.control_cooldown = 0.25
  20. if self.sail
  21. then
  22. self.sail:remove()
  23. self.sail = nil
  24. else
  25. put_sail(self)
  26. end
  27. end
  28. local function turn_sail(self, left, right)
  29. if left == right or not self.sail
  30. then
  31. return
  32. end
  33. local turn_speed = 2
  34. if left
  35. then
  36. turn_speed = -turn_speed
  37. end
  38. local new_yaw = self.sail_yaw + turn_speed
  39. if new_yaw > 90 or new_yaw < -90
  40. then
  41. return
  42. end
  43. self.sail_yaw = new_yaw
  44. self.sail:set_attach(
  45. self.object,
  46. "",
  47. sail_attach,
  48. {x = 0, y = self.sail_yaw, z = 0})
  49. end
  50. return toggle_sail, turn_sail