Dieses Projekt beinhaltet den gesamten Code des IPv12 - Energieprojekt Game Master Bildschirms.
Um es einfach zu builden in ein jar file wird folgender command verwendet:
mvn clean install
- Eine Java und JavaFX lauffähige Maschine bereitstellen inklusiv USB Port und PINS wo man Buttons anhängen kann.
Weiteres unter dem Kapitel "Spielerbuttons" - Im Kapitel Spielerbuttons muss man folgen wenn man Hardware Buttons einsetzen will. Sonst wird der User-Input jeweils über UI Buttons ersetzt.
- Nun muss man den Anemometer (Das Windmessgerät) neu Konfigurieren um auf der aktuellen Hardware problemfrei zu laufen. Genaue Spezifikation under dem Kapitel "Anemometer".
- Nun sollte die App bereit sein um normal via SuperApp.java#main mit Java zu starten.
- Folgende Linie in App.java muss auskommentiert werden um nicht den Button-Emulator laufen zu lassen sondern tatsächlich die Inputs von den Buttons zu lesen. Die Linien mit dem EmulatorView können auch entfernt werden.
App.java#29
//PUI pui = new PUI(controller, Pi4J.newContext());
App.java#43-48
Scene emulatorScene = new Scene(new EmulatorView(controller));
Stage secondaryStage = new Stage();
secondaryStage.setTitle("PUI Emulator");
secondaryStage.setScene(emulatorScene);
secondaryStage.show();
Man kann das Spiel auch mit dem EmulatorView spielen und einfach starten. Dann werden aber keine Inputs über die PINS gelesen.
- Die Buttons die man auswählt werden über PIN angeschlossen. Die Input PINS werden in folgender Datei angepasst.
PUI.java#48
// Diese Linie 4x hinzufügen damit es für jeden Spieler einen Button hat.
playerButtons.add(new SimpleButton(pi4J, PIN.D22, false));
Folgende Linie in App.java muss auskommentiert werden um nicht den Button-Emulator laufen zu lassen sondern tatsächlich die Inputs von den Buttons zu lesen. Die Linien mit dem EmulatorView können auch entfernt werden.
App.java#29
//PUI pui = new PUI(controller, Pi4J.newContext());
App.java#43-48
Scene emulatorScene = new Scene(new EmulatorView(controller));
Stage secondaryStage = new Stage();
secondaryStage.setTitle("PUI Emulator");
secondaryStage.setScene(emulatorScene);
secondaryStage.show();
- Jetzt muss sichergestellt sein, dass die Buttons korrekt an die Hardware mit PIN-Anschluss die Buttons korrekt angeschlossen sind. Dokumentation über die Verkabelung mit den Buttons ist je nach Hardware ein wenig unterschiedlich.
-
Ein Anemometer muss vorhanden sein mit Modbus-Kommunikation.
Getestetes Modell: https://www.pi-shop.ch/rs485-wind-speed-transmitter
Doku des Modells: https://wiki.dfrobot.com/RS485_Wind_Speed_Transmitter_SKU_SEN0483
Mit PIN zu USB-Adapter: https://www.dfrobot.com/product-2189.html -
Nun muss der USB-Port und die Modbus Konfiguration so angepasst werden um für das ausgewählte Modell zu funktionieren. Dies wird in der Datei Anemometer.java gemacht.
Anemometer.java#15
params.setPortName("cu.usbserial-1220");
Anemometer.java#29
Register[] slaveResponse = master.readMultipleRegisters(2, 0, 1);
- Falls es noch nicht so funktioniert wenn man den USB-Port angegeben hat und die zu lesenden Register angepasst hat, kann es sein das man weitere Hardware spezifische Modbus Konfiguration hinzufügen muss.
- Als erstes soll in IntelliJ die XML-Datei für die Coding Conventions importiert werden. Man findet diese unter:
https://www.cs.technik.fhnw.ch/confluence20/display/VT122209/Code-Konvention
-
Für eine neue Erweiterung wird ein Gitlab Issue erstellt: https://gitlab.fhnw.ch/ip12-22vt/ip12-22vt_energieversorgung/game-master/-/issues
-
Sobald man an diesem Issue arbeitet wird einen dazugehörigen Merge-Request/Branch erstellt mithilfe des drückens des blauen Knopfes. Angaben muss man soweit nicht anpassen. Beispiel: https://gitlab.fhnw.ch/ip12-22vt/ip12-22vt_energieversorgung/game-master/-/issues/1
Result: https://gitlab.fhnw.ch/ip12-22vt/ip12-22vt_energieversorgung/game-master/-/merge_requests/1 -
Merge Request bedeutet: Eine abgezweigte Version des Codes wird versucht wieder in den originale Version hineingebracht zu werden.
Wenn man an dem Issue arbeitet kann man das machen ohne das jemand anderst in die Queere kommt. Für das muss man in den neu erstellten Branch (wird erstellt bei Merge Request) gehen: https://gitlab.fhnw.ch/ip12-22vt/ip12-22vt_energieversorgung/game-master/-/tree/1-beispiel-issue
Direkt sollte man die verschiedenen Anforderungen in der Merge Request angeben, welche geändert/hinzugefügt werden, damit auf diese speziellen Wert gelegt werden kann.
https://www.cs.technik.fhnw.ch/confluence20/display/VT122209/Requirements -
Lokal muss man auch in diesen Branch gehen, dann dort arbeiten und dort commiten.
-
Sobald man das Issue implementiert hat geht man wieder auf die Merge Request und nimmt den "Draft:" prefix im Titel weg. Danach kann diese Merge Request reviewed werden durch eine andere Person und gemerged werden.
Die gesamte Doku ist abgelegt unter: dem Ordner docs
-
Translation support:
Translation support ist noch nicht gemacht aber kann via javafx bundles erstellt werden. (https://stackoverflow.com/questions/60377780/javafx-internationalization-without-fxml) -
Memory issues:
Aktuell stocken die GIF und die gesamte App nach einer Weile. Unsere These ist, dass das GameMasterView#setupModelToUiBindings unendlich listeners kreiert und sie nicht wieder aufräumt. Da das ganze Asynchron ist, werden viele Threads erstellt und womöglich nicht mehr zeitgerecht geschlossen was die Memory volllaufen lässt. Wird versucht in den nächsten Tagen noch zu beheben, da es sonst das Spiel unspielbar macht.