Ämne: X2000 Projekt
Visa ett inlägg
Gammal 2014-06-29, 13:00   #536
Mawkish
Medlem
 
Reg.datum: Jul 2010
Ort: Uppsala
Inlägg: 562
Standard

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.
__________________
Försöker bygga Älvsjö godsbangård men svär mest över UVW mappning.

Senast redigerad av Mawkish den 2014-06-29 klockan 13:01.
Mawkish besöker inte forumet just nu   Svara med citat