Hallo Maik Goltz
also ich würde sagen ich konnte das erfolgreich so umsetzen, hatte aber ein Problem mit der Abarbeitung der weiteren Anweisungen im Script als ich meinen bisherigenCode für die Sander durch Deinen Code ersetzt habe. Alles was danach folgte, wurde scheinbar nicht mehr angefasst.
Ich dachte natürlich an ein "END" zu viel oder so, der Editor Markup zeigte aber nichts derartiges, manuell überprüft fiel mir da auch nichts auf.
Ich habe dann den Code an das Ende des Scripts verfrachtet, wo es nun funktioniert. Sieht nun so aus, das letzte End schliesst die Update function:
OnControlValueChange function:
if (name == "SanderForward") then
if (value == 1 and SanderStateF == 0) then
SanderStateF = 1;
Call( "Sander_1L:SetEmitterActive", 1 );
Call( "Sander_2L:SetEmitterActive", 1 );
Call( "Sander_3L:SetEmitterActive", 1 );
Call( "Sander_1R:SetEmitterActive", 1 );
Call( "Sander_2R:SetEmitterActive", 1 );
Call( "Sander_3R:SetEmitterActive", 1 );
Call( "SendConsistMessage", Fsanders1, gFSanderOn, 1 )
Call( "SendConsistMessage", Fsanders1, gFSanderOn, 0 )
elseif (value == 0 and SanderStateF == 1) then
SanderStateF = 0;
Call( "Sander_1L:SetEmitterActive", 0 );
Call( "Sander_2L:SetEmitterActive", 0 );
Call( "Sander_3L:SetEmitterActive", 0 );
Call( "Sander_1R:SetEmitterActive", 0 );
Call( "Sander_2R:SetEmitterActive", 0 );
Call( "Sander_3R:SetEmitterActive", 0 );
Call( "SendConsistMessage", Fsanders2, gFSanderOn, 1 )
Call( "SendConsistMessage", Fsanders2, gFSanderOn, 0 )
end
end
if (name == "SanderReverse") then
if (value == 1 and SanderStateR == 0) then
SanderStateR = 1;
Call( "Sander_4L:SetEmitterActive", 1 );
Call( "Sander_4R:SetEmitterActive", 1 );
Call( "SendConsistMessage", Rsanders1, gRSanderOn, 1 )
Call( "SendConsistMessage", Rsanders1, gRSanderOn, 0 )
elseif (value == 0 and SanderStateR == 1) then
SanderStateR = 0;
Call( "Sander_4L:SetEmitterActive", 0 );
Call( "Sander_4R:SetEmitterActive", 0 );
Call( "SendConsistMessage", Rsanders2, gRSanderOn, 1 )
Call( "SendConsistMessage", Rsanders2, gRSanderOn, 0 )
end
end
Update function:
---Sander Forward & Rear
SandervalueF = Call("GetControlValue","SanderForward",0);
if (SanderValueF ~= SanderLastValueF) then
OnControlValueChange("SanderForward",0,SanderValueF);
SanderLastValueF = SanderValueF;
end
SandervalueR = Call("GetControlValue","SanderReverse",0);
if (SanderValueR ~= SanderLastValueR) then
OnControlValueChange("SanderReverse",0,SanderValueR);
SanderLastValueR = SanderValueR;
end
end
Alles anzeigen
So weit so gut - habe da noch eine Frage zu "internen" Funktionen oder ControlValues. Es gibt ja diverse Dampflok mit snychronisiertem Emitter für die Zylinderhähne. Ich frage mich die ganze Zeit wie das wohl erstellt ist? Für die Synchroniserung des Sound kann man vermutlich einen Standard Exhaust Proxy nehmen, aber für die Emitter? Muss man da selbst komplizierte Berechnungen mit Radumfang und zurückgelegte Wegstrecke anstellen (was ja wohl auch nicht tatsächlich auf Position des Kolbens Rücksicht nimmt), oder gibt es "core interne" Werte die man anzapfen kann? Z.B. für Position des Kolbens?
Danke und Gruss
Thorsten