aboutsummaryrefslogtreecommitdiff
path: root/advtrains_interlocking/tsr_rail.lua
blob: f30254069402ac166649e5b4f201ff5aafb780c6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
-- tsr_rail.lua
-- Point speed restriction rails
-- Simple rail whose only purpose is to place a TSR on the position, as a temporary solution until the timetable system covers everything.
-- This code resembles the code in lines/stoprail.lua

local function updateform(pos)
	local meta = minetest.get_meta(pos)
	local pe = advtrains.encode_pos(pos)
	local npr = advtrains.interlocking.npr_rails[pe] or 2
	
	meta:set_string("infotext", "Point speed restriction: "..npr)
	meta:set_string("formspec", "field[npr;Set point speed restriction:;"..npr.."]")
end


local adefunc = function(def, preset, suffix, rotation)
		return {
			after_place_node=function(pos)
				updateform(pos)
			end,
			after_dig_node=function(pos)
				local pe = advtrains.encode_pos(pos)
				advtrains.interlocking.npr_rails[pe] = nil
			end,
			on_receive_fields = function(pos, formname, fields, player)
				local pname = player:get_player_name()
				if not minetest.check_player_privs(pname, {interlocking=true}) then
					minetest.chat_send_player(pname, "Interlocking privilege required!")
					return
				end
				if minetest.is_protected(pos, pname) then
					minetest.chat_send_player(pname, "This rail is protected!")
					minetest.record_protection_violation(pos, pname)
					return
				end
				if fields.npr then
					local pe = advtrains.encode_pos(pos)
					advtrains.interlocking.npr_rails[pe] = tonumber(fields.npr)
					updateform(pos)
				end
			end,
			advtrains = {
				on_train_approach = function(pos,train_id, train, index)
					if train.path_cn[index] == 1 then
						local pe = advtrains.encode_pos(pos)
						local npr = advtrains.interlocking.npr_rails[pe] or 2
						advtrains.lzb_add_checkpoint(train, index, npr, nil)
					end
				end,
			},
		}
end


if minetest.get_modpath("advtrains_train_track") ~= nil then
	advtrains.register_tracks("default", {
		nodename_prefix="advtrains_interlocking:dtrack_npr",
		texture_prefix="advtrains_dtrack_npr",
		models_prefix="advtrains_dtrack",
		models_suffix=".b3d",
		shared_texture="advtrains_dtrack_shared_npr.png",
		description="Point Speed Restriction Rail",
		formats={},
		get_additional_definiton = adefunc,
	}, advtrains.trackpresets.t_30deg_straightonly)
end