tsr_rail.lua 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. -- tsr_rail.lua
  2. -- Point speed restriction rails
  3. -- Simple rail whose only purpose is to place a TSR on the position, as a temporary solution until the timetable system covers everything.
  4. -- This code resembles the code in lines/stoprail.lua
  5. local function updateform(pos)
  6. local meta = minetest.get_meta(pos)
  7. local pe = advtrains.encode_pos(pos)
  8. local npr = advtrains.interlocking.npr_rails[pe] or 2
  9. meta:set_string("infotext", "Point speed restriction: "..npr)
  10. meta:set_string("formspec", "field[npr;Set point speed restriction:;"..npr.."]")
  11. end
  12. local adefunc = function(def, preset, suffix, rotation)
  13. return {
  14. after_place_node=function(pos)
  15. updateform(pos)
  16. end,
  17. after_dig_node=function(pos)
  18. local pe = advtrains.encode_pos(pos)
  19. advtrains.interlocking.npr_rails[pe] = nil
  20. end,
  21. on_receive_fields = function(pos, formname, fields, player)
  22. local pname = player:get_player_name()
  23. if not minetest.check_player_privs(pname, {interlocking=true}) then
  24. minetest.chat_send_player(pname, "Interlocking privilege required!")
  25. return
  26. end
  27. if minetest.is_protected(pos, pname) then
  28. minetest.chat_send_player(pname, "This rail is protected!")
  29. minetest.record_protection_violation(pos, pname)
  30. return
  31. end
  32. if fields.npr then
  33. local pe = advtrains.encode_pos(pos)
  34. advtrains.interlocking.npr_rails[pe] = tonumber(fields.npr)
  35. updateform(pos)
  36. end
  37. end,
  38. advtrains = {
  39. on_train_approach = function(pos,train_id, train, index)
  40. if train.path_cn[index] == 1 then
  41. local pe = advtrains.encode_pos(pos)
  42. local npr = advtrains.interlocking.npr_rails[pe] or 2
  43. advtrains.lzb_add_checkpoint(train, index, npr, nil)
  44. end
  45. end,
  46. },
  47. }
  48. end
  49. if minetest.get_modpath("advtrains_train_track") ~= nil then
  50. advtrains.register_tracks("default", {
  51. nodename_prefix="advtrains_interlocking:dtrack_npr",
  52. texture_prefix="advtrains_dtrack_npr",
  53. models_prefix="advtrains_dtrack",
  54. models_suffix=".b3d",
  55. shared_texture="advtrains_dtrack_shared_npr.png",
  56. description="Point Speed Restriction Rail",
  57. formats={},
  58. get_additional_definiton = adefunc,
  59. }, advtrains.trackpresets.t_30deg_straightonly)
  60. end