[Solved] Linienfarbe / ColorChooserButton

Willkommen in der Transport Fever Community

Wir begrüßen euch in der Fan-Community zu den Spielen Transport Fever und Train Fever, den Wirtschaftssimulatoren von Urban Games. Die Community steht euch kostenlos zur Verfügung damit ihr euch über das Spiel austauschen und informieren könnt. Wir pflegen hier einen freundlichen und sachlichen Umgang untereinander und unser Team steht euch in allen Fragen gerne beiseite.

 

Die Registrierung und Nutzung ist selbstverständlich kostenlos.

 

Wir wünschen euch viel Spaß und hoffen auf rege Beteiligung.

Das Team der Transport-Fever Community


  • Hallo zusammen,


    ich bastel gerade an einer Übersicht in der ich die Linien und verschiedene Infos zur Linie, den Haltestellen, sowie den Zielen der Fahrgäste (mit der Linie und Anschlusslinien bis zum Ziel) darstellen möchte. Da es doch einfacher ist die Linie anhand der Farbe & Name zu identifizieren als nur über den Namen, möchte ich wie in der Standardansicht auch, einen kleinen Kreis mit der Liniefarbe verwenden. Anhand der vorhandenen Texturen und sonstigen Vorgehensweise wie bei Buttons wäre mein Ansatz jetzt gewesen:

    1. ColorChooserButton als Component der Tabelle hinzufügen, Liniefarbe zuweisenund auf Inaktiv setzen (soll ja nur die Farbe anzeigen). Name bzw StyleClass zuweisen

    2. Im zugehörigen StyleSheet die Klasse / Namen definieren und backgroundImage1/2 setzen (z.b. ui/design/buttons/[email protected])


    Soweit so gut. Klappt nicht. Es wird einfach der komplette Component ausgefüllt. Hab es mit einem Abosultem Layout versucht und einfach nen Bild mit transparenter Mitte drüber gelegt. Klappt aber auch nur bedingt.


    Hat jemand vielleicht eine Idee wie man die Farbe darstellen kann bzw wie UG das macht?

    Fest im StyleSheet verankert wie es z.B. der Timetable mod macht, möchte ich das ungern.

    Wenn man die "ui/design/buttons/[email protected]" im eigenen Mod anpasst werden alle Linien "Kreise" überschrieben und sind entsprechend verfärbt. Sprich UG macht das mit dem Bild. Wäre schön wenn gewisse Dinge irgendwo dokumentiert wäre bzw die API Referenz auch korrekt wäre.

  • Das Vorgehen klingt schon sinnvoll.

    Also, das Problem ist noch, dass das farbige Element quadratisch ist und nicht rund? (Screenshot?)

    Das triffts so ziemlich. Kann es mittels Stylesheet größer / kleiner machen und hin und herschieben, aber nichts an der Tatsache ändern, dass es nicht rund ist. Icon / Bilder, die ich mittels ImageView einfüge, lassen sich meines wissens ja nicht im StyleSheet einfärben, oder?

  • TransportTycoonJoker mit welchen Paramtetern rufst du ColorChooserButton.new auf? Ich wollte mir das für den Fahrplan mod auch mal anschauen. Bekomme es aber nicht hin einen zu erstellen :(

    Die Referenz ist hier zu echt mies. Empfehle hier via Debug Mode + Console zu gehen, dort sind in der Regel die richtigen Parameter aufgeführt


    Code
    local lineColor = api.engine.getComponent(objectID,64).color 
    local lElement = api.gui.comp.ColorChooserButton.new({lineColor},lineColor,-1,false,false)

    Parameter 1: Gibt die Farben die zur Auswahl stehen an (als Array von Vector3f (x,y,z))

    Parameter 2: Gibt die ausgewähle Farbe an

    Parameter 3: die Breite (WidthOrMinusOne)

    Parameter 4: Reset Button (boolean)

    Parameter 5: Inner ResetButton

    via :setEnabled(false) kannst du es als reine Anzeige definieren


    An sich ganz nett, aber wie man das sinnvoll mit anderen Elementen verwenden kann um z.B. den kleinen Linienkreis zu erhalten habe ich noch nicht rausgefunden.

  • Bei den Kreisen handelt es sich nicht um ColorChooserButtons, letztere sind die rechteckigen Balken die du in der Linienbearbeitung rechts bzw im Liniendetaildialog oben siehst:


    Für die kreisrunden Indikatoren wird eine normale Componente mit dem name "LineColorComp" genutzt. Die kreisrunde Formatierung wird via stylesheet erledigt:

    Code
        a("LineColorComp", {
            size = { 14, 14 },
            margin = { 0, 0, 0, hp },
            backgroundImage1 = { fileName = "ui/design/buttons/line_surface.tga" },
        })

    Zusätzlich wird noch die backgroundColor1 gesetzt. Weitere Informationen zum Styling mit backgroundImage1 und backgroundColor1 findest du hier:

    https://www.transportfever2.co…:userinterface#background

  • Bei den Kreisen handelt es sich nicht um ColorChooserButtons, letztere sind die rechteckigen Balken die du in der Linienbearbeitung rechts bzw im Liniendetaildialog oben siehst:


    Für die kreisrunden Indikatoren wird eine normale Componente mit dem name "LineColorComp" genutzt. Die kreisrunde Formatierung wird via stylesheet erledigt:

    Code
        a("LineColorComp", {
            size = { 14, 14 },
            margin = { 0, 0, 0, hp },
            backgroundImage1 = { fileName = "ui/design/buttons/line_surface.tga" },
        })

    Zusätzlich wird noch die backgroundColor1 gesetzt. Weitere Informationen zum Styling mit backgroundImage1 und backgroundColor1 findest du hier:

    https://www.transportfever2.co…:userinterface#background

    Danke für die Erläuterung! Dass das irgendwie so im Spiel umgesetzt wird hab ich mir noch, gedacht (via Debugger kommt man ja an den Namen) und den Zitierten Eintrag habe ich im entsprechenden StyleSheet auch schon entdeckt. Jedoch ist für mich noch nicht ganz klar wie(& ob) man als Modder die gleiche Funktionalität nachbauen kann. Wie erhält der Kreis beim Linienmanager die Info über die aktuelle Farbe, wenn z.B. Per mod 81 weitere Farben hinzugefügt wurden?

  • Das ist aktuell im nicht-Lua-Teil in zwei Schritten gemacht:

    1. Bezug des Farbwertes analog zu local lineColor = api.engine.getComponent(objectID,64).color 
    2. Zuweisen dieses Farbwertes zur backgroundColor1 der Component.

    Zweiteres ist wie oben bereits gesagt aktuell nicht via lua machbar. Es geht entsprechend aktuell nur über den Umweg via styleSheetClasses, d.h. man müsste in einem Stylesheet Farbklassen für diese 81 Farben anlegen und dann die passende zuweisen.

  • Das ist aktuell im nicht-Lua-Teil in zwei Schritten gemacht:

    1. Bezug des Farbwertes analog zu local lineColor = api.engine.getComponent(objectID,64).color 
    2. Zuweisen dieses Farbwertes zur backgroundColor1 der Component.

    Zweiteres ist wie oben bereits gesagt aktuell nicht via lua machbar. Es geht entsprechend aktuell nur über den Umweg via styleSheetClasses, d.h. man müsste in einem Stylesheet Farbklassen für diese 81 Farben anlegen und dann die passende zuweisen.

    Ok, danke für die Bestätigung und vorallem für die schnelle Rückmeldung. Dann kann ich meine Suche nach einer Möglichkeit einstellen und die beiden Hauptmods mit den Farben in ein StyleSheet aufnehmen.

  • TransportTycoonJoker

    Hat den Titel des Themas von „Linienfarbe / ColorChooserButton“ zu „[Solved] Linienfarbe / ColorChooserButton“ geändert.
  • Da die styleSheets ebenfalls lua-scripte sind, könnte es sein, dass du das entsprechende Stylesheet sogar "prozedural" aus den definierten Farben generieren könntest.


    Allerdings habe ich noch nicht getestet ob das von der Ladereihenfolge her funktioniert (game config vor stylesheets)

  • Da die styleSheets ebenfalls lua-scripte sind, könnte es sein, dass du das entsprechende Stylesheet sogar "prozedural" aus den definierten Farben generieren könntest.


    Allerdings habe ich noch nicht getestet ob das von der Ladereihenfolge her funktioniert (game config vor stylesheets)

    Das wäre natürlich eine Idee. Werde ich evtl mal probieren. Hab die 81 Farben von LINX jetzt in 5 min in Excel in ein Copy Paste fähiges Format gebracht. Hardcoded wäre doch unterm Strich schneller gewesen ...

BlueBrixx