Citat:
Två frågor:
1: Call(“*:ActivateNode”, “<Node Name>”, "<RN>")
Gör denna funktion en del av geometrin synlig/osynlig?
2: Jag får inte animationerna att hända alls...och jag förstår inte varför. Tycker detta borde vara ett idiotsäkert skript?!
|
1. Jepp den visar/gömmer geometri t.ex. om du har 1_0128_hlA geometrin i din max fil så kommer Call("*:ActivateNode","hlA",0) göra den osynlig.
2. Vad är det för animationer du har för ljuset i strålkastarna? Normalt brukar dessa bara vara oanimerade objekt i 3dsmax med materialet TrainEmissiveGlow(passar bäst för helljus) och/eller addTex(halvljus) som du gömmer/visar beroende på läget av ljusreglaget.
Utan att ha koll på x2:ans alla strålkastarlägen så gör jag ett skriptexempel(ej komplett och troligtvis med en hel del fel eftersom jag inte har möjlighet att testa med trial/errror metoden) som kanske kan ge några ideer.
Halvljus nedre med objekt 1_128_HLHalvNedre
Helljus nedre med objekt 1_128_HLHelNedre
Halvljus övre med objekt 1_128_HLHalvOvre
Helljus övre med objekt 1_128_HLHelOvre
Slutljus med objekt 1_128_Slutljus
Eftersom slutljuset ska slås på i en helt annan vagn så kommer man att behöva skicka ett meddelande från lok->manövervagn och vice versa när dessa ska vara av/på.
Kod:
--GLOBALS
animationTimer=0
animationONTime=0.9 --hur länge lampan lyser i animationcykeln(kan ej exakta värden)
animationOFFTime=1.1 --hur länge lampan är släckt i animationcykeln
animationON=false
slutljus_msg_id=1000
slutljusON=false
gInit=false
--END GLOBALS
function Initialise ()
Call("BeginUpdate")
end
--Vissa saker går ej att göra i bas Initialse funktionen då tex child-objekt i blueprinten ofta inte är registrerade vid den tidpunkten när skriptet körs.
--Denna funktion körs första gången skriptet kör Update() och då kan man vara säker på att alla objekt/kontroller kan sättas som man vill
function safeInitialise()
LightsOFF()
end
function LightsOFF()
Call("*:ActivateNode","HLHalvNedre",0)
Call("*:ActivateNode","HLHelNedre",0)
Call("*:ActivateNode","HLHalvOvre",0)
Call("*:ActivateNode","HLHelOvre",0)
Call("*:ActivateNode","Slutljus",0)
Call("*:SendConsistMessage",slutljus_msg_id,0,1) --skicka meddelande om slutljus av till manövervagnen
end
function LightsON(hlcontrolpos)
LightsOFF() --Resetta alla lampor innan den nya konfigurationen slås på
if hlcontrolpos==1 then
--halvljus ovre/undre
Call("*:ActivateNode","HLHalvNedre",1)
Call("*:ActivateNode","HLHalvOvre",1)
Call("*:SendConsistMessage",slutljus_msg_id,1,1)
elseif hlcontrolpos==2 then
--halvljus övre, helljus nedre
Call("*:ActivateNode","HLHelNedre",1)
Call("*:ActivateNode","HLHalvOvre",1)
Call("*:SendConsistMessage",slutljus_msg_id,1,1)
elseif hlControlpos==3 then
--helljus övre, helljus nedre
Call("*:ActivateNode","HLHelNedre",1)
Call("*:ActivateNode","HLHelOvre",1)
Call("*:SendConsistMessage",slutljus_msg_id,1,1)
--elseif.....för eventuella andra lägen
end
end
function SlutljusAnimate(dtime)
if not slutljusON then
if animationON then
Call("*:ActivateNode","Slutljus",0)
animationON=false
animationTime=0
end
return
end
animationTimer=animationTimer+dtime
if not animationON and animationTimer>animationOFFTime then
Call("*:ActivateNode","Slutljus",1)
animationON=true
animationTime=0
elseif animationON and animationTime>animationONTime then
Call("*:ActivateNode","Slutljus",0)
animationON=false
animationTime=0
end
end
function OnControlValueChange ( name, index, value)
if Call( "*:ControlExists", name, index ) then
if name=="LiveInjectorWater" then
LightsON(value)
end
end
Call( "*:SetControlValue", name, index, value)
end
function OnConsistMessage(msg,argument,direction)
--Ta emot meddelande om slutljus i loket skickat från manövervagnen
--Denna funktion måste även speglas i skriptet för manövervagnen så att slutljuset i tänds när man styr från loket
if msg==slutljus_msg_id then
if argument==0 then
--slutljus av
slutljusON=false
else
--slutljus på
slutljusON=true
end
end
Call("SendConsistMessage",msg,argument,direction ) --Skicka alla meddelanden vidare
end
function Update(dTime)
if gInit==false then
gInit=true
safeInitialise()
end
SlutljusAnimate(dTime)
end
För manövervagnen så krävs väl något liknande skript som ovan med vissa ändringar för att få det hela att fungera med slutljusen.
För att meddelanden ska kunna skickas genom tåget så måste även alla vagnar ett skript. Så i varje vagn behövs minst...
Kod:
function OnConsistMessage(msg,argument,direction)
Call("SendConsistMessage",msg,argument,direction ) --Skicka alla meddelanden vidare
end
Som sagt, ta detta skript med två nävar salt och använd endast som någon slags inspiration när du gör ditt eget.
P.S. X2:an ser helt grymt ut! Fantastiskt snyggt jobbat! D.S.