Dungeon-CampusMinden / Dungeon

The "Dungeon" is a tool to gamify classroom content and integrate it into a 2D Rogue-Like role-playing game.
MIT License
15 stars 36 forks source link

ECS-Dungeon #332

Closed AMatutat closed 1 year ago

AMatutat commented 1 year ago

Im Dungeon haben wir dieses Framework genutzt, um eine ECS basierte Struktur aufzusetzen. Das hat gut Funktioniert und das entwickeln neuer Features im ECS ist deutlich angenehmer. Zusätzlich ist die Lesbarkeit der Strukturen und des Codes deutlich einfacher.

Es wäre denkbar, das Framework vollständig auf dieses ECS System umzubauen. Dafür könnten wir viel des Codes im Dungeon übernehmen. Nach einer erster Einschätzung müsste kein/nur wenig Code neu geschrieben werden, einige Strukturen könnten sogar entfernt werden.

Was mir besonders gut gefällt ist, das wir im Dungeon bereits einiges an Basisfunktionen implementiert haben und dann direkt mit vorgeben könnten. Ich denke da z.B an das Hitbox-System, welches das Spiel stark aufwertet aber einfach doof zu implementieren ist und für Studis auch nicht grade motivieren ist. Die Studis könnten sich also mehr auf "sichtbare" Spielinhalte konzentrieren.

Edit:

Ich erstell mir hier mal eine Checkliste, und wenn wir hier fertig sind tranferiere ich dieses Issue nach drüben und generier mir Issues aus der Checkliste

cagix commented 1 year ago

Wie heute diskutiert:

Es macht für mich viel Sinn, über ein Mono-Repo nachzudenken, in dem verschiedene (IntelliJ-) Projekte auf Root-Ebene parallel leben:

Wenn ich es richtig verstanden habe, müssen für den PM-Dungeon (das Framework) eigentlich keine Änderungen erfolgen - es könnten/sollten aber nicht mehr benötigte Strukturen entfernt werden. Das ECS-Package würde vermutlich nach dem Merge dann direkt in das Framework wandern. Vielleicht gibt es noch weitere Packages im Dungeon, die dann in den PM-Dungeon-Source-Tree wandern (nach dem Merge!)?

Die Ordnerstrukturen müssten vorher in beiden Repos so angepasst werden, dass sie gewissermaßen "übereinandergelegt" werden können. Dann kann man den Master-Tree vom Dungeon nehmen und als neue zusätzliche Wurzel im PM-Dungeon reinziehen und beide mergen. So bleiben sowohl die Historie als auch die Contributors erhalten.

Die Issue und evtl. die Discussions können verschoben werden. PRs sind dann verloren, aber vielleicht ist das auch langfristig unrelevant. Meilensteine müssten neu im PM-Dungeon angelegt werden (geht auch über die API, aber vermutlich ist es schneller manuell gemacht) - am besten vor dem Verschieben der Issues.

Im resultierenden Mono-Repo sollten die Strukturen (Projekte und Packages) so aufgeteilt werden, dass man mit einem git subtree split den Kram ggf. auch wieder einfach trennen kann.

Die GH-Workflows müssen ggf. angepasst werden. Der PM-Dungeon-Tree sollte mind. ein Tag bekommen; vielleicht sollte man sich aber auch von der aktuellen Versionsnummerngeschichte bei der Gelegenheit verabschieden und einfach Semesterweise ein Tag vergeben (tbd[^1]). Dito könnte man bei der Gelegenheit nochmal Maven Central überdenken und ob man nicht auch Github als Provider für das PM-Dungeon-JAR in Gradle nutzen kann.


Für die Studierenden würden wir ein neues Repo anlegen mit einer minimalen Konfiguration (Gradle), die sich ein JAR vom PM-Dungeon-Teil zieht und wo die Studis dann ihre Implementierung erledigen. Wenn sich jemand unser Repo nimmt, passiert das auf eigene Gefahr.

Ein möglicher Nachteil ist, dass die Studierenden im Teil (Projekt? Package?) für die vorimplementierten Basisfunktionen Dinge sehen könnten, die sie eigentlich selbst implementieren sollen. Aber vielleicht kann man das so ummünzen, dass sie hier ein Codestudium machen und so eine bessere Idee bekommen, wie etwas umgesetzt werden kann und auf der Basis ihre eigenen Implementierungen machen.

[^1]: Im Semester sollen die Studis einfach immer die aktuelle Version im master[^2] einsetzen, hier werden ausschließlich Bugs gefixt. Neue Features gibt es im Semester nicht bzw. nur in einem parallelen Branch, der erst nach dem Semester gemergt wird[^3]. So sollten die Studis immer die beste Version haben und keine Probleme mit nicht kompatiblen Änderungen bekommen.[^4]

[^2]: Nach jedem Merge in den master wird das JAR als Artefakt neu gebaut - es ist also egal, ob die Studis mit dem JAR oder dem Source im master arbeiten.

[^3]: Diesen Feature-Branch sollte man dann auch immer regelmäßig auf die Spitze des aktuellen masters rebasen, damit dort dann auch die Bugfixes drin sind.

[^4]: Falls wir doch Versionen brauchen, weil man sonst kein GH-Release hinkriegt, dann wäre das sowas wie S23.1, also "Semester.lfdeNummer".

AMatutat commented 1 year ago

Hier mal eine Liste an Klassen die aus dem PM-Dungeon entfernt werden könnten (kein Anspruch auf Korrektheit und/oder Vollständigkeit)

AMatutat commented 1 year ago

Und hier eine Liste an Systemen und Components die ich aus dem ECS übertragen würde:

Systeme:

Components:

Die basis Entität Entity wird auch vorgegeben.

Was ich nicht vorgeben würde:

cagix commented 1 year ago

Hmmm. Ein Überblick wäre hilfreich, also sowas wie ein Diagramm?

AI kann ich verstehen, das geht über den Bedarf für PM hinaus. Andererseits, wenn es drin ist: Was schadet es? Sollen die Studis da nicht eher die Components für sich sinnvoll nutzen und/oder erweitern?

Skills und Keyboard: Wo liegt der Mehrwert, wenn wir das die Studis selbst machen lassen, ggf. durch Kopieren aus einem Quick-Start? Von hier aus erscheint es mir sinnvoll, diese Dinge ebenfalls vorzugeben, und im Quick-Start zu zeigen, wie man sie einbindet und nutzt und erweitert?

Für das Dungeon- Projekt wäre es hilfreich, wenn es mit im Repo drin wäre - das würde uns die Hilfskonstruktionen mit privaten Zusatz-Repos ersparen. Und für PM würde es vermutlich nicht schaden, wenn die Sachen schon da sind und von den Studis zusammengebaut werden (statt "selbst erstellt" durch Kopieren aus einem Dokument).

AMatutat commented 1 year ago

Grade mal was gecheckt: scheinbar kann man über die GitHub API keine issues transferieren. Das geht nur über die UI. Man kann alle issues exportieren und dann ein Skript über die so bekommene Json laufen lassen, welches dann neue Issues erstellt. Aber dann gehen bestimmt irgendwelche Diskussionen und Meta Daten verloren

cagix commented 1 year ago

Grade mal was gecheckt: scheinbar kann man über die GitHub API keine issues transferieren. Das geht nur über die UI. Man kann alle issues exportieren und dann ein Skript über die so bekommene Json laufen lassen, welches dann neue Issues erstellt. Aber dann gehen bestimmt irgendwelche Diskussionen und Meta Daten verloren

Das ist bitter - ich ärgere mich ja schon über die mit Sicherheit nicht übertragbaren PRs. Müssen wir mal überlegen, wieviele Klicks pro Ticket-Verschiebung notwendig sind und ob das dann ggf. über SHK und Praktikum verteilt werden kann?

AMatutat commented 1 year ago

und ob das dann ggf. über SHK und Praktikum verteilt werden kann?

Uff.... du bist böse.... Weiß auch nicht, ob ich das abgeben wollen würde. In meinen Kopf muss das alles in einer Nacht und Nebel Aktion passieren, um den Arbeitsbetrieb nicht zum stocken zu bringen. Da sind mehr Beteilige irgendwie auch eine größere Fehlerquelle

AMatutat commented 1 year ago

Es macht für mich viel Sinn, über ein Mono-Repo nachzudenken, in dem verschiedene (IntelliJ-) Projekte auf Root-Ebene parallel leben: PM-Dungeon (Framework) DSL-Anbindung (Dungeon/game/dslToGame) DSL und Compiler (Dungeon/dsl) Vorimplementierte Basisfunktionen, die für die Generierung der Rätsel benötigt werden (Hitbox, ...)

Das wäre das Endziel. Für den Umzug würde ich DSL-Anbindung ([Dungeon/game/dslToGame] und PM-Dungeon (Framework) und Vorimplementierte Basisfunktionen, die für die Generierung der Rätsel benötigt werden (Hitbox, ...) zusammen gesteckt lassen und im Anschluss aufteilen. Da müssen dann noch Gradle-Files (um)geschrieben werden und irgendwelche Abhängikeiten beachten werden etc. Das kostet einfach etwas Zeit und verzögert den Umzug nur.

Die Ordnerstrukturen müssten vorher in beiden Repos so angepasst werden, dass sie gewissermaßen "übereinandergelegt" werden können. Dann kann man den Master-Tree vom Dungeon nehmen und als neue zusätzliche Wurzel im PM-Dungeon reinziehen und beide mergen. So bleiben sowohl die Historie als auch die Contributors erhalten.

Muss es der Master-Tree sein? Als Fallback Ebene würde ich lieber einen Branch nehmen, die umstrukturierung durchführen und den Dungeon-master unangetastet lassen.

Nachdem der kram verein ist, würde für mich das große sauber machen anfangen.

cagix commented 1 year ago

und ob das dann ggf. über SHK und Praktikum verteilt werden kann?

Uff.... du bist böse....

ja, aber realistisch ist alles andere einfach zu teuer. und man kann das auch mehrere köpfe verteilen.

Weiß auch nicht, ob ich das abgeben wollen würde. In meinen Kopf muss das alles in einer Nacht und Nebel Aktion passieren, um den Arbeitsbetrieb nicht zum stocken zu bringen. Da sind mehr Beteilige irgendwie auch eine größere Fehlerquelle

Die Tickets müssten nicht in einem Zug rüber: jeder kann "seine" Arbeitstickets rüberschieben plus die für die Woche geplanten. Danach dann inkrementell weiter, und zuletzt alle geschlossenen Issues.

cagix commented 1 year ago

Es macht für mich viel Sinn, über ein Mono-Repo nachzudenken, in dem verschiedene (IntelliJ-) Projekte auf Root-Ebene parallel leben:

PM-Dungeon (Framework)

DSL-Anbindung (Dungeon/game/dslToGame)

DSL und Compiler (Dungeon/dsl)

Vorimplementierte Basisfunktionen, die für die Generierung der Rätsel benötigt werden (Hitbox, ...)

Das wäre das Endziel. Für den Umzug würde ich DSL-Anbindung ([Dungeon/game/dslToGame] und PM-Dungeon (Framework) und Vorimplementierte Basisfunktionen, die für die Generierung der Rätsel benötigt werden (Hitbox, ...) zusammen gesteckt lassen und im Anschluss aufteilen. Da müssen dann noch Gradle-Files (um)geschrieben werden und irgendwelche Abhängikeiten beachten werden etc. Das kostet einfach etwas Zeit und verzögert den Umzug nur.

ja, von mir aus. dennoch muss ein klares konzept bzgl. der ordnerstruktur her und beide repos müssen entsprechend vorbereitet werden.

und das gradle-zeugs wird man eh anfassen müssen, aber gut.

Die Ordnerstrukturen müssten vorher in beiden Repos so angepasst werden, dass sie gewissermaßen "übereinandergelegt" werden können. Dann kann man den Master-Tree vom Dungeon nehmen und als neue zusätzliche Wurzel im PM-Dungeon reinziehen und beide mergen. So bleiben sowohl die Historie als auch die Contributors erhalten.

Muss es der Master-Tree sein? Als Fallback Ebene würde ich lieber einen Branch nehmen, die umstrukturierung durchführen und den Dungeon-master unangetastet lassen.

wegen mir in einem hilfsbranch vorbereiten.

aber: das vereinigen der trees an sich würde ich im master machen wollen, das kommt über bande nicht gut. das ist eh frickelig, und dann in einem hilfsbranch mit squash-merge? eher nicht.

Nachdem der kram verein ist, würde für mich das große sauber machen anfangen.

ja, das kann ja such wieder ein hilfsbranch sein.

cagix commented 1 year ago

@AMatutat Idee: Den PM-Dungeon aufbereiten und die Branches master und hamster hier in den Dungeon integrieren und die restlichen offenen Tickets aus PM-Dungeon hierher verschieben. => also die Richtung umkehren.

TODO:

AMatutat commented 1 year ago

Ich erstell mir hier mal eine Checkliste, und wenn wir hier fertig sind tranferiere ich dieses Issue nach drüben und generier mir Issues aus der Checkliste

cagix commented 1 year ago

@AMatutat Die noch offenen Tickets hier kommen noch rüber oder sind die für das Löschen vorgesehen? Teilweise sind die ja veraltet (Quickstart anpassen), aber sowas wie Checkstyle/Spotbugs und Testabdeckung ist ja immer noch relevant?

AMatutat commented 1 year ago

Ich würde die löschen.

cagix commented 1 year ago

Ich würde die löschen.

hmmm: "sowas wie Checkstyle/Spotbugs und Testabdeckung ist ja immer noch relevant?"

cagix commented 1 year ago

Ich meine, das sind halt tatsächlich offene/unerledigte Aufgaben, die auch den ECS-Dungeon betreffen (vermutlich).

Andererseits werden die im Rahmen des Projekts wohl realistisch von niemandem angefasst werden, zumal das ja teilweise auch in die Architektur reinspielt. D.h. das sind dann Reminder, die auf ewig offen bleiben.

AMatutat commented 1 year ago

Checkstyle und spotless sind eigentlich nur dann relevant, wenn wir uns an die Tools halten würden. Das funktioniert in der Praxis leider nicht. Was die Frage aufwirft, warum wir es noch haben.

Testabdeckung könnte man mitnehmen ich fürchte die Realität wird das Ding aber auf ein "later" also nie Schieben.

cagix commented 1 year ago

Checkstyle und spotless sind eigentlich nur dann relevant, wenn wir uns an die Tools halten würden. Das funktioniert in der Praxis leider nicht. Was die Frage aufwirft, warum wir es noch haben.

Das finde ich grad deutlich zu kurz gedacht (zumal, wenn es von einem wiss. MA kommt).

Die Sachen stelle ich im Unterricht vor. Die Studis bekommen diese Richtlinien, grad bzgl. Checkstyle, als Vorgabe. Da finde ich es etwas kurz gesprungen, wenn wir das mit unserem eigenen Code, den wir den Studis ebenfalls als Vorgabe geben, nicht mal versuchen einzuhalten und einfach sagen "geht irgendwie nicht".

Die Fragen müssten sein:

Testabdeckung könnte man mitnehmen ich fürchte die Realität wird das Ding aber auf ein "later" also nie Schieben.

Meine Rede. Aber man hätte halt den Marker und die Erinnerung. Eigentlich nicht verkehrt.

cagix commented 1 year ago

Sorry, aber das ist ein hartes No-Go für mich. Die drei Tickets (#304, Programmiermethoden/Dungeon#317, Programmiermethoden/Dungeon#316) kommen mit rüber.

cagix commented 1 year ago

Da zuletzt wieder nach Raspberry gefragt wurde: Das Programmiermethoden/Dungeon#315 geht auch rüber.

AMatutat commented 1 year ago

Sorry, aber das ist ein hartes No-Go für mich. Die drei Tickets (https://github.com/Programmiermethoden/Dungeon/issues/318, https://github.com/Programmiermethoden/Dungeon/issues/317, https://github.com/Programmiermethoden/Dungeon/issues/316) kommen mit rüber.

Dann ist das doch geklärt.

Da zuletzt wieder nach Raspberry gefragt wurde: Das https://github.com/Programmiermethoden/Dungeon/issues/315 geht auch rüber.

Alles klar. Ich bin immernoch der Meinung dass das jetzt gehen müsste, aber mir fehlt jemand der es testet.

cagix commented 1 year ago

Dann gibt es noch die mit "SHK"-Label (sogar alle "high prio"). Sind die wirklich obsolet? Die sind teilweise relativ neu?

AMatutat commented 1 year ago

Dann gibt es noch die mit "SHK"-Label (sogar alle "high prio"). Sind die wirklich obsolet? Die sind teilweise relativ neu?

Ja. Das gehört alles zum Quickstart und der muss für das ECS ja eh neu gemacht werden. Obwohl ich versuchen werde, die ECS-Dokumentation zu zu schreiben, dass es als Einstiegspunkt auch für 2. Semester funktioniert.

cagix commented 1 year ago

Dann gibt es noch die mit "SHK"-Label (sogar alle "high prio"). Sind die wirklich obsolet? Die sind teilweise relativ neu?

Ja. Das gehört alles zum Quickstart und der muss für das ECS ja eh neu gemacht werden. Obwohl ich versuchen werde, die ECS-Dokumentation zu zu schreiben, dass es als Einstiegspunkt auch für 2. Semester funktioniert.

Ah, stimmt, das ist fast alles Dokumentation (erstellen/anpassen) und einmal "Pathfinding durchblicken". Im Dungeon ist das Ticket "Alle Doku und Quickstart neu schreiben" oder so?

AMatutat commented 1 year ago

Im Dungeon ist das Ticket "Alle Doku und Quickstart neu schreiben" oder so?

Für mich ist (wenn wir fertig sind) Framework==ECS, daher gehört das alles zu https://github.com/Programmiermethoden/Dungeon/issues/187

AMatutat commented 1 year ago

Ich mach hier zu. Das Issue kommt aus dem alten Repo und ich wollte es nur nutzen, um meine Checkboxen zu Isseus transferieren zu können. Jetzt ist das hier ehr ein Sammelissue