Andere Teile der Kampfsequenz Überarbeitung:
Die getesteten Teile der letzten Iteration wurden jetzt mit Schleifen aufgebaut, so besteht die Möglichkeit eine beliebige Anzahl an Projektilen zu erschaffen.
Die Anzahl der Projektile ist jetzt nur eine Einzelne Variable welche verändert werden muss um es zu erweitern.
Das Projektil wird je nach Anzahl dupliziert, und die Unterobjekte werde ungenannt für die spätere Erkennung.
Es war ein bisschen verwirrend die Nummerierung hinzubekommen, aber Try-and-Error hat hier viel geholfen.

Die Projektile und das Schild wurden vergrößert, um das Spiel etwas Fairer zu gestalten,, allerdings ist beim Balancen noch viel Arbeit.
Die Länge der Projektile wurde verändert, damit man sie auch noch von der Seite abfangen kann, und das Sprite welches darübergelegt wird, ist auch länger.
Die Hitbox wird etwas über das Sprite hinaus gehen, um dem Spieler etwas entgegen zu kommen.

Jetzt wird auch nurnoch ein Projektil benötigt, welches via Code dupliziert wird.
Das Spielfeld selbst ist auch eine Area, diese ist bisher ungenutzt, ich plane damit die Win-Condition zu definieren, das kommt aber in folgenden Posts.
Die Timer sind die Einzelnen Funktionen der Projektile.

Die Funktionen können später auch von außerhalb der Szene gerufen werden, momentan werden sie im _ready(): geteste.
Es gibt eine Funktion welche die hälfte der karte startet, also die oberen Projektile dann die unteren, und eine für eine aufeinanderfolgende Startfolge.

Das Bild Oben ist abfolgeDelayStart() welches jedem einzelnen Projektil einen verzögerten Start gibt.
Das Bild nebenan ist abfolgeHalbeKarte() welches die Halbe Karte auf einmal startet, ich plane noch weitere Variationen, aber das ist ersmal ein rudimentäres Set.

Die Abfolgen hatte ihre eigenen Hürden, ich hatte eine Weile gebracht, um herauszufinden wie ich die einzelnen Projektile starte, und danach auch laufen lasse, die Antwort ist eigentlich ganz simpel.
Ich setzte einen Bool-Wert in einem Array auf true wenn der Timer abgelaufen ist, und lasse es Laufen wenn es einmal auf true war.
Hierfür erstelle ich das Array für die Nummer der gewünschten Projektile mit dem Bool-Wert false.
und passe das Movement der Projektile an, sofern wishDelay gewünscht ist. Ich starte im Movement Code auch das Originale Projektil, und dann die Duplikate, ich wette es gibt auch eine Elegantere Lösung, aber es tut was es soll.
wishDelay wird automatisch auf true gesetzt wenn die Funktion für die Abfolge ausgeführt wird, ich steuere die Abfolgen mit Verschiedenen Variablen welche Wahr oder Falsch sein müssen, um später Kombinationen zu ermöglichen.
Kombination des Timers und Starters:
func afolgeDelayStart(timerSekunde:float):
wishDelay = true
$delayStartTimer.wait_time = timerSekunde
$delayStartTimer.start()
func _on_delay_start_timer_timeout():
projektilStatus[delayStartCount-1] = true
if delayStartCount < kreisNummerPunkte:
delayStartCount +=1
else: pass
Array füllen:
func _setStatusFalse():
for i in kreisNummerPunkte:
projektilStatus.append(false)
Teil des Movements welcher Delay behandelt:
elif wishDelay == true:
projectileDirection1 = (kreisMitte - $Spielfeld/Projektil1.global_position).normalized()
$Spielfeld/Projektil1.global_position += projectileDirection1 * projektileSpeed * delta
# Überprüfe, ob das Ziel erreicht wurde
if $Spielfeld/Projektil1.global_position.distance_to(kreisMitte) < 5.0:
# Ziel erreicht, zurücksetzen zur Ausgangsposition
$Spielfeld/Projektil1.global_position = kreisPunkte[0]
for i in projektilNamen.size():
if projektilStatus[i] == false:
pass
elif projektilStatus[i] == true:
var projectileDirectionDynamisch = (kreisMitte - projektilNamen[i].global_position).normalized()
projektilNamen[i].global_position += projectileDirectionDynamisch * projektileSpeed * delta
projektilStatus[i] = true