13. Production Display - Digital

Ü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
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>
rootNode muss definiert sein und mindestens ein Text-Node pro displayLine!
Display Konfiguration
Root Display Attribute
| Attribut | Typ | Standard | Beschreibung |
|---|---|---|---|
rootNode | node | - | Root Node des Displays (Pflicht) |
font | string | "DIGIT" | Standard-Font für alle Text-Elemente |
size | float | 0.05 | Standard-Textgröße/Skalierung |
color | string | "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 TextGENERIC_BOLD- Fetter Standard-FontDIGIT_BOLD- Fetter 7-Segment StyleLICENSE_PLATE_DE- Deutsche Kennzeichen-SchriftLICENSE_PLATE_UK- UK Kennzeichen-SchriftLICENSE_PLATE_US- US Kennzeichen-SchriftLICENSE_PLATE_FR- Französische Kennzeichen-SchriftLICENSE_PLATE_CZ- Tschechische Kennzeichen-SchriftLICENSE_PLATE_PL- Polnische Kennzeichen-SchriftLICENSE_PLATE_AS- Alternative Kennzeichen-Schrift
DisplayLine Konfiguration
Jede <displayLine> zeigt spezifische Produktionsinformationen. Mehrere DisplayLines können pro Display konfiguriert werden.
Per-Line Overrides
| Attribut | Typ | Standard | Beschreibung |
|---|---|---|---|
font | string | display font | Überschreibt Standard-Font für diese Line |
textColor | string | display color | Überschreibt Standard-Farbe für diese Line |
textScale | float | display size | Überschreibt Standard-Größe für diese Line |
productionIndex | int | 1 | Welche Production überwacht werden soll (1-basiert) |
cycleInputs | bool | false | Inputs nacheinander rotierend anzeigen (statt nur erster Input) |
cycleOutputs | bool | false | Outputs nacheinander rotierend anzeigen (statt nur erster Output) |
cycleInterval | int | 3000 | Wie lange jeder Eintrag angezeigt wird (in ms) |
cyclePause | int | 500 | Kurze 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
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:
| Attribut | Typ | Beschreibung | Verwendet für |
|---|---|---|---|
countFont | string | Font speziell für Zahlen | Level, Percentage, Counts |
textFont | string | Font speziell für Text | FillType-Namen, Labels |
statusFont | string | Font speziell für Status | Status-Meldungen |
Font Hierarchie:
countFont→ Falls nicht gesetzt, wirdfontverwendettextFont→ Falls nicht gesetzt, wirdfontverwendetstatusFont→ Falls nicht gesetzt, wirdtextFont, dannfontverwendet
Beispiel:
<displayLine
font="GENERIC"
countFont="DIGIT"
inputLevelNode="0>5|0|0"
inputFillTypeNode="0>5|0|1"/>
<!-- inputLevelNode nutzt DIGIT (Zahlen) -->
<!-- inputFillTypeNode nutzt GENERIC (Text) -->
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 gestopptRUNNING(grün) - Produktion aktivMISSING_INPUTS(gelb) - Wartet auf MaterialNO_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-NameoutputLevelNode- Zeigt Output-MengeoutputPercentageNode- 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:
truewenn 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"/>
| Attribut | Typ | Standard | Beschreibung |
|---|---|---|---|
inputFillPlaneNode | node | - | Plane Node für Input-Fortschrittsbalken |
inputFillPlaneMinY | float | 0.0 | Y-Position bei 0% Füllstand |
inputFillPlaneMaxY | float | 1.0 | Y-Position bei 100% Füllstand |
outputFillPlaneNode | node | - | Plane Node für Output-Fortschrittsbalken |
outputFillPlaneMinY | float | 0.0 | Y-Position bei 0% Füllstand |
outputFillPlaneMaxY | float | 1.0 | Y-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)
- Grün
- 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>
Kombiniere mit customTextNode für eine Überschrift und zeige darunter den Öffnungsstatus!
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"/>
| Attribut | Typ | Standard | Beschreibung |
|---|---|---|---|
visualSlotsCountNode | node | - | Zeigt benutzt/gesamt Slots |
visualSlotsPercentageNode | node | - | Zeigt Nutzung in % |
visualSlotsFillTypeNode | node | - | Zeigt überwachten Material-Namen |
visualSlotsFillType | string | - | FillType zum Überwachen (leer lassen für alle) |
visualSlotsDisplayFormat | string | "count" | Anzeige-Format (siehe unten) |
Anzeige-Formate:
- count (kompakt):
"14:144" - dash:
"14 Pal. - 144 Pal." - 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"/>
| Attribut | Typ | Standard | Beschreibung |
|---|---|---|---|
cycleInputs | bool | false | Inputs nacheinander anzeigen |
cycleOutputs | bool | false | Outputs nacheinander anzeigen |
cycleInterval | int | 3000 | Anzeigedauer pro Eintrag in ms |
cyclePause | int | 500 | Pause (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.timesynchron — 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"/>
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"/>
| Attribut | Typ | Standard | Beschreibung |
|---|---|---|---|
dynamicColors | bool | false | Aktiviert dynamische Farb-Interpolation |
color0 | string | "0.5 0.5 0.5 1.0" | Farbe bei 0% Füllstand (grau) |
color25 | string | "1.0 0.0 0.0 1.0" | Farbe bei 25% Füllstand (rot) |
color50 | string | "1.0 1.0 0.0 1.0" | Farbe bei 50% Füllstand (gelb) |
color75 | string | "1.0 1.0 0.0 1.0" | Farbe bei 75% Füllstand (gelb) |
color100 | string | "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
1wenn 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
- Weniger ist mehr: Nur notwendige displayLines verwenden
- Font-Auswahl: Einfache Fonts (DIGIT) sind schneller als komplexe
- Dynamic Colors: Nur verwenden wo wirklich benötigt
- 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:
- Produktion starten → Text sollte erscheinen
- 25m entfernen → Display sollte nicht mehr updaten
- Zurückkommen → Display sollte wieder updaten
- 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
Starte mit einer einfachen Input/Output Anzeige und erweitere dann mit dynamischen Farben und zusätzlichen Features!

