Um ein Schusssystem in das Spiel einzubauen gab es 3 Aspekte:
Projektile sind in unserem Spiel eigene Objekte. Sie haben eine Position, eine Richtung in die sie fliegen, eine Geschwindigkeit mit der sie das tun und die information ob sie einen Gegner oder den Spieler treffen sollen um friendly-fire zu vermeiden. Darüber hinaus ist gespeichert ob sie ein Ziel schon getroffen haben und falls ja ein Zeiger auf dieses Objekt.
Damit man Treffer überhaupt erkennen kann, muss man überprüfen ob sich 2 Objekte (Spieler/Gegner und Projektil)
berühren. Dies lässt sich am einfachsten durch Hitboxen umsetzen. Diese sind eine Vereinfachung der eigentlichen Form
des Objekts und in meinem Spiel als Würfel um die Position umgesetzt. Der Vorteil von Hitboxen ist offensichtlich:
statt dass jedes Körperteil auf eine Berührung mit dem Projektil geprüft wird, reicht es die 2 groben Boxen um diese
Objekte zu betrachten.
Um zu überprüfen ob sich zwei Objekte berühren habe ich folgen Test implementiert:
Ich werde das Konzept dieses Test für 2d erklären, weil sich das Prinzip in 3d nicht ändert.
Grob lässt sich sagen, dass zwei Hitboxen sich nicht berühren wenn sie mindestens auf einer
Achse getrennt sind. Das heißt man prüft einfach die Existenz einer solchen Achse.
Zum Schluss musste ich nur noch entscheiden wie das eigentliche Schießen für Spieler und Gegner
funktionieren sollte. Für den Spieler wird einfach überprüft ob die Schusstaste
gedrückt wurde. Zusätzlich habe ich einen Timer eingebaut, der nach jedem Schuss gestartet wird und ebenfalls
vom System geprüft wird um die Schussrate zu kontrollieren.
Der Gegner schießt automatisch wenn der Spieler sich in einem gewissen Bereich vor dem Gegner befindet und der
Timer des Gegners dies zulässt. Zusätzlich wurde ein Schussmuster definiert mit dem sich bestimmen lässt
wie der Gegner schießen soll. So kann dieser Beispielsweise direkt geradeaus vor sich schießen oder aber den Spieler
anvisieren und an dessen Position schießen. Da hier ebenfalls ein Pattern benutzt wurde lässt sich das Schussystem in
Zukunft leicht erweitern