Zum Hauptinhalt springen

13. Production Display - Digital

Warnung außerhalb der Saison

Übersicht

Mit Production Display können Produktionsinformationen direkt im 3D-Raum als Text angezeigt werden - perfekt für LED-Panels, LCD-Bildschirme oder 7-Segment-Anzeigen an Produktionsgebäuden.

💡 Beispiel: Ein Mehl-Silo zeigt "WHEAT: 5000 L" und "FLOUR: 2500 L" auf einem LED-Display an der Außenwand.

Key Features:

  • Echtzeit-Anzeige von Produktionsstatus und Füllständen
  • Mehrere Font-Typen (DIGIT, GENERIC, GENERIC_BOLD, etc.)
  • Dynamische Farbwechsel basierend auf Füllstand
  • Conveyor Belt Status Anzeigen
  • Regenwasser-Informationen
  • Visual Slots Monitoring
  • Icon und Fortschrittsbalken Support
  • 25m Render-Distanz für Performance
  • 2-Sekunden Update-Intervall
Screenshot 1
Screenshot 2

Basis-Konfiguration

<placeable>
<productionExtension>
<ProductionDisplay>
<display
rootNode="0>5|0"
font="DIGIT"
size="0.05"
color="1 1 1 1">

<displayLine
inputFillTypeNode="0>5|0|0"
inputLevelNode="0>5|0|1"
outputFillTypeNode="0>5|0|2"
outputLevelNode="0>5|0|3"/>

</display>
</ProductionDisplay>
</productionExtension>
</placeable>
WICHTIG

rootNode muss definiert sein und mindestens ein Text-Node pro displayLine!

Display Konfiguration

Root Display Attribute

AttributTypStandardBeschreibung
rootNodenode-Root Node des Displays (Pflicht)
fontstring"DIGIT"Standard-Font für alle Text-Elemente
sizefloat0.05Standard-Textgröße/Skalierung
colorstring"1 1 1 1"Standard-Textfarbe (R G B A)

Verfügbare Fonts:

  • DIGIT - 7-Segment Style (klassisches Digital-Display)
  • GENERIC - Standard-Font für Text
  • GENERIC_BOLD - Fetter Standard-Font
  • DIGIT_BOLD - Fetter 7-Segment Style
  • LICENSE_PLATE_DE - Deutsche Kennzeichen-Schrift
  • LICENSE_PLATE_UK - UK Kennzeichen-Schrift
  • LICENSE_PLATE_US - US Kennzeichen-Schrift
  • LICENSE_PLATE_FR - Französische Kennzeichen-Schrift
  • LICENSE_PLATE_CZ - Tschechische Kennzeichen-Schrift
  • LICENSE_PLATE_PL - Polnische Kennzeichen-Schrift
  • LICENSE_PLATE_AS - Alternative Kennzeichen-Schrift

DisplayLine Konfiguration

Jede <displayLine> zeigt spezifische Produktionsinformationen. Mehrere DisplayLines können pro Display konfiguriert werden.

Per-Line Overrides

AttributTypStandardBeschreibung
fontstringdisplay fontÜberschreibt Standard-Font für diese Line
textColorstringdisplay colorÜberschreibt Standard-Farbe für diese Line
textScalefloatdisplay sizeÜberschreibt Standard-Größe für diese Line
productionIndexint1Welche Production überwacht werden soll (1-basiert)
cycleInputsboolfalseInputs nacheinander rotierend anzeigen (statt nur erster Input)
cycleOutputsboolfalseOutputs nacheinander rotierend anzeigen (statt nur erster Output)
cycleIntervalint3000Wie lange jeder Eintrag angezeigt wird (in ms)
cyclePauseint500Kurze Pause zwischen zwei Einträgen (in ms)

Einfache Font-Verwendung:

<display rootNode="0>5|0" font="DIGIT" size="0.05" color="1 1 1 1">
<!-- Diese Line verwendet den Display-Font (DIGIT) -->
<displayLine inputLevelNode="0>5|0|0"/>

<!-- Diese Line überschreibt mit eigenem Font -->
<displayLine
outputLevelNode="0>5|0|1"
font="GENERIC_BOLD"/>
</display>

Advanced: Separate Fonts für Text-Typen

Optional - Nur für Experten

Normalerweise reicht der font Parameter völlig aus! Diese erweiterten Font-Optionen sind nur für spezielle Anwendungsfälle gedacht.

Für fortgeschrittene Anwendungen können separate Fonts für verschiedene Text-Typen definiert werden:

AttributTypBeschreibungVerwendet für
countFontstringFont speziell für ZahlenLevel, Percentage, Counts
textFontstringFont speziell für TextFillType-Namen, Labels
statusFontstringFont speziell für StatusStatus-Meldungen

Font Hierarchie:

  1. countFont → Falls nicht gesetzt, wird font verwendet
  2. textFont → Falls nicht gesetzt, wird font verwendet
  3. statusFont → Falls nicht gesetzt, wird textFont, dann font verwendet

Beispiel:

<displayLine
font="GENERIC"
countFont="DIGIT"
inputLevelNode="0>5|0|0"
inputFillTypeNode="0>5|0|1"/>
<!-- inputLevelNode nutzt DIGIT (Zahlen) -->
<!-- inputFillTypeNode nutzt GENERIC (Text) -->
EMPFEHLUNG

Für die meisten Anwendungen: Nutze einfach nur den font Parameter! Die separaten Font-Typen sind nur nützlich, wenn du z.B. DIGIT-Zahlen mit GENERIC-Text kombinieren möchtest.

Display-Typen

1. Produktionsname & Status

Zeigt den Namen und aktuellen Status einer Produktion.

<displayLine
productionNameNode="0>5|0|0"
productionStatusNode="0>5|0|1"
productionIndex="1"/>

Status-Werte:

  • INACTIVE (rot) - Produktion gestoppt
  • RUNNING (grün) - Produktion aktiv
  • MISSING_INPUTS (gelb) - Wartet auf Material
  • NO_OUTPUT_SPACE (gelb) - Ausgabe-Lager voll

Status-Farben:

  • Rot: 1.0 0.0 0.0 1.0
  • Grün: 0.0 1.0 0.0 1.0
  • Gelb: 1.0 1.0 0.0 1.0

2. Input/Output Anzeigen

Zeigt Material-Typen und Füllstände.

<displayLine
inputFillTypeNode="0>5|0|0"
inputLevelNode="0>5|0|1"
inputPercentageNode="0>5|0|2"
outputFillTypeNode="0>5|0|3"
outputLevelNode="0>5|0|4"
outputPercentageNode="0>5|0|5"
productionIndex="1"/>

Node-Typen:

  • inputFillTypeNode - Zeigt Input-Material-Name (z.B. "Weizen")
  • inputLevelNode - Zeigt Input-Menge (z.B. "1500 L")
  • inputPercentageNode - Zeigt Input-Füllstand in % (z.B. "75%")
  • outputFillTypeNode - Zeigt Output-Material-Name
  • outputLevelNode - Zeigt Output-Menge
  • outputPercentageNode - Zeigt Output-Füllstand in %

Format-Beispiele:

  • Level: "1500 L", "2.5 K", "1.2 M" (auto-formatiert)
  • Percentage: "75%", "0%", "100%"

3. Mengen & Verhältnis Anzeige

Zeigt Rezept-Mengen und Umwandlungs-Verhältnis.

<displayLine
inputAmountNode="0>5|0|0"
outputAmountNode="0>5|0|1"
ratioNode="0>5|0|2"
productionIndex="1"/>

Anzeige-Format:

  • inputAmountNode: "1000L" (Rezept Input-Menge)
  • outputAmountNode: "500L" (Rezept Output-Menge)
  • ratioNode: "1000→500 (50%)" (Umwandlungs-Effizienz)

4. Icon Nodes

Zeigt Material-Icons (Textur muss im I3D File gesetzt sein).

<displayLine
inputIconNode="0>5|0|0"
outputIconNode="0>5|0|1"
productionIndex="1"/>

Verhalten:

  • Icons werden automatisch ein/ausgeblendet basierend auf Material-Präsenz
  • Icon-Textur muss im I3D File als Bitmap-Material konfiguriert sein
  • Sichtbarkeit: true wenn Material existiert UND Level > 0

5. Fill Plane Fortschrittsbalken

Animierte Fortschrittsbalken die sich vertikal basierend auf Füllstand bewegen.

<displayLine
inputFillPlaneNode="0>5|0|0"
inputFillPlaneMinY="0.0"
inputFillPlaneMaxY="1.0"
outputFillPlaneNode="0>5|0|1"
outputFillPlaneMinY="0.0"
outputFillPlaneMaxY="1.0"
productionIndex="1"/>
AttributTypStandardBeschreibung
inputFillPlaneNodenode-Plane Node für Input-Fortschrittsbalken
inputFillPlaneMinYfloat0.0Y-Position bei 0% Füllstand
inputFillPlaneMaxYfloat1.0Y-Position bei 100% Füllstand
outputFillPlaneNodenode-Plane Node für Output-Fortschrittsbalken
outputFillPlaneMinYfloat0.0Y-Position bei 0% Füllstand
outputFillPlaneMaxYfloat1.0Y-Position bei 100% Füllstand

Verhalten:

  • Node Y-Translation wird automatisch basierend auf Füllstand angepasst
  • Smooth Interpolation zwischen Min und Max Position
  • Update nur bei Änderung > 0.001 für Performance

6. Custom Text

Zeigt statischen benutzerdefinierten Text.

<displayLine
customTextNode="0>5|0|0"
customText="PRODUKTIONSSTATUS"/>

Perfekt für Labels, Überschriften oder statische Informationen.

7. Conveyor Belt Status

Zeigt Conveyor Belt System Informationen.

<displayLine
conveyorBoxCountNode="0>5|0|0"
conveyorCycleStatusNode="0>5|0|1"
conveyorLaneStatusNode="0>5|0|2"
productionIndex="1"/>

Node-Typen:

  • conveyorBoxCountNode: Zeigt "6|12 Kisten" (aktuell/gesamt Kisten)
  • conveyorCycleStatusNode: Zeigt "Aktiv", "Fertig", oder "Inaktiv"
  • conveyorLaneStatusNode: Zeigt "S1:Frei S2:Blockiert S3:Frei" (Spuren-Status)

Status-Text:

  • Verwendet i18n Keys: conveyor_boxes, conveyor_active, conveyor_cycleComplete, conveyor_idle
  • Spur-Format: conveyor_lane, conveyor_laneFree, conveyor_laneBlocked

8. Regenwasser-Sammlung

Zeigt Regenwasser-System Informationen.

<displayLine
rainwaterLevelNode="0>5|0|0"
rainwaterCapacityNode="0>5|0|1"
rainwaterPercentageNode="0>5|0|2"
rainwaterStatusNode="0>5|0|3"
rainwaterRateNode="0>5|0|4"
rainwaterIconNode="0>5|0|5"/>

Node-Typen:

  • rainwaterLevelNode: Aktueller Wasserstand (z.B. "1500 L")
  • rainwaterCapacityNode: Maximale Kapazität (z.B. "5000 L")
  • rainwaterPercentageNode: Füllstand in % (z.B. "30%")
  • rainwaterStatusNode: "Sammelt" oder "Inaktiv"
  • rainwaterRateNode: Sammelrate (z.B. "250 L/h" oder "---")
  • rainwaterIconNode: Icon-Sichtbarkeit (gezeigt beim Sammeln oder Level > 0)

Status-Text:

  • Verwendet i18n Keys: rainwater_collecting, rainwater_idle, rainwater_noCollection

9. Opening Hours Status

Zeigt den Öffnungsstatus einer Produktion basierend auf konfigurierten Öffnungszeiten.

<displayLine
openingHoursStatusNode="0>5|0|0"
productionIndex="1"/>

Node-Typ:

  • openingHoursStatusNode: Zeigt "GEÖFFNET" (grün) oder "CLOSED" (rot)

Verhalten:

  • Text wird nur angezeigt wenn Opening Hours für die Produktion konfiguriert sind
  • Farbe wechselt automatisch:
    • Grün {0.0, 1.0, 0.0, 1.0} = Geöffnet (innerhalb Öffnungszeiten)
    • Rot {1.0, 0.0, 0.0, 1.0} = Geschlossen (außerhalb Öffnungszeiten)
  • Update erfolgt automatisch bei Stundenänderung

Status-Text:

  • Verwendet i18n Keys: openingHours_open, openingHours_closed

Beispiel mit Opening Hours:

<productionExtension>
<!-- Opening Hours konfigurieren -->
<openingHours>
<production id="Lime Produktion" openHour="21" closeHour="6" autoResume="true"/>
</openingHours>

<!-- Display für Öffnungsstatus -->
<ProductionDisplay>
<display rootNode="0>9|0" font="LICENSE_PLATE_DE" size="0.09" color="1 1 1 1">
<displayLine
customTextNode="0>12|0"
customText="Kalk Produktion"/>

<displayLine
openingHoursStatusNode="0>12|1"
productionIndex="1"/>
</display>
</ProductionDisplay>
</productionExtension>
Tipp

Kombiniere mit customTextNode für eine Überschrift und zeige darunter den Öffnungsstatus!

Siehe auch

Opening Hours - Öffnungszeiten konfigurieren

10. Visual Slots Überwachung

Zeigt Visual Slots Nutzungs-Informationen.

<displayLine
visualSlotsCountNode="0>5|0|0"
visualSlotsPercentageNode="0>5|0|1"
visualSlotsFillTypeNode="0>5|0|2"
visualSlotsFillType="FLOUR"
visualSlotsDisplayFormat="count"/>
AttributTypStandardBeschreibung
visualSlotsCountNodenode-Zeigt benutzt/gesamt Slots
visualSlotsPercentageNodenode-Zeigt Nutzung in %
visualSlotsFillTypeNodenode-Zeigt überwachten Material-Namen
visualSlotsFillTypestring-FillType zum Überwachen (leer lassen für alle)
visualSlotsDisplayFormatstring"count"Anzeige-Format (siehe unten)

Anzeige-Formate:

  1. count (kompakt): "14:144"
  2. dash: "14 Pal. - 144 Pal."
  3. of: "14 Pal. von 144 Pal."

i18n Keys:

  • visualslots_unit_short: "Pal." (kurzer Einheits-Name)
  • visualslots_of: "von" (für "of" Format)
  • visualslots_all: "Alle" (wenn kein spezifischer fillType gesetzt ist)

Beispiele:

<!-- Nur FLOUR Paletten überwachen -->
<displayLine
visualSlotsCountNode="0>5|0|0"
visualSlotsFillType="FLOUR"
visualSlotsDisplayFormat="dash"/>

<!-- Alle Paletten überwachen -->
<displayLine
visualSlotsCountNode="0>5|0|0"
visualSlotsDisplayFormat="of"/>

11. Cycling Input/Output Anzeige

Bei Productions mit mehreren Inputs oder Outputs kann eine einzelne Display-Node alle Einträge nacheinander rotierend anzeigen.

<displayLine
inputFillTypeNode="0>10|1|0"
inputLevelNode="0>10|1|1"
outputFillTypeNode="0>10|2|0"
outputLevelNode="0>10|2|1"
cycleInputs="true"
cycleOutputs="true"
cycleInterval="3000"
cyclePause="250"
productionIndex="1"/>
AttributTypStandardBeschreibung
cycleInputsboolfalseInputs nacheinander anzeigen
cycleOutputsboolfalseOutputs nacheinander anzeigen
cycleIntervalint3000Anzeigedauer pro Eintrag in ms
cyclePauseint500Pause (leer) zwischen Einträgen in ms

Verhalten:

  • Nur aktiv wenn mehr als 1 Input/Output vorhanden — bei genau einem Eintrag wird normal angezeigt
  • Während der Pause werden die Nodes geleert (kurzer Leerstand zwischen den Einträgen)
  • Cycling läuft über g_currentMission.time synchron — alle Displays mit gleichen Werten schalten gleichzeitig
  • Bei Templates: nur die Inputs/Outputs des aktiven Templates werden berücksichtigt

Beispiel mit 4 Inputs (Soja, Sonnenblumen, Wasser, Raps):

<!-- Ein Node-Paar zeigt alle 4 Inputs nacheinander -->
<displayLine
productionIndex="1"
textScale="0.05"
inputFillTypeNode="0>10|1|0"
inputLevelNode="0>10|1|1"
outputFillTypeNode="0>10|2|0"
outputLevelNode="0>10|2|1"
cycleInputs="true"
cycleInterval="3000"
cyclePause="250"/>
Tipp

cycleInputs und cycleOutputs können unabhängig voneinander gesetzt werden. Du kannst z.B. nur Inputs cyclen und den Output fest anzeigen.

Dynamische Farben

Farb-kodierte Anzeigen basierend auf Füllständen mit automatischer Interpolation.

<displayLine
dynamicColors="true"
color0="0.5 0.5 0.5 1.0"
color25="1.0 0.0 0.0 1.0"
color50="1.0 1.0 0.0 1.0"
color75="1.0 1.0 0.0 1.0"
color100="0.0 1.0 0.0 1.0"
inputLevelNode="0>5|0|0"
inputPercentageNode="0>5|0|1"
productionIndex="1"/>
AttributTypStandardBeschreibung
dynamicColorsboolfalseAktiviert dynamische Farb-Interpolation
color0string"0.5 0.5 0.5 1.0"Farbe bei 0% Füllstand (grau)
color25string"1.0 0.0 0.0 1.0"Farbe bei 25% Füllstand (rot)
color50string"1.0 1.0 0.0 1.0"Farbe bei 50% Füllstand (gelb)
color75string"1.0 1.0 0.0 1.0"Farbe bei 75% Füllstand (gelb)
color100string"0.0 1.0 0.0 1.0"Farbe bei 100% Füllstand (grün)

Interpolation:

  • Farben werden smooth zwischen definierten Punkten interpoliert
  • Gilt für: inputLevel, inputPercentage, outputLevel, outputPercentage
  • Update nur wenn Farbe sich tatsächlich ändert für Performance

Farb-Verlauf Beispiel:

  • 0-25%: Grau nach Rot
  • 25-50%: Rot nach Gelb
  • 50-75%: Gelb nach Gelb (bleibt)
  • 75-100%: Gelb nach Grün

Vollständige Beispiele

Beispiel 1: Einfache Input/Output Anzeige

<ProductionDisplay>
<display
rootNode="0>5|0"
font="DIGIT"
size="0.08"
color="0 1 0 1">

<!-- Input Line -->
<displayLine
inputFillTypeNode="0>5|0|0"
inputLevelNode="0>5|0|1"
inputPercentageNode="0>5|0|2"
productionIndex="1"/>

<!-- Output Line -->
<displayLine
outputFillTypeNode="0>5|0|3"
outputLevelNode="0>5|0|4"
outputPercentageNode="0>5|0|5"
productionIndex="1"/>

</display>
</ProductionDisplay>

📷 [SCREENSHOT: LED-Display zeigt "WHEAT: 5000 L (75%)" und "FLOUR: 2500 L (50%)"]

Beispiel 2: Erweiterte Anzeige mit dynamischen Farben

<ProductionDisplay>
<display
rootNode="0>5|0"
font="GENERIC"
size="0.06"
color="1 1 1 1">

<!-- Überschrift -->
<displayLine
customTextNode="0>5|0|0"
customText="PRODUKTIONSSTATUS"
textScale="0.08"/>

<!-- Produktionsstatus -->
<displayLine
productionNameNode="0>5|0|1"
productionStatusNode="0>5|0|2"
productionIndex="1"/>

<!-- Input mit dynamischen Farben -->
<displayLine
inputFillTypeNode="0>5|0|3"
inputLevelNode="0>5|0|4"
dynamicColors="true"
color0="0.5 0.5 0.5 1.0"
color25="1.0 0.0 0.0 1.0"
color50="1.0 1.0 0.0 1.0"
color75="1.0 1.0 0.0 1.0"
color100="0.0 1.0 0.0 1.0"
productionIndex="1"/>

<!-- Output mit Fortschrittsbalken -->
<displayLine
outputFillTypeNode="0>5|0|5"
outputLevelNode="0>5|0|6"
outputFillPlaneNode="0>5|0|7"
outputFillPlaneMinY="0.0"
outputFillPlaneMaxY="0.8"
productionIndex="1"/>

</display>
</ProductionDisplay>

📷 [SCREENSHOT: Display mit farbcodiertem Füllstand - bei niedrigem Level rot, bei hohem Level grün]

Beispiel 3: Conveyor Belt Monitor

<ProductionDisplay>
<display
rootNode="0>5|0"
font="DIGIT"
size="0.05"
color="1 1 0 1">

<!-- Conveyor Status -->
<displayLine
customTextNode="0>5|0|0"
customText="FOERDERBAND-SYSTEM"/>

<displayLine
conveyorBoxCountNode="0>5|0|1"
conveyorCycleStatusNode="0>5|0|2"
productionIndex="1"/>

<displayLine
conveyorLaneStatusNode="0>5|0|3"
font="GENERIC"
textScale="0.04"
productionIndex="1"/>

</display>
</ProductionDisplay>

📷 [SCREENSHOT: Display zeigt "6|12 Kisten" und "S1:Frei S2:Blockiert S3:Frei"]

Beispiel 4: Display mit verschiedenen Fonts

<ProductionDisplay>
<display
rootNode="0>5|0"
font="DIGIT"
size="0.06"
color="1 1 1 1">

<!-- Überschrift mit großem Font -->
<displayLine
customTextNode="0>5|0|0"
customText="MEHLWERK"
font="GENERIC_BOLD"
textScale="0.09"
textColor="0 1 0 1"/>

<!-- Input mit Standard-Font -->
<displayLine
inputFillTypeNode="0>5|0|1"
inputLevelNode="0>5|0|2"
productionIndex="1"/>

<!-- Status mit kleinerem Font -->
<displayLine
productionStatusNode="0>5|0|3"
font="GENERIC"
textScale="0.05"
productionIndex="1"/>

</display>
</ProductionDisplay>

📷 [SCREENSHOT: Display mit verschiedenen Font-Styles - Fette Überschrift, DIGIT-Zahlen, GENERIC-Status]

Beispiel 5: Regenwasser & Visual Slots Display

<ProductionDisplay>
<display
rootNode="0>5|0"
font="DIGIT"
size="0.05"
color="0 0.8 1 1">

<!-- Regenwasser-System -->
<displayLine
customTextNode="0>5|0|0"
customText="REGENWASSER"/>

<displayLine
rainwaterLevelNode="0>5|0|1"
rainwaterPercentageNode="0>5|0|2"
rainwaterStatusNode="0>5|0|3"/>

<!-- Visual Slots -->
<displayLine
customTextNode="0>5|0|4"
customText="LAGER"/>

<displayLine
visualSlotsCountNode="0>5|0|5"
visualSlotsPercentageNode="0>5|0|6"
visualSlotsFillType="FLOUR"
visualSlotsDisplayFormat="dash"/>

</display>
</ProductionDisplay>

📷 [SCREENSHOT: Display zeigt "REGENWASSER: 1500 L (30%) Sammelt" und "LAGER: 14 Pal. - 144 Pal. (10%)"]

Multi-Production Support

Verwende productionIndex um Informationen von spezifischen Productions anzuzeigen.

<ProductionDisplay>
<display rootNode="0>5|0" font="DIGIT" size="0.06" color="1 1 1 1">

<!-- Production 1: Mehl -->
<displayLine
customTextNode="0>5|0|0"
customText="LINIE 1: MEHL"/>

<displayLine
inputLevelNode="0>5|0|1"
outputLevelNode="0>5|0|2"
productionIndex="1"/>

<!-- Production 2: Brot -->
<displayLine
customTextNode="0>5|0|3"
customText="LINIE 2: BROT"/>

<displayLine
inputLevelNode="0>5|0|4"
outputLevelNode="0>5|0|5"
productionIndex="2"/>

</display>
</ProductionDisplay>

productionIndex:

  • 1-basierter Index (1 = erste Production, 2 = zweite, etc.)
  • Standard ist 1 wenn nicht angegeben
  • Muss mit Production-Reihenfolge in productions.xml übereinstimmen

Performance & Rendering

Optimierung

Das System ist für Performance optimiert:

  • Render Distance: 25 Meter

    • Displays werden nur aktualisiert wenn Spieler in 25m Umkreis ist
    • Automatische Distanz-Erkennung basierend auf Spieler/Fahrzeug Position
  • Update Interval: 2000ms (2 Sekunden)

    • Displays aktualisieren nicht jeden Frame
    • Staggered updates: Jedes Display hat einen eigenen Update-Offset
    • Verhindert Performance-Spikes bei vielen Displays
  • Change Detection: Nur bei Änderungen

    • Text wird nur gesetzt wenn sich der Wert geändert hat
    • Farben werden nur aktualisiert wenn sich die Farbe ändert
    • Fill planes bewegen sich nur bei Änderungen > 0.001

Performance Tipps

  1. Weniger ist mehr: Nur notwendige displayLines verwenden
  2. Font-Auswahl: Einfache Fonts (DIGIT) sind schneller als komplexe
  3. Dynamic Colors: Nur verwenden wo wirklich benötigt
  4. Display Platzierung: Displays strategisch platzieren (nicht 20 Displays an einem Gebäude)

Häufige Fehler

Display zeigt nichts

Problem: Display bleibt unsichtbar.

Lösung:

<!-- ❌ FALSCH: rootNode fehlt -->
<display font="DIGIT" size="0.05">

<!-- ✅ RICHTIG: rootNode definiert -->
<display rootNode="0>5|0" font="DIGIT" size="0.05">

Kein Text erscheint

Problem: Display ist sichtbar aber zeigt keinen Text.

Lösung:

<!-- ❌ FALSCH: Keine Nodes definiert -->
<displayLine productionIndex="1"/>

<!-- ✅ RICHTIG: Mindestens ein Node definiert -->
<displayLine
inputLevelNode="0>5|0|0"
productionIndex="1"/>

Falscher Font

Problem: Font sieht nicht richtig aus.

Lösung:

<!-- ❌ FALSCH: Ungültiger Font-Name -->
<display font="MyCustomFont">

<!-- ✅ RICHTIG: Valider Font aus $data/shared/fonts/ -->
<display font="DIGIT">

Verfügbare Fonts prüfen: $data/shared/fonts/*.xml

Farben ändern sich nicht

Problem: Dynamic colors funktionieren nicht.

Lösung:

<!-- ❌ FALSCH: dynamicColors nicht aktiviert -->
<displayLine
color0="1 0 0 1"
color100="0 1 0 1"
inputLevelNode="0>5|0|0"/>

<!-- ✅ RICHTIG: dynamicColors="true" -->
<displayLine
dynamicColors="true"
color0="1 0 0 1"
color100="0 1 0 1"
inputLevelNode="0>5|0|0"/>

Fortschrittsbalken bewegt sich nicht

Problem: Fill plane bewegt sich nicht.

Lösung:

<!-- ❌ FALSCH: MinY = MaxY -->
<displayLine
inputFillPlaneNode="0>5|0|0"
inputFillPlaneMinY="0.5"
inputFillPlaneMaxY="0.5"/>

<!-- ✅ RICHTIG: MinY < MaxY -->
<displayLine
inputFillPlaneNode="0>5|0|0"
inputFillPlaneMinY="0.0"
inputFillPlaneMaxY="1.0"/>

Falsche Production angezeigt

Problem: Display zeigt falsche Production.

Lösung:

<!-- ❌ FALSCH: productionIndex zu hoch -->
<displayLine
inputLevelNode="0>5|0|0"
productionIndex="5"/>
<!-- Aber nur 2 Productions existieren -->

<!-- ✅ RICHTIG: Valider Index -->
<displayLine
inputLevelNode="0>5|0|0"
productionIndex="1"/>

Icon nicht sichtbar

Problem: Icon Node zeigt kein Icon.

Lösung:

  • Icon Texture muss im I3D file als Bitmap Material konfiguriert sein
  • Node visibility wird automatisch gesteuert (nicht manuell setzen)
  • Icon wird nur gezeigt wenn Material existiert UND Level > 0
<!-- Im I3D File: -->
<!-- Material mit Icon Texture definieren -->
<!-- Im XML: -->
<displayLine
inputIconNode="0>5|0|0"
productionIndex="1"/>

Referenz

  • Beispiel: examples/11_ProductionDisplay.xml
  • Lua Script: scripts/ProductionDisplay.lua
  • Font Dateien: $data/shared/fonts/*.xml

Tipps & Best Practices

1. Font-Auswahl

DIGIT / DIGIT_BOLD - Am besten für:

  • Zahlen und Werte
  • 7-Segment LED-Displays
  • Klare, gut lesbare Zahlen-Anzeigen
  • Retro/Industrial Look

GENERIC / GENERIC_BOLD - Am besten für:

  • Text und Labels
  • Status-Meldungen
  • Moderne Displays
  • Gut lesbare Texte

LICENSE_PLATE_* - Am besten für:

  • Spezielle Designs
  • Authentische Kennzeichen-Optik
  • Stilisierte Anzeigen

2. Farb-Kodierung

Verwende konsistente Farben:

  • Grün: Gut/Voll/Aktiv
  • Gelb: Warnung/Mittel
  • Rot: Leer/Fehler/Inaktiv
  • Blau: Information/Wasser
  • Weiß: Neutral/Standard

3. Layout-Struktur

<ProductionDisplay>
<display rootNode="..." font="..." size="..." color="...">
<!-- 1. Überschrift/Label -->
<displayLine customTextNode="..." customText="PRODUKTION"/>

<!-- 2. Status -->
<displayLine productionStatusNode="..."/>

<!-- 3. Input -->
<displayLine inputFillTypeNode="..." inputLevelNode="..."/>

<!-- 4. Output -->
<displayLine outputFillTypeNode="..." outputLevelNode="..."/>

<!-- 5. Zusätzliche Info -->
<displayLine conveyorBoxCountNode="..."/>
</display>
</ProductionDisplay>

4. Performance

  • Max. 3-5 displayLines pro Display empfohlen
  • Dynamic Colors sparsam einsetzen
  • Nicht zu viele Displays in einem Bereich
  • Update Interval von 2s ist ausreichend für die meisten Anwendungen

5. Testing

Display Testing:

  1. Produktion starten → Text sollte erscheinen
  2. 25m entfernen → Display sollte nicht mehr updaten
  3. Zurückkommen → Display sollte wieder updaten
  4. Verschiedene Fill-Levels testen → Farben/Bars sollten sich ändern

Zusammenfassung

Production Display ermöglicht In-World Anzeigen für Produktionsinformationen

11 Display-Typen verfügbar: Status, Input/Output, Cycling Input/Output, Conveyor, Rainwater, Visual Slots, Opening Hours, etc.

11 Fonts verfügbar: DIGIT, GENERIC, GENERIC_BOLD, DIGIT_BOLD und LICENSE_PLATE-Varianten

Einfache Font-Konfiguration: Ein Font pro Display oder per Line überschreibbar

Dynamische Farben mit smooth Interpolation basierend auf Füllstand

Performance-optimiert mit 25m Render-Distance und 2s Update-Interval

Multi-Production Support mit productionIndex

TIPP

Starte mit einer einfachen Input/Output Anzeige und erweitere dann mit dynamischen Farben und zusätzlichen Features!