heli_fuel_management.lua 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. --
  2. -- fuel
  3. --
  4. helicopter.fuel = {['oil:oil_bucket'] = 4}
  5. minetest.register_entity('helicopter:pointer',{
  6. initial_properties = {
  7. physical = false,
  8. collide_with_objects=false,
  9. pointable=false,
  10. visual = "mesh",
  11. mesh = "pointer.b3d",
  12. textures = {"clay.png"},
  13. },
  14. on_activate = function(self,std)
  15. self.sdata = minetest.deserialize(std) or {}
  16. if self.sdata.remove then self.object:remove() end
  17. end,
  18. get_staticdata=function(self)
  19. self.sdata.remove=true
  20. return minetest.serialize(self.sdata)
  21. end,
  22. })
  23. function helicopter.get_gauge_angle(value)
  24. local angle = value * 18
  25. angle = angle - 90
  26. angle = angle * -1
  27. return angle
  28. end
  29. function helicopter.contains(table, val)
  30. for k,v in pairs(table) do
  31. if k == val then
  32. return v
  33. end
  34. end
  35. return false
  36. end
  37. function helicopter.loadFuel(self, player_name)
  38. local player = minetest.get_player_by_name(player_name)
  39. local inv = player:get_inventory()
  40. local itmstck=player:get_wielded_item()
  41. local item_name = ""
  42. if itmstck then item_name = itmstck:get_name() end
  43. local stack = nil
  44. local fuel = helicopter.contains(helicopter.fuel, item_name)
  45. if fuel then
  46. stack = ItemStack(item_name .. " 1")
  47. if self.energy < 10 then
  48. local taken = inv:remove_item("main", stack)
  49. self.energy = self.energy + fuel
  50. if self.energy > 10 then self.energy = 10 end
  51. local energy_indicator_angle = helicopter.get_gauge_angle(self.energy)
  52. self.pointer:set_attach(self.object,'',{x=0,y=11.26,z=9.37},{x=0,y=0,z=energy_indicator_angle})
  53. end
  54. return true
  55. end
  56. return false
  57. end