==== Workshop - Mein erstes AddOn ==== === Einleitung === Im Folgenden wird ausführlich beschrieben, wie man selber AddOns programmiert. Ein AddOn ist ein kleines Zusatzprogramm neben der eigentlichen Software von Cockpit XP, welches sich individuell selber programmieren lässt. Programmierkenntnisse sind sicherlich von Vorteil, aber nicht zwingende eine Voraussetzung. Mit etwas Mut und gutem Willen kann man relativ schnell die Funktionsweise der Addon-Programmierung erlernen und sich dann seine eigenen AddOns programmieren. === Vorrausetzungen für den Workshop === Bitte erst **MeinErstesAddon.zip** runterladen und in das Anwender-Verzeichnis von Cockpit-XP kopieren und entpacken.\\ https://www.dropbox.com/s/g6qn10a1v2avjpp/MeinErstesAddon.zip?dl=0 Als nächstes klicken wir auf **ConfigCenter** und dann auf **AddOn Verwaltung**:\\ {{:cockpit-xp:faq:workshop:einstieg-1.png?nolink|}} Hier sollte dann der Ordner **MeinErstesAddon** wie folgt zu sehen sein:\\ {{:cockpit-xp:faq:workshop:einstieg-2.png?nolink|}} Hier sieht man jetzt 3 Dateien:\\ - AddOn.cps.xml: das ist das eigentliche „Programm“\\ - ConfigPackage.xml: hier werden Variablen für die Konfig-Einstellungen erstellt, welche man dann später alle von „aussen“ einstellen kann\\ - Info.txt: zusätzliche Informationen in Textform zum AddOn\\ === AddOn.cps.xml === Klickt man jetzt auf AddOn.cps.xml, dann öffnet sich die Programmierumgebung wie folgt: {{:cockpit-xp:faq:workshop:addoncpsxml.png?nolink|}}\\ {{:cockpit-xp:faq:workshop:addonn-struktur.png?nolink|}} === Ereignisse === Was sind Ereignisse?\\ Für jedes dieser **Ereignisse** kann jeweils ein „Programm“ hinterlegt werden. Möchte man z.B. bei einem neuen Rundenrekord etwas ausgeben, dann klickt man auf Rundenrekord und programmiert dann dort ein „Programm“.\\ === Was wollen wir programmieren? === Um mit der grundsätzlichen Funktion vertraut zu werden hab ich mir gedacht, wir programmieren mal einfach ein kleines AddOn, welches bei jeder Überfahrt Start/Ziel ansagt, welcher Fahrer gerade durchgefahren ist. Dafür klicken wir mal auf **StartZiel**, dann öffnet sich in der Mitte folgendes Fenster:\\ {{:cockpit-xp:faq:workshop:sz1.png?nolink|}} Durch klicken auf Ändern können wir zwischen begin und end dann anfangen zu editieren. Der Cursor blickt dann und die Zeile wird leicht gelb unterlegt.\\ {{:cockpit-xp:faq:workshop:sz2.png?nolink|}} Wie bereits erwähnt arbeitet CXP das **StartZiel-Ereignis** ab, sobald es „angestossen“ wird. Woher soll aber die Software jetzt wissen, welcher Fahrer gerade über StartZiel gefahren ist? Um diese Info zu erhalten gibt es den -nennen wir es mal Container- **Cockpit.Slot**. **Cockpit.Slot** „enthält“ jetzt die Info, welche wir brauchen und zwar **Cockpit.SlotID**. **Cockpit.SlotID** ist der **Verursacher**, welche gerade über Start-Ziel gefahren ist.\\ So, jetzt wird es Ernst:\\ Wir schreiben jetzt den Namen des Fahrers in die Variable Fahrername. Dafür gegeben wir folgenden Programmcode ein:\\ **Fahrername:=Cockpit.FahrerName** und beenden den Eintrag mit einem Semikolon „;“ (braucht der Editor um sauber zu erkennen wo die Programmierzeile aufhört).\\ {{:cockpit-xp:faq:workshop:sz3.png?nolink|}}\\ Jetzt klicken wir mal auf Übernehmen........Oups, jetzt kommt eine **Fehlermeldung?!?!?!**\\ {{:cockpit-xp:faq:workshop:fehler.png?nolink|}}\\ Was ist passiert?\\ Der Editor checkt bei Übernahme auf Plausibilität wie z.B. ob alle Variablen sauber deklariert sind. In unserem Fall ist es nicht so. Wir müssen jetzt die Variable **Fahrername** noch sauber deklarieren.\\ === Variablendeklaration === Grundsätzlich werden Variablen nach Programmzeile 0003 und vor der Programmzeile begin wie folgt deklariert:\\ Da es sich beim **Fahrername** um einen **String** handelt, muss man die Variable dementsprechend deklarieren.\\ Woher weiß ich den, um was für eine Art Variable es sich handelt?\\ Dafür klicken wir mal ganz rechts auf **Functions** und dann auf **cpRenndaten**\\ {{:cockpit-xp:faq:workshop:sz4.png?nolink|}}\\ Dann hier nach **Cockpit.FahrerName** suchen und dort steht nach dem Doppelpunkt „:“ um welche Art von Variable es sich handelt, in unserem Fall also um einen String....\\ Also, jetzt deklarieren wir diesen üünrigens völlig frei wählbaren **Variablennamen** als **String** wie folgt:\\ Angabe Namen, dann ein Doppelpunkt „:“ und die Art der Variablen, abgeschlossen mit einem Semikolon „;“\\ var\\ Fahrername: String;\\ **Die muss unbedingt vor begin rein-editiert werden !!** {{:cockpit-xp:faq:workshop:sz5.png?nolink|}} Drückt man jetzt auf Übernehmen, kommt keine Fehlermeldung mehr.\\ Was haben wir bis jetzt gelernt?\\ * Wir können den AddOn-Editor aufrufen\\ * Wir wissen jetzt warum und wie man Variablen deklariert\\ * Wir wissen jetzt, dass wir jede Programmierzeile mit einem Semikolon abschließen müssen\\ Und weiter geht’s.\\ Bisher haben wir ja nur den richtigen Namen in die **Variable** geschrieben, wir wollen ihn aber ja hören bei Überfahrt Start/Ziel. Dafür gibt es den Befehl **cpSpeech(SpeechText:String).** === Befehls-Struktur === Vorne steht immer der **Befehl**, gefolgt von einer Angabe in Klammer (). Innerhalb der Klammer wird noch angegeben, welche Variablen-Art benötigt wird. In unserem Fall brauchen wir einen **String**. Dieser **String** muss innerhalb der zwei Klammern stehen. Somit brauchen wir noch für die Ausgabe des **Fahrernamens** folgende Befehlszeile in unserem Programmcode: **cpSpeech(Fahrername);**\\ {{:cockpit-xp:faq:workshop:sz6.png?nolink|}} So sollte es dann aussehen und schon sind wir (fast) fertig…..\\ Es gibt eine Eigenart bei Cockpit XP, welche mit folgenden zwei Programmzeilen behoben wird:\\ Slot:=Cockpit.Slot; Cockpit.Slot:= Slot; Bitte nicht fragen was das soll….wird später noch ausführlich erklärt…\\ Also bitte einfach diese zwei Programmzeilen noch direkt nach **begin** einfügen, inkl. Der Variablendeklaration **Slot: Integer;**\\ {{:cockpit-xp:faq:workshop:sz7.png?nolink|}}\\ So, jetzt ist unser kleines Programm endlich fertig…..;-)……jetzt mal auf Speichern klicken….\\ === Test vom AddOn === **AddOns** kann man natürlich direkt an der Bahn testen. Es gibt aber auch eine Möglichkeit über die **Tastensimulation** ein AddOn am Rechner (ohne Rennbahn) zu Testen.\\ {{:cockpit-xp:faq:workshop:ts.png?nolink|}}\\ Hier mal draufklicken, dann kann man die **Tastensimulation** aktivieren (dabei wird dann vor aktivieren ein Häkchen gesetzt). Jetzt noch geschwind das AddOn auch laden, einen RBS auswählen auf Start drücken und simulieren.\\ === Tastensimulation === Zusätzlich zum RBS gibt es bei der **Tastensimulation** dann noch folgendes neues Fenster:\\ {{:cockpit-xp:faq:workshop:ts1.png?nolink|}} {{:cockpit-xp:faq:workshop:ts2.png?nolink|}} **Wie simuliert man jetzt?** * erst einmal muss ein Training/Quali oder Rennen gestartet werden * dann wählt man die entsprechende ID aus im ID-Feld * will man eine Start/Ziel-Durchfahrt simulieren so klickt man auf E1 im CU-Feld * will man TankenEinfahrt simulieren, dann klickt man auf E6 im CU-Feld * will man TankenAusfahrt simulieren, dann klickt man auf E7 im CU-Feld Mit unserem kleinen Addon müsste jetzt bei jedem Klick auf E1 im CU-Feld der Name des Fahrers angesagt werden.\\