User Tools

Site Tools


Sidebar



Minetest Forum
Content Database
Git Repository
Bug Tracker
Website

dev:core:track

This is an old revision of the document!


Tracks

New Track definition format since 2023-05-26 route_prog_rework

Basics

minetest.register_node(nodename, {
... usual node definition ...
groups = {
	advtrains_track = 1,
	advtrains_track_<tracktype>=1
	^- these groups tell that the node is a track
	not_blocking_trains=1,
	^- this group tells that the node should not block trains although it's walkable.
},

at_rail_y = 0,
^- Height of this rail node (the y position of a wagon that stands centered on this rail)
at_conns = {
	  [1] = { c=0..15, y=0..1 },
	  [2] = { c=0..15, y=0..1 },
	( [3] = { c=0..15, y=0..1 }, )
	( [4] = { c=0..15, y=0..1 }, )
}
^- Connections of this rail. There can be up to 4 connections.
   2 connections are a normal rail, 3 connections a turnout (1->2 and 2/3->1) and 4 connections a crossing (1<>2 and 3<>4)
   c is the direction of the connection (0-16) and y is the height of the connection (rail will only connect when this matches)

can_dig=function(pos)
	return not advtrains.get_train_at_pos(pos)
end,
after_dig_node=function(pos)
	advtrains.ndb.update(pos)
end,
after_place_node=function(pos)
	advtrains.ndb.update(pos)
end,
^- the code in these 3 default minetest API functions is required for advtrains to work, however you can add your own code

advtrains = {
	on_train_enter=function(pos, train_id, train, index) end
	^- called when a train enters the rail
	on_train_leave=function(pos, train_id, train, index) end
	^- called when a train leaves the rail
	
	-- The following function is only in effect when interlocking is enabled:
	on_train_approach = function(pos, train_id, train, index, has_entered, lzbdata)
	^- called when a train is approaching this position, called exactly once for every path recalculation (which can happen at any time)
	^- This is called so that if the train would start braking now, it would come to halt about(wide approx) 5 nodes before the rail.
	^- has_entered: when true, the train is already standing on this node with its front tip, and the enter callback has already been called.
	   Possibly, some actions need not to be taken in this case. Only set if it's the very first node the train is standing on.
	^- lzbdata should be ignored and nothing should be assigned to it
}
})
dev/core/track.1685121976.txt.gz · Last modified: 2023-05-26 19:26 by orwell