Svenska 3D-Tåg - Forum  
 

Om det här är ditt första besök, se till att gå till vår FAQ (finns även länk till FAQ i navigeringsmenyn ovan). Du kan behöva att registrera dig innan du kan posta (finns även en länk till registrering i navigeringsmenyn ovan). För att titta på inlägg, välj det forum som du vill besöka från de som är listade nedan.

Gå tillbaka   Svenska 3D-Tåg - Forum > N3V Trainz > 3D-design - Trainz

 
 
Ämnesverktyg Visningsalternativ
Gammal 2021-06-08, 20:37   #32
korvtiger
Medlem
 
Reg.datum: Jan 2008
Ort: Uppland, Sverige
Inlägg: 2 728
Standard

Ah, väldigt snyggt! Jag ska se om jag kan knåpa ihop något liknande!

Fixade färdigt med scriptet för att öppna rätt lucka beroende på om det lastas kol eller vatten idag. Här är de relevanta delarna:

Kod:
class #### isclass STLSteamEngine {

    Asset coalAsset;
    Asset waterAsset;

    public void Init() {
        inherited();
        
        .... // Initialize STLSteamEngine things

        coalAsset = me.GetAsset().FindAsset("coal");
        waterAsset = me.GetAsset().FindAsset("water");
    }


    float BeginLoad(LoadingReport report) {
        int i;
        for (i = 0; i < report.srcQueue.GetProductList().size(); i++) {
            if (report.srcQueue.GetProductList()[i] == coalAsset) {
                // Öppna kolboxluckorna
            }
            else if (report.srcQueue.GetProductList()[i] == waterAsset) {
                // Öppna vattentankluckorna
            }
        }
        return 1.0;
    }


    float EndLoad(LoadingReport report) {
        int i;
        for (i = 0; i < report.srcQueue.GetProductList().size(); i++) {
            if (report.srcQueue.GetProductList()[i] == coalAsset) {
                // Stäng kolboxluckorna
            }
            else if (report.srcQueue.GetProductList()[i] == waterAsset) {
                // Stäng vattentankluckorna
            }
        }
        return 1.0;
    }

};
I min version har jag dock gjort så att man kan öppna luckorna manuellt genom menyn som dyker upp om man högerklickar på loket i driver och väljer "View details". Jag har gjort likadant på Lans Sb och B lok som finns på STLs hemsida.

Init är den metod som anropas först när man skapar ett lok av denna typen och den letar först reda på referenser till Assetsen för coal och water och sparar dem i variablerna coalAsset och waterAsset. Sedan är det BeginLoad och EndLoad som anropas före och efter lastningen sker. Dessa är väldigt lika. Jag har en for-loop som går igenom alla produkter som kommer att lastas enligt den LoadingReport som skickas med till dessa metoder. Sedan kollar jag bara att om någon av de produkter som lastas är coalAsset eller waterAsset så får man lägga till kod för att öppna/stänga luckorna. Det gör man antagligen med:

Kod:
SetMeshAnimationState("tank_lid", true);
för att öppna och
Kod:
SetMeshAnimationState("tank_lid", false);
för att stänga, ifall meshen heter tank_lid i mesh tablen. Dessa animerar till sista respektive första framen i animationen för meshen.

Antagligen har du redan ett script till ditt lok, så då är det bara att lägga till de nya delarna från exemplet ovan. Init metoden finns redan, så där räcker det med att kopiera in de två sista raderna med coalAsset = ...osv. BeginLoad och EndLoad är bara att kopiera och klistra in, samt lägga till kod för att faktiskt öppna eller stänga luckor och så vidare.
Om du skulle behöva hjälp att scripta loken sedan så är det bara att säga till så kan jag hjälpa till!
__________________
-k-
korvtiger besöker inte forumet just nu   Svara med citat
 


Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av
Forumhopp



Alla tider är GMT +2. Klockan är nu 02:27.


Powered by vBulletin® Version 3.7.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
© Svenska 3D-Tåg 2001-2009