aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--textures/advtrains_newlocomotive.xcfbin0 -> 7462378 bytes
-rw-r--r--textures/larger rails.xcfbin0 -> 1239132 bytes
2 files changed, 0 insertions, 0 deletions
diff --git a/textures/advtrains_newlocomotive.xcf b/textures/advtrains_newlocomotive.xcf
new file mode 100644
index 0000000..9ad5187
--- /dev/null
+++ b/textures/advtrains_newlocomotive.xcf
Binary files differ
diff --git a/textures/larger rails.xcf b/textures/larger rails.xcf
new file mode 100644
index 0000000..42ae592
--- /dev/null
+++ b/textures/larger rails.xcf
Binary files differ
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
-- Interlocking counterpart of LZB, which has been moved into the core...
-- Registers LZB callback for signal management.

--[[
usage of lzbdata:
{
	travsht = boolean indicating whether the train will be a shunt move at "trav"
	travspd = speed restriction at end of traverser
	travwspd = warning speed res.t
}
]]

local SHUNT_SPEED_MAX = advtrains.SHUNT_SPEED_MAX

local il = advtrains.interlocking

local function get_over_function(speed, shunt)
	return function(pos, id, train, index, speed, lzbdata)
		if speed == 0 and minetest.settings:get_bool("at_il_force_lzb_halt") then
			atwarn(id,"overrun LZB 0 restriction (red signal) ",pos)
			-- Set train 1 index backward. Hope this does not lead to bugs...
			train.index = index - 0.5
			train.velocity = 0
			train.ctrl.lzb = 0
			minetest.after(0, advtrains.invalidate_path, id)
		else
			train.speed_restriction = speed
			train.is_shunt = shunt
		end
	end
end

advtrains.tnc_register_on_approach(function(pos, id, train, index, lzbdata)

	--atdebug(id,"IL ApprC",pos,index,lzbdata)
	--train.debug = advtrains.print_concat_table({train.is_shunt,"|",index,"|",lzbdata})

	local pts = advtrains.roundfloorpts(pos)
	local cn  = train.path_cn[index]
	local travsht = lzbdata.travsht
	
	if travsht==nil then
		travsht = train.is_shunt
	end
	
	local travspd = lzbdata.travspd
	local travwspd = lzbdata.travwspd
	
	-- check for signal
	local asp, spos = il.db.get_ip_signal_asp(pts, cn)
	
	-- do ARS if needed
	if spos then
		--atdebug(id,"IL Spos (ARS)",spos,asp)
		local sigd = il.db.get_sigd_for_signal(spos)
		if sigd then
			il.ars_check(sigd, train)
		end
	end
	--atdebug("trav: ",pos, cn, asp, spos, "travsht=", lzb.travsht)
	local lspd
	if asp then
		--atdebug(id,"IL Signal",spos,asp)
		local nspd = 0
		--interpreting aspect and determining speed to proceed
		if travsht then
			--shunt move
			if asp.shunt.free then
				nspd = SHUNT_SPEED_MAX
			elseif asp.shunt.proceed_as_main and asp.main.free then
				nspd = asp.main.speed
				travsht = false
			end
		else
			--train move
			if asp.main.free then
				nspd = asp.main.speed
			elseif asp.shunt.free then
				nspd = SHUNT_SPEED_MAX
				travsht = true
			end
		end
		-- nspd can now be: 1. !=0: new speed restriction, 2. =0: stop here or 3. nil: keep travspd
		if nspd then
			if nspd == -1 then
				travspd = nil
			else
				travspd = nspd
			end
		end
		
		local nwspd = asp.info.w_speed
		if nwspd then
			if nwspd == -1 then
				travwspd = nil
			else
				travwspd = nwspd
			end
		end
		--atdebug("ns,wns,ts,wts", nspd, nwspd, travspd, travwspd)
		lspd = travspd
		if travwspd and (not lspd or lspd>travwspd) then
			lspd = travwspd
		end
		
		local udata = {signal_pos = spos}
		local callback = get_over_function(lspd, travsht)
		advtrains.lzb_add_checkpoint(train, index, lspd, callback, udata)
	end
	lzbdata.travsht = travsht
	lzbdata.travspd = travspd
	lzbdata.travwspd = travwspd
end)