-
Notifications
You must be signed in to change notification settings - Fork 39
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[GAME] Add Ai-System #128
[GAME] Add Ai-System #128
Conversation
@Lena241, könnte es sein das unser Problem daran liegt, dass wir die velocity nie mehr auf 0 setzen? Edit: Ja |
@AMatutat @Lena241 Diese PR dienen auch der Projektdokumentation. Bitte den Titel so setzen, dass er etwas ändert "führt ein AI-System ein" o.ä. ... In der Beschreibung (erster Kommentar) bitte auch im Aktiv schreiben, was beim Merge dann eingeführt wird: "Füge Klasse PS: Wobei ich diesen PR eigentlich bereits viel zu groß finde, sowas lässt sich nur schwer reviewen. Ich würde dringend empfehlen, kleinere Einheiten umzusetzen. |
Um diesen PR zum Abschluss zu bringen, habe ich die Test nach #147 ausgelagert (kommen diese Woche). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
fixes #127, fixes #21, fixes #22, fixes #141
Einfügen eines
AISystem
, welches auf alleAIComponents
agiert und den "nächsten Zug" einer AI gesteuerten Entität berechnet.Einführen eines
AIComponent
, welches eine Entität als ai gesteuert markiert und jeweils ein Verhalten für idle und ein Verhalten für Kampf hatEinführen der Funktionalen Interfaces
IIdle
undIFight
, um das verhalten im Idle bzw. Kampfmodus per Strategy-Pattern zu implementierenEinführen des funktionalen Interfaces
ITransition
welches bestimmen ob sich die Entität im Fight-Modus befinden sollBereitstellen von Funktionen in
AITools
calculateNewPath(Entity entity, float radius)
berechnet den Pfad von der Position der Entiät zu einem zufälligen Teil im übergebenen radiuscalculateNewPath(Entity from, Entity to)
berechnet den Pfad von der ersten Entität zur zweiten Entität.move(Entity entity, GraphPath<Tile> path)
setzt die Velocity der Entität so, dass diese den nächsten Schritt auf dem Pfad machtboolean playerInRange(Entity entity, float range)
prüft ob sich der Held im Radius der übergenen Entität befindetMit diesen Methoden wurden dann jeweils ein Idle und ein Fight Verhalten implementiert
RadiusWalk
Sucht sich eine Position im Radius, bewegt sich dorthin, wartet kurz, repeatMeeleAI
läuft auf den Spieler zu, wenn sich dieser in der angegeben Reichweite befindet, wird der übergeben Skill ausgeführt (aktuell nur ein Print, da wir noch keine Skills haben)RangeTransition
wechselt die Entität in den Kampfmodus, wenn sich der Held im angegeben Radius befindetToDo: