User Tools

Site Tools


Sidebar



Minetest Forum
Content Database
Git Repository
Bug Tracker
Website

usage:atlatc:examples:tis:environment

Environment-Based Train Information System

Introduction

After the Digilines Train Information System system was used, a server admin thought it would be nicer to not have ugly blue wires all over the place, so decided to wirelessly transmit signals instead.

The environment system uses the S table to convey information, which is then formatted locally.

It calculates distance based on Co-ordinates.

Explanations

Here, the code uses two seperate scripts. This makes the code a lot more bother to setup, but at least it is less bother then using Digilines.

Collectors

The LuaATC tracks wait for a train to run over them, and check if the distance of the train is less then the previous train (this prevents later trains being registered earlier)

The track extracts information, such as the LuaController's distance from an arbitrary point in the station,the length of the train, or the line.

Display

The display refreshes every 2 seconds, putting the information with values from the table onto the board. If the information changes, then within 2 seconds the board changes.

The skippingrc is set to the standard on 56i-mtserver, where C stands for “Chronic Skipper”, which is a train stoppage class where trains only stop at select interchanges.

Code

LuaATC tracks

placeTrack = POS(0,0,0) -- Co-ordinates for the track you are working on
placeStation = POS(0,0,0) -- Co-ordinates for a track of your choice in the station
 
distance = math.sqrt((placeTrack.x-placeStation.x)^2+(placeTrack.y-placeStation.y)^2+(placeTrack.z-placeStation.z)^2) -- Comment this out if using a different distance calculation and have a raw number
-- distance = xx -- Uncomment this and fill in your number in place of xx if you have a raw number
 
if event.type == "train" then
    if distance < F.tbl.distance then -- Show information for closer trains before further trains
        F.tbl = {
            distance = distance,
            length = train_length(), 
            line = get_line(), 
            rc = get_rc(), 
        }
    end
end

Displayers

channel = "p1" -- Channel of displays for specific platform. Allows station-wide digline systems.
platform = "" -- Platform number
services = "" -- Services for the platform in line names (maybe "IPR, NX2" for Re platform 1 on 56i-mtserver).
skippingrc = "C" -- Put in the RC which means the train skips
 
interrupt(2) -- Set in environment code.
 
--[[
 
{distance = distance, length = length, line = line, rc = rc, skipping = skipping}
 
Table format for info
 
Platform 3 - EW services
30 m Away, 6 cars
EW line, RC By
Stopping here
 
Information shown
 
]]--
 
if F.tbl.rc == skippingrc then
    stopping = "Skipping Station. Stand back"
else
    stopping = "Stopping Here."
end
 
 
info = "Platform " .. platform .. " - " .. services .. " services" .. "\n" .. F.tbl.distance .. " m away, " .. F.tbl.length .. " cars" .. "\n" .. F.tbl.line .. " line, " .. F.tbl.rc .. "\n" .. stopping
 
digiline_send(channel, info)
usage/atlatc/examples/tis/environment.txt · Last modified: 2022-06-28 10:09 by 56independent