Efter mycket misslyckande försök så valde ajg att skapa en ny Signal state, STATE_SLOWER.
Vid DefaultSetLights() (rad 96-126) så lade jag till raderna för signalbilden STATE_SLOWER:
HTML-kod:
-- Swedish home signals SetLights
-- Switch the appropriate lights on and off based on our new state
function DefaultSetLights()
-- DebugPrint("DefaultSetLights()")
if (gSignalState == STATE_GO) then
SwitchLight( LIGHT_NODE_GREEN, 1 )
SwitchLight( LIGHT_NODE_RED, 0 )
SwitchLight( LIGHT_NODE_GREEN2, 0 )
SwitchLight( LIGHT_NODE_WHITE, 0 )
SwitchLight( LIGHT_NODE_GREEN3, 0 )
elseif (gSignalState == STATE_SLOW) then
SwitchLight( LIGHT_NODE_GREEN, 1 )
SwitchLight( LIGHT_NODE_RED, 0 )
SwitchLight( LIGHT_NODE_GREEN2, 1 )
SwitchLight( LIGHT_NODE_WHITE, 0 )
SwitchLight( LIGHT_NODE_GREEN3, 0 )
elseif (gSignalState == STATE_SLOWER) then
SwitchLight( LIGHT_NODE_GREEN, 1 )
SwitchLight( LIGHT_NODE_RED, 0 )
SwitchLight( LIGHT_NODE_GREEN2, 1 )
SwitchLight( LIGHT_NODE_WHITE, 0 )
SwitchLight( LIGHT_NODE_GREEN3, 1 )
else -- stop or blocked
SwitchLight( LIGHT_NODE_GREEN, 0 )
SwitchLight( LIGHT_NODE_RED, 1 )
SwitchLight( LIGHT_NODE_GREEN2, 0 )
SwitchLight( LIGHT_NODE_WHITE, 0 )
SwitchLight( LIGHT_NODE_GREEN3, 0 )
end
end
Vid globals states (rad 137) ska följande rad läggs till efter STATE_BLOCKED:
HTML-kod:
STATE_SLOWER = 4
vid SetSignalState() (rad 411) så har jag gjort så här istället:
HTML-kod:
elseif Call("GetLinkFeatherChar", gConnectedLink) == 51 then
if Call ( "GetLinkApproachControl", gConnectedLink ) ~= 0 then
-- Check if next signal is at red, show a slow signal if that is the case.
if (gExpectState == STATE_GO) or (gExpectState == STATE_SLOW) then
newSignalState = STATE_GO
else
newSignalState = STATE_SLOWER
end
elseif Call ( "GetLinkLimitedToYellow", gConnectedLink ) ~= 0 then
-- diverging route, signal slow
newSignalState = STATE_SLOWER
end
elseif Call ( "GetLinkApproachControl", gConnectedLink ) ~= 0 then
-- Check if next signal is at red, show a slow signal if that is the case.
if (gExpectState == STATE_GO) or (gExpectState == STATE_SLOW) then
newSignalState = STATE_GO
else
newSignalState = STATE_SLOW
end
elseif Call ( "GetLinkLimitedToYellow", gConnectedLink ) ~= 0 then
-- diverging route, signal slow
newSignalState = STATE_SLOW
end
GetLinkFeatherChar är alltså rutan där du kan skriva in en siffra eller bokstav. Denna gång så valde jag att inte konvertera den, men skriver du siffran 3 (ASCII-kod 51) och sedan har någon av checkboxarna intill bockade så kommer signalen att visa 3 Gröna, STATE_SLOWER. Har du inte siffran 3 ifyllt men någon av boxarna iboxade så kommer 2 gröna, STATE_SLOW att visas i vanlig ordning.
Nedanför denna kodsnutt (rad 454) så lade jag in denna del:
HTML-kod:
if newSignalState ~= gSignalState then
DebugPrint("SetSignalState() - signal state changed from " .. gSignalState .. " to " .. newSignalState .. " - sending message" )
gSignalState = newSignalState
SetLights()
if gSignalState >= STATE_STOP then
Call( "Set2DMapSignalState", STATE_STOP)
else
if gSignalState == STATE_SLOWER then
Call( "Set2DMapSignalState", STATE_SLOW)
else
Call( "Set2DMapSignalState", gSignalState)
end
end
if gSignalState == STATE_BLOCKED and not gBlockSignal then
Call( "SendSignalMessage", SIGNAL_STOP, "BLOCKED", -1, 1, 0 )
else
if gSignalState == STATE_SLOWER then
Call( "SendSignalMessage", SIGNAL_GO + STATE_SLOW, "", -1, 1, 0 )
else
Call( "SendSignalMessage", SIGNAL_GO + gSignalState, "", -1, 1, 0 )
end
end
end
Detta för att bibehålla kompatibiliteten med alla de andra signalerna genom att skicka iväg meddelandet STATE_SLOW, vilket får föregående signal att visa VÄNTA KÖR40. skulle föregående signal få STATE_SLOWER så skulle den inte uppfatta signalbilden och orsaka fel istället.
Dock lyckas jag inte lura kartan. Den visar en röd prick istället för gul. Men det får nog vara så, antar jag.
Filen finns på
Github om någon vill testa.