Visa ett inlägg
Gammal 2022-01-17, 03:09   #69
ADDE
Medlem
 
Reg.datum: Feb 2012
Ort: Södermalm
Inlägg: 1 319
Skicka ett meddelande via MSN till ADDE Skicka ett meddelande via Skype™ till ADDE
Standard

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.
__________________
Mvh SummerADDE

Mina projekt till TS2020:
-Projekt Mälardalen, Öppet projekt. - Google drive projektmapp
-Nordlandsbanen, En norsk dieselrutt.

Ska du bygga i TS? Läs här först!

Senast redigerad av ADDE den 2022-01-17 klockan 03:13.
ADDE besöker inte forumet just nu   Svara med citat