Moin ,
hier mal ein Kochbuch zum Erstellen einer Rollbandes in (Achtung) Modul Bauweise
Step 1
Wir brauchen erstmal folgende Variablen auch bekannt unter PUBLIC_VARS
- {PUBLIC_VARS
- Line_previousUpperIndex: integer;
- Line_DisplayNumberUpperTexID: integer;
- Line_DisplayNumberLowerTexID: integer;
- Line_DisplayNumberPreLoadTexID: integer;
- Line_DisplayNumberTranslate: single;
- Line_displayNumber: single;
- Dest_previousUpperIndex: integer;
- Dest_DisplayNumberUpperTexID: integer;
- Dest_DisplayNumberLowerTexID: integer;
- Dest_DisplayNumberPreLoadTexID: integer;
- Dest_DisplayNumberTranslate: single;
- Dest_displayNumber: single;
- Rollbandbeleuchtung: single;
- }
(Bitte Nichtdie eckigen Klammer ( { } ) am Anfang und Ende vergessen )
Step 2 Weiter geht es mit den PUBLIC_BUTTONS mit denen wir am Ende die Rollbänder bewegen
(Bitte Nicht die eckigen Klammer ( { } ) am Anfang und Ende vergessen )
Step 3
nun geht es in die Interne Materie ( Zeile 27 bis 48 bei Kira´s Script )
- // "Kurbel" die allerdings nur scriptintern genutzt wird
- type
- TKurbel = record
- up: boolean;
- down: boolean;
- end;
- procedure KurbelPlus(var K: TKurbel; b: boolean);
- begin
- if b then
- K.up := true
- else
- K.up := false
- ;
- end;
- procedure KurbelMinus(var K: TKurbel; b: boolean);
- begin
- if b then
- K.down := true
- else
- K.down := false
- ;
- end;
Wie schon im Kommentar beschrieben wird hier eine "Kurbel" erstellt, welche aber nur scriptintern genutzt wird und die 4 zuvor erstellten PUBLIC_BUTTONS in Boolsche Werte (true / false) übersetzt.
Das ganze ist beispielsweise vergleichbar mit Tastern und Schaltern aus der TechElements.pas (OpenSource Ordner)
Step 4
Nun folgen die Zeilen 52 bis 62 mit Var (Variablen) bzw. Const (Konstanten)
Die beiden "Kurbeln" werden nun als lokale Variable definiert um später im Script darauf zugreifen zu können.
nun zu den Variablen (Zeile 52)
wir brauchen folgende
Nachfolgend werden noch ein paar Konstanten wie z.B. die User ID und die Content ID der jeweiligen Texturen definiert.
- const
- USERID = 123456; // User ID für Rollbandtexturen
- CONTENTID_LINE = 10000; // Start ID fuer Linienrollband Texturen
- CONTENTID_DEST = 20000; // Start ID fuer Zielrollband Texturen
- MAX_LINES = 10; // maximale Anzahl der "Linien" auf dem Rollband
- MAX_DEST = 20; // maximale Anzahl der "Ziele" auf dem Rollband
Step 5
Nun folgt die Initalizierung (Zeile 63 bis 74) procedure
- //##############################################################################
- //
- // INITIALIZATION
- //
- //##############################################################################
- procedure Initialize;
- begin
- Line_displayNumber := 2.01; // Linienband beim Start ungefähr auf Position des 2. Ziels drehen
- Dest_displayNumber := 1.98; // Zielband beim Start ungefähr auf Position des 2. Ziels drehen
- // Diese beiden Zeilen sollten nur dafuer sorgen das die Rollbandposition nicht zu 100 Prozent ganz genau passt
- und sind fuer die weitere Funktion nicht relevant.
- end;
(wieso eigentlich Pos 2 und nicht 0 )
Dieser Schritt ist nicht zwingend Notwendig und man kann die Werte auch verändern.
Im Falle dieses Scriptbeispiels war auf Position 2 der Rollbänder eine Schilderung für Betriebsfahrt/Leerfahrt vorgesehen, welche als "Startposition" dienen sollte.
Step 6
Nun zur SimStep Prozedur, diese erhält zusätzlich zu den lokalen Variablen des Scripts nochmals eigene Variablen die nur innerhalb dieser Prozedur genutzt werden.
Line_upperIndex (Liniennummer/Schild) und Dest_upperIndex (Zielname/Zielschild) beides Typ interger
Danach beginnt auch schon der ganze "Zauber".
Zunächst wird das Linienrollband gekrubelt, aber nur so lange bis es an einem der beiden Enden angekommen ist.
Man kann also nicht über die in den Konstanten angelegte maximale Anzahl hinaus oder unter die 0-Position kurbeln.
Danach werden die Texturen geladen und das ganze für das Linienrollband wiederholt.
- //##############################################################################
- //
- // SimStep
- //
- //##############################################################################
- procedure SimStep;
- var
- Line_upperIndex: integer;
- Dest_upperIndex: integer;
- begin
- // Linienrollband kurbeln
- if Kurbel_L.up and (Line_displayNumber < MAX_LINES) then
- Line_displayNumber := Line_displayNumber + Timegap * 0.35
- else if Kurbel_L.down and (Line_displayNumber > 0) then
- Line_displayNumber := Line_displayNumber - Timegap * 0.35;
- // Textur für Linienrollband
- Line_upperIndex := trunc(Line_displayNumber); // schreibt den Index der anzuzeigenden Liniennummer
- Line_DisplayNumberTranslate := Line_displayNumber - Line_upperIndex ; // "Rest" zwischen dem tatsächlichen "Kurbelstand" und der Position der oberen Nummer (aus Lexikon übernommen, aber hier noch ohne Funktion)
- if Line_previousUpperIndex <> Line_upperIndex then // Schildwechsel (GetTextureIndex sollte nie dauerhaft ausgeführt werden!)
- begin
- Line_DisplayNumberUpperTexID := GetTextureIndex(USERID, CONTENTID_LINE + Line_upperIndex); // schreiben (laden) der aktuellen Textur
- Line_DisplayNumberLowerTexID := GetTextureIndex(USERID, (CONTENTID_LINE + 1) + Line_upperIndex); // schreiben (laden) der nächsten Textur
- Line_DisplayNumberPreLoadTexID := GetTextureIndex(USERID, (CONTENTID_LINE + 2) + Line_upperIndex); // zusätzliches schreiben (laden) der übernächsten Textur für das "Anti-Flacker-Polygon"
- Line_previousUpperIndex := Line_upperIndex;
- end;
- // Zielrollband kurbeln
- if Kurbel_Z.up and (Dest_displayNumber < MAX_DEST) then
- Dest_displayNumber := Dest_displayNumber + Timegap * 0.35
- else if Kurbel_Z.down and (Dest_displayNumber > 0) then
- Dest_displayNumber := Dest_displayNumber - Timegap * 0.35;
- // Textur für Zielrollband
- Dest_upperIndex := trunc(Dest_displayNumber); // schreibt den Index des anzuzeigenden Zielschilds
- Dest_DisplayNumberTranslate := Dest_displayNumber - Dest_upperIndex ; // "Rest" zwischen dem tatsächlichen "Kurbelstand" und der Position der oberen Nummer (aus Lexikon übernommen, aber hier noch ohne Funktion)
- if Dest_previousUpperIndex <> Dest_upperIndex then // Schildwechsel (GetTextureIndex sollte nie dauerhaft ausgeführt werden!)
- begin
- Dest_DisplayNumberUpperTexID := GetTextureIndex(USERID, CONTENTID_DEST + Dest_upperIndex); // schreiben (laden) der aktuellen Textur
- Dest_DisplayNumberLowerTexID := GetTextureIndex(USERID, (CONTENTID_DEST + 1) + Dest_upperIndex); // schreiben (laden) der nächsten Textur
- Dest_DisplayNumberPreLoadTexID := GetTextureIndex(USERID, (CONTENTID_DEST + 2) + Dest_upperIndex); // zusätzliches schreiben (laden) der übernächsten Textur für das "Anti-Flacker-Polygon"
- Dest_previousUpperIndex := Dest_upperIndex;
- end;
- end;
Step 7
nun folgt unter dem SimStep noch eine Empfänger Prozedur, welche später im Fahrzeug hoffentlich eine single-Variable empfängt und diese zur Beleuchtung des Rollbands nutzen kann.
Step 8
nun folgen die Onbutton Prozedur, welche den unter "PUBLIC_BUTTONS" erstellten Schaltflächen nun auch eine Funktion gibt.
- //##############################################################################
- //
- // OnButton + OnFloatInput
- //
- //##############################################################################
- procedure OnButton(id: string; value: boolean; cockpitIndex: byte);
- begin
- if (id = 'Kurbel_Linie_Plus') then begin KurbelPlus(Kurbel_L, value); end
- else if (id = 'Kurbel_Linie_Minus') then begin KurbelMinus(Kurbel_L, value); end
- else if (id = 'Kurbel_Ziel_Plus') then begin KurbelPlus(Kurbel_Z, value); end
- else if (id = 'Kurbel_Ziel_Minus') then begin KurbelMinus(Kurbel_Z, value); end
- ;
- end;
- end.
Ins gehen wir nach dem Abendessen