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 > Trainz - Allmänt om Trainz

Svara
 
Ämnesverktyg Visningsalternativ
Gammal 2018-12-10, 23:27   #1
RobertE
Medlem
 
Reg.datum: Sep 2009
Ort: Stockholm, Norrort
Inlägg: 264
Standard Texture-replacement funkar inte.

Hej!

Jag har problem med Texture-replacement. Jag har skrivit rätt config och gjort en texturegroup.

Men den finns inte på vagnen. När man klickar på vagnen och ska bytta texture, så saknas den rutan "Texture-replacement"

Jag vet inte vad som är fel.


Kod:
mesh-table
{
  default
  {
    mesh                                "c22_x2000_ub2x_body/c22_x2000_ub2x_body.im"
    auto-create                         1
    
    effects
    {
      textures
      {
        kind                            "texture-replacement"
        texture                         "main_steering.texture"
      }
    }
  }
}
__________________
Mvh RobertE.
RobertE besöker inte forumet just nu  
Svara med citat
Gammal 2018-12-11, 03:05   #2
blomsson
Medlem
 
Reg.datum: Jul 2011
Ort: Vingåker
Inlägg: 343
Standard

Hej Robert!

Ett enkelt svar är att det inte räcker att endast definiera texture-replacement i configen, utan det krävs en del scriptande också, men det kanske du redan vet?

Om du inte vet det så visar jag ett par exempel nedan.

Koden nedan är en del av configen för en vägkur som har två stycken manöverlådor. De använder samma modell men med olika texturer.
Kod:
    effects
    {
      fk
      {
        kind                            "texture-replacement"
        texture                         "varning.texture"
      }
    }
Bilden nedan visar hur mappen med filerna ser ut.

Screen vsk.jpg
Här kan man se "fk.tga" och "fk.texture.txt". Texture filen är den som ska användas vid byte av texturer, ett vanligt misstag som görs är att man använder bildfilen istället för texture filen.
Om man bara behöver, som i det här fallet, byta ut en textur som inte finns i en texture-group, används denna funktion: SetFXTextureReplacementTexture(string effect, string texture);
Kod:
    public void Init(Asset ass)
    {
        inherited(ass);
        
        SetFXTextureReplacementTexture("fk", "fk.texture");
    }
Här har jag lagt texture bytet direkt i Init() eftersom objektet alltid kommer ha det utseendet om det visas.

Om man däremot behöver skapa valmöjligheter och/eller vill använda sig av textur-grupper så blir det genaste lite mer komplicerat och framförallt en massa mer kodande!
Men jag tänkte ge ett ganska kort(!) exempel med lite config- och kod-utdrag.

I HB T Systemgränstavlor kan man välja på lite olika typer av tavlor, bl.a. dessa tre:
System H.jpgSystem M.jpgSystem S.jpg
För att åstadkomma detta är texturerna inlagda i en textur-grupp som det finns en referens till i configens kuid-tabell. Den referensen används till att hämta textur-gruppens texturer. För att byta ut texturen används en annan version av samma funktion som tidigare: SetFXTextureReplacement(string effect, Asset texture_asset, int texture_index);

Lite utdrag från Systemtavlans configfil:
Kod:
mesh-table
{
  default_effectsmesh
  {
    mesh-asset                          <kuid2:609407:100125:1>
    mesh                                "645x645 romb texture.trainzmesh"
    auto-create                         0
    
    effects
    {
      texture_645r
      {
        kind                            "texture-replacement"
        texture                         "baseyellow.texture"
      }
    }
  }

// Flera mesher finns i mesh-tabellen
}

kuid-table
{
  hb_signalscriptlibrary                <kuid2:609407:100055:1>
  meshlibrary                           <kuid:609407:100125>
  infotavla645syst                      <kuid:609407:100089>
  infotavla510                          <kuid:609407:100086>
}
Lite kodutdrag från scriptfilen, observera att inte all kod är med, dessutom så ärver tavlorna från HB_Tavlor som finns i Scriptbiblioteket som sköter om det mesta som är generellt.
Kod:
// Först lite defineringar av variabler.
    Asset       mTextureAsset;                                          // Textutgruppens asset
    string[]    mTextureList                = new string[0];            // Systemgränstavlans texturval hämtade från configen
    int         mTextureIndex               = 0;                        // Vald tavla
    string[]    mChoices                    = new string[0];            // Systemtavlans val hämtade från configen
Kod:
// Detta är en del av den kod som hämtar textur-gruppen och skapar dess listor
            
            Soup kuidSoup = ass.GetConfigSoup().GetNamedSoup("kuid-table");
            string[] kuidString = new string[0];
            for (i = 0; i < kuidSoup.CountTags(); i++)
            {
                kuidString[kuidString.size()] = kuidSoup.GetIndexedTagName(i);
            }
            
            // Hämtar systemtavlans texturer
            if (kuidString and TrainUtil.AlreadyThereStr(kuidString, "infotavla645syst"))
                mTextureAsset = ass.FindAsset("infotavla645syst");
            else
                mTextureAsset = null;
            
            if (mTextureAsset )
            {
                Soup speedSoup = mTextureAsset.GetConfigSoup().GetNamedSoup("textures");
                
                for (i = 0; i < speedSoup.CountTags(); i++)
                {
                    mTextureList[mTextureList.size()] = Str.Tokens(speedSoup.GetNamedTag(i),".")[0];
                }
                
                for (i = 0; i < mTextureList.size(); i++)
                {
                    fattarnoll = mStrings.GetString("infotavla645syst_" + i);
                    
                    if (fattarnoll != "")
                        mTextureList[i] = fattarnoll;
                }
            }
Kod:
// För att byta texturen används denna kod som är en del i en egen funktion
som används till att uppdatera tavlans utseende, tilläggstavlor, fästen osv.
            
   if (mTextureAsset)
   {
       SetFXTextureReplacement("texture_645r", mTextureAsset, mTextureIndex);
   }
För att ge användaren möjlighet att byta mellan texturerna krävs ytterligare kod, som i allmänhet ligger i GetDescriptionHTML(void) och som returnerar en text-sträng som genererar data till Propertyrutan. En väldigt liten del av den koden visas nedan:
Kod:
HTMLWindow.MakeLink("live://property/chooseboard", mChoices[mTextureIndex])
HTMLWindow.MakeLink skapar en klickbar länk i propertyrutan, där "chooseboard" är själva länk-definitionen som med hjälp av andra funktioner skapar användarens val.

mChoices[mTextureIndex] talar om vilket val som är gjort, när koden i propertyrutan genereras. mChoices är de facto samma som mTextureList men med tydligare text för användaren.

Hoppas detta kan vara till hjälp, det blir lätt mycket kod när man börjar pilla och ännu mera om man vill "göra det snyggt" också...

mvh
Håkan
__________________
Fd. signalreparatör på Banverket. Sjukpensionär bla pga Aspergers syndrom.
Använder numera T:ANE på en iMac (Retina, 27", -15), 24GB, OSX Sierra 10.12.6 (25/9-17)
Hemsida för nedladdning av mina objekt: https://blomsson4073.se/index.html
blomsson besöker forumet just nu   Svara med citat
Gammal 2018-12-11, 07:33   #3
Bengan
Hjälpsamfotograf & Hedersmedlem
 
Reg.datum: Aug 2001
Ort: Huddinge, Sweden.
Inlägg: 6 363
Standard

Hade också problem med texturegrupp på X2000 Motorvagn/Manövervagn på Vovvens Start och Stopp. Fungerade på dom föregående.

Fick samma problem, med en utav vagnarna till Y6-familjen. Som Vovven fick titta närmare på. Det hade blivit ett fel i scriptet, som han fixade till.

Misstänker att det är samma problem med X2000 Motorvagn/Manövervagn.
__________________
Bengan
Bengan besöker inte forumet just nu   Svara med citat
Gammal 2018-12-12, 02:22   #4
vovven47
Medlem
 
Reg.datum: Jun 2010
Ort: Yxlan, Norrtälje
Inlägg: 1 295
Standard

Jag har missat att inkludera STL:s Texture behandling i mitt script. Gäller både X2000
motor- och manövervagn. Korrigering kommer senare i denna vecka.
vovven47 besöker inte forumet just nu   Svara med citat
Svara


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 12:35.


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