Tagebuch: Feature Runner

Hau raus :wink: . Entweder ich fix die oder ich pack die in mein Kanban-board. Untergehen wird jetzt nix mehr :slight_smile:.

War auf jeden Fall sehr fleißig und werde jetzt auch für heute aufhören. Auch wenn ich noch Bock hätte - aber so langsam lässt die Konzentrationsfähigkeit nach. Mein Zwischenstand soweit:

Aus den 6 Tests wurden mittlerweile 21! Und ich werde vermutlich auch sehr gut mit wenigen Managern auskommen (vermutlich nur einen GameManager und einen UiManager). Durch die neu eingeführten Services hab ich einen tollen Layer dazwischen mit einigen Vorteilen:

  • Sie können dem SRP folgen
  • Sie sind Testbar
  • Sie können durch den GameManager „gemanagt“ werden → Ich brauche weniger events

Gerade über letzteres bin ich sehr froh. Denn beim refaktoren hab ich gemerkt, dass ich so langsam den Überblick über Logik verliere. Da manches Event-gesteuert lief und anderes nicht (da nie nachgezogen) ist es doch sehr durcheinander. Dem wirke ich entgegen, indem ich den Unterbau wirklich komplett neu schreibe! Was nicht heißt, dass ich bestehenden Code nicht wieder verwenden würde. Nur wird dieser dann auch per Tests abgedeckt und nochmal Zeile für Zeile durchgegangen - ob ich das so wirklich haben möchte. Übernommener Code wird also auch durch Tests abgesichert sein!

Also: Da wartet noch wirklich eine GANZE MENGE Arbeit auf mich. Ich bezweifle, dass das nächste Update so schnell kommen wird ^^.

  1. Die Kollisionsberechnung geht nicht. Lauf mal einfach durch einen Erdblock durch statt draufzuspringen.
    Also ich meine, als sie ging war es auch nicht viel besser, weil man da ständig in Hindernissen hängengeblieben ist…

  2. Manchmal verschwindet direkt zu Anfang ein Teil des Hintergrundes. (Der Hintergrund scheint verschiedene Startpositionen zu haben?)

  3. Vorschlag für den Soundtrack: The Builder - Lizenz CC3.0
    Da gibt es eine Menge passender Soundtracks für dein Jump&Run. Die Kategorie „Comedic“ passt wohl am besten.
    Von dort hab ich schon öfters Soundtracks genommen. Die mp3 Qualität lässt nur manchmal zu wünschen übrig. Muss man sich manchmal überlegen ob man die 5$ nicht doch investiert.

Ja, das liegt daran, dass ich den Collider entfernt hab => also ist Absischt von mir ;-). Bin mir noch nicht sicher wie ich das Verhalten der Blöcke handhaben möchte. Wird vielleicht auch nochmal komplett umgestellt, dass man z.B. 3 Leben hat und 1 abgezogen bekommt wenn man gegen einen Block läuft (im Gegenzug wird der Block zerstört).

Das hab ich auch schon beobachtet, aber kanns nicht provozieren. Ich hab derzeit keine Ahnung woran das liegt :confused:

Ich werd mir deinen Vorschlag mal anhören - vllt kann ich etwas ähnliches machen. Aber darauf zurückgreifen werde ich nicht können, da MP3’s in den Spielen wohl Probleme macht brauche ich die Sound-datei im wav-Format.

ACHTUNG!!! Wer noch immer mit einer alten Version spielt, sollte vor dem nächsten Release nochmal updaten!

Warum: sonst verliert ihr eure erspielten Features! Ich hab geschaut, manche sind noch auf Release 1.8.1 (laut Google Play Console). Also zumindest die Android-Leute sollten sicher sein, da laut meinen “Recherchen” dort schon etwas länger die neuen Features aktiv sind. Gefährdet sind also u.U. nur Windows-Spieler. Also zur Sicherheit: App einmal herunterladen und starten. Danach mergt das Spiel eure bereits gekauften Features in das neue Format.

Ich bin guter Dinge, dass keiner seine Daten verlieren wird. Dennoch wollte ich zu Sicherheit die Warnung ausgeben.

Nur ein kleiner Bug:

Ich hab mir das 2x Jump power up gekauft und dann gleich wieder verbraucht, danach wollte ich es mir wieder kaufen, aber im Store steht noch immer, dass ich das power up 1 mal habe. Im spiel zählt er richtig und dort hab ich es nicht mehr.

Es wirkt so als würde der Store nur nach oben zählen

Hab ich mal aufgenommen. Bin guter Dinge, dass es etwas ist, was ich unbewusst mit der neuen Architektur gefixt hätte. Zur Sicherheit hab ichs aber aufgenommen und den Bug direkt in die „zu testen“-Spalte gepackt.

Über das WE hatte ich nicht all zu viel Zeit, aber ich hab doch (mit heute) einiges geschafft bekommen. So hab ich etliche neue Services + 31 neue Tests :slight_smile::

image

Was mich vor allem freut: Riders hatte am Anfang ne echt beschissene Test-Integration. Ich konnte einen Testlauf zwar „triggern“ aber der war praktisch für immer im Status „pending“. Dadurch musste ich die Tests immer in Unity3D ausführen. Könnt euch vorstellen, wie häufig ich die IDE wechseln durfte (zum Glück hab ich daheim auch 3 Monitore, damit war es noch einigermaßen erträglich).

Aber gerade vor ein paar Tagen kam ein Rider-Update das die von Jetbrains gemacht haben um mir mein Leben zu erleichtern. Denn jetzt funktionieren die Tests endlich :slight_smile::

Die letzten zwei Updates von Rider waren echt topp. Haben jedes mal genau die Probleme gelöst, die mir aufgefallen waren. Vor allem weil zwischen „Bekommen des Problems“ und dem Fix von Jetbrains nur ein paar Tage lagen :slight_smile:.

Jetzt hat der eigentliche Spaß angefangen … die alten Models müssen raus. Das LegacyModel.GameModel hab ich eben rausgeworfen und hoffe INSTÄNDIG das ich weiß was ich tue!

Ich will die legacy-sourcen nicht weiter im Projekt haben. D.h. was nicht mehr gebraucht wird fliegt raus. Natürlich hab ich eine Versionierung - aber trotzdem: gefühlt arbeite ich hier gerade ohne Sicherungsnetz. Deswegen mach ich auch für heute abend Schluss. Einmal nicht aufgepasst und ich schick ne Methode ins Nirvana die ich vllt noch nicht 100% übertragen hab.

So. Zwischenstandmeldung:

Hab jetzt heute morgen etliches geschafft. Viele ehemaligen Klassen konnte ich schon löschen, da ich deren Logik (hoffentlich) komplett übertragen habe. Was ich vergessen hab, sind so manche Werte der Manager zu sichern :frowning_face:. Muss ich halt wieder rausfinden, was es war. Mit ein wenig glück helfen mir meine Screenshots + Videos die ich hier gepostet hab. Also kein Beinbruch - einfach nur nervig.

Mittlerweile bin ich auch an den UiManagern dran. Ja, hier hatte ich auch mehr als einen und diese schreibe ich jetzt um, dass ich eben nur noch einen habe. Anstelle von Services werde ich mir hier das Leben wohl mit Controllern vereinfachen können.

Ist das wirklich gewollt, dass ich 2* Springen für 50 Münzen kaufe und die dann nur 1 Run benutzen kann?

Ja ist es. War zuvor auch mehr für Highscore-Jagd gedacht um Sägen/Wasser besser ausweichen zu können. Letztendlich brauch ich Elemente im Spiel die Münzen wieder aus dem Spiel nehmen. Ansonsten verlieren Münzen ja jeglichen Sinn, nachdem alle Features gekauft worden sind.

Hey,
das sorgt bei mir für sofortige Demotivation. Gekauft, getestet und verschätzt, bei der 1. Säge tot. Dann wieder X Durchläufe und das gleiche Spiel…

Das Spiel Palo Alto macht es etwas anders. Da kannst du deine gekauften Features durch immer teurere Upgrades verbessern. Aber trotzdem sofort nutzen.

Sowas die Richtung ist auch geplant. Und zwar in Form von Skills. Da möchte ich aber noch etwas mehr drüber nachdenken, welche es geben wird. Bisher hab ich da nur was in Form von Sprung & Lebenspunkte im Sinn.

Generell bin ich mit den PowerUps auch nicht zufrieden. Denn wirklich attraktiv sind die eigentilch nicht (ich selber verwende die eigentlich nur, wenn ich jemand das Spiel zeige und das PowerUp erkläre).

Wird aber etwas dauern, bis ich daran etwas ändern kann. Hatte ehrlich gesagt gedacht, dass ich mittlerweile schon längst bei meinem zweiten Spiel bin. Aber in Feature Runner werde ich noch einiges an Zeit reinstecken dürfen (im Backlog alleine sind derzeit noch 30 Tasks - und auf meinem Notizblock stehen auch noch welche, die ich nicht darin erfasst habe).

So langsam wirds!

Das Spiel könnte man schon wieder spielen. Das ist gut - aber verschleiert etwas den noch anstehenden Aufwand. So bin ich seit ein paar Tagen ja schon am UiManager dran - diesen neu zu schreiben. Das macht auch echt gute Fortschritte! Nur geht halt noch recht vieles im Hauptmenü noch nicht oder noch nicht richtig.

Mittlerweile fühle ich mich auch viel wohler und sicherer mit dem Code, der Sprache und dem Framework. Das merke ich immer dann, wenn ich anfange bewehrte Konzepte zu übernehmen. So z.B. Aufgaben auf mehrere Klassen aufzuteilen. Der (NEUE!!!) UiManager sah anfangs aus wie ein Monster. Was mir aufgefallen ist: es gab sehr viel private Methoden. Daraufhin hab ich angefangen neue Klassen zu erstellen, die etwas spezialisierter sind und vom UiManager verwendet werden. So hab ich jetzt 3 Klassen die 2-3 der privaten Methoden übernommen haben. Also muss mein UiManager nur noch delegieren (was die Sache seeeehr viel aufgeräumter gestaltet).

Ich dachte mir: ja geil - und damit mach ich gleich beim GameManager weiter. Und der GameManager hat mit “Am Arsch, ich hab fast nur öffentliche Methoden!” geantwortet. Da muss ich mir mal überlegen - ob es Sinn macht da doch wieder etwas aufzubröseln. Aber da ich den GameManager eigentilch als “fertig” ansehe möchte ich da bis zum release nur noch korrekturen vornehmen und kein wirkliches refactoring machen.

Ich überlege jetzt doch den GameManager aufzusplitten. Will aber aufpassen, dass es nicht so wird wie früher. Dabei möchte ich eine AccountManager raus zu extrahieren. Ich hoffe nur, dass mein Grund ein berechtigter ist.

Der AccountManager würde dann mind. folgende Informationen enhalten:

  • Anzahl an Münzen die der Spieler besitzt
  • PowerUps die der Spieler besitzt
  • Features die der Spieler gekauft hat.
  • (Einstellungen für das Spiel???)

Denn im wesentilchen wären das die Daten die einem Account (oder Profil) zuzuordnen sind. Das würde auch die Aufgaben klarer definieren

GameManager
Seine Aufgabe ist es das laufende Spiel zu managen. Er kümmert sich um die einzelnen Zustände und kümmert sich darum, dass die Spawner Ihre Aufgabe starten/beenden.

UiManager
Kümmert sich um alle UI-Elemente. Dazu gehören das Menü und so Sachen Labels die Münzen, Distanz & Punkte anzeigen. Auch Dialoge usw. würden darüber gemanagt werden.

AccountManager (neu)
Kümmert sich um das Spielerprofil. Was auch immer der Spieler sammelt oder kauft landet letztendlich hier.


Ich denke, dass macht durchaus Sinn. Darf halt nur nicht mehr so Enden wie bei der Architektur davor.

Ok - das mit dem AccountManager hat gut funktioniert (hatte damit schon vor dem letzten Post angefangen gehabt). Ich bin ein Freund von kleinen Methoden / Klassen und da hilft das enorm. Nun wollte ich die Einstellungen nachziehen und hadere dabei aber. Gehören die wirklich in den Account? Wenn ich alles durchgehe, würde ich mich am liebsten auch wieder für einen neuen Manager entscheiden:

GameManager: Passt nicht, da die SoundEinstellungen nicht nur den Spielsound regeln sondern auch was im Hauptmenü gespielt wird. Einstellungen wirken sich also Global aus. Es würde demnach die Domain des GameManagers übersteigen.

UiManager: Passt nicht. Sagt eigentlich auch schon irgendwie der Name. Aber letztendlich hat man hier auch das gleiche Problem wie beim GameManager.

AccountManager Der AccountManager steht über GameManager und UiManager. Er wird von beiden konsumiert aber der AccountManager kennt die anderen zwei nicht einmal. Er wäre global (was gut ist) - aber für mich gehören die Einstellungen nicht wirklich zu den Account-Daten.

Letztendlich würde ich mir das ganze in etwa so vorstellen:

Der Sound behält seinen eigenen Manager (finde das macht absolut Sinn). Dieser hat dann eine Event-Basierte Verbindung zum GameManager (er muss ja wissen - ob er gerade Musik für das Hauptmenü oder das Spiel abspielen soll).

Soweit mal meine Gedanken zu dem ganzen. Nachdem ich meine Gedanken hier mal dokumentiert hab und ich es noch immer möchte, werde ichs wohl einfach tun :slight_smile:.

Und gerade eben hab ich meinen letzten LegacyManager und mein letztes LegacyModel aus dem Code geworfen. Im Editor ist mein Spiel auch lauffähig. Alle bisherigen 55 Tests sind Grün! Meine sonstigen „smoke tests“ die ich während der Entwicklung gemacht hab waren auch alle erfolgreich. Also kurz gesagt: Mein Refactoring ist im wesentlichen durch!

Ich möchte aber nicht vorschnell das release bauen. Vorher stehen noch mindestens 2 Dinge an:

  • Testen auf meinem Smartphone.
  • Code noch ein letztes mal durchgehen (da noch 2 Todos drin sind)

Ansonsten schaut mein Sprint aktuell so aus:

Hoffentlich passt alles, denn ich würde schon gerne mal wieder ein Update raushauen :slight_smile:

So langsam reizt es in den Fingern auch mal wieder ein neues Spiel zu starten. Ich hätte nicht erwartet, soviel Zeit mit Feature Runner zu verbringen. Deswegen hab ich mal eben mein Backlog durchgeschaut und alles was ich als nice-2-have ansehe auf niedrige Prio gesetzt. Was bedeutet, dass Tasks mit Prio “Niedrig” es vermutlich nicht ins fertige Spiel packen werden. Konzentrieren werde ich mich jetzt auf jeden Fall erstmal auf diese hier:

Wenn Ihr drüber schaut, dann seht ihr: auch diese bereits gefilterten Tasks werden mich vermutlich noch eine ganze Weile beschäftigen. Aber ich glaube damit das Spiel dann soweit Rund gemacht zu haben, dass man damit ein paar Stunden verbringen kann bis man alles freigeschaltet hat.

Ursprünglich hatte ich ja auch die Idee gehabt Werbung einzubauen (vom Benutzer selbst getriggert für eine Belohnung). Aber davon wird es auch keinen Task geben. Da ich wirklich gerne irgendwann mal ein neues Spiel starten möchte wird dieses (nach meinem aktuellen Plan) kostenlos und frei von Werbung bleiben.

So. Ich hab das neue Update im Play-store eingereicht und die win-version steht wie immer hier zum Download bereit:

https://1drv.ms/u/s!Av4-trM0Vnk9tybTQfqeveVSdVrr

Das nächste Update sollte dann hoffentlich nicht mehr so lange dauern ^^.

Schon lange hier nix mehr geschrieben. Also - es geht weiter wie vorher. Nur das jetzt das UI dran ist. War nicht geplant, aber auf meinem Honor 10 passt das Spiel nicht wirklich. Da ich dafür viele Anpassen müsste dachte ich mir, ziehe ich das UI-Update vor. Ich habe auch schon ein bisschen was erreicht - nämlich die Neugestaltung vom UI während des Spiels:

Ich habe mir viele Gedanken dazu gemacht und ich glaube, dass ich damit schon eine echte Verbesserung erreicht habe.

  • Der Platz wird besser genutzt
  • Das Pause-menü ist nun auch gut erreichbar bei Smartphones die keine Hardware-Keys besitzen!
  • Power-Up-Buttons sind einfacher zu erreichen
  • Möglichst freie Sicht auf das Spielgeschehen.

Noch ist diese View nicht fertig. So fehlt z.B. noch die Feature-Mechanik. Aber ich denke das ich schon sehr bald zum Hauptmenü kommen könnte :slight_smile:.