Projektile sind in Warman allgegenwaertig. Feuerbaelle, Pfeile, Kettenblitze, Windstoesze, feindliche Fernkampfangriffe, Fallendarts. Sie alle laufen durch dasselbe System: einen gepoolten ProjectileManager, der Spawning, Bewegung, Kollision und Aufraeumen verwaltet.
Der Projektil-Lebenszyklus
Jeder Projektiltyp ist in einem globalen Array registriert, indiziert durch ein ProjectileID-Enum. Wenn das Spiel einen Feuerball braucht, fragt es den Manager nach einem Projektil dieser ID. Der Manager prueft zuerst seinen Typ-spezifischen Objekt-Pool, gibt es eine ruhende Instanz, wird sie reaktiviert. Wenn nicht, wird eine neue instanziiert. In jedem Fall tritt das Projektil in die Aktivliste ein und beginnt zu ticken.
Jeden Tick aktualisiert der Manager alle aktiven Projektile: Bewegung entlang ihres Pfads, Kollisionspruefung gegen gueltige Ziele im Raum und Despawn-Timer-Verwaltung. Projektile, die fertig sind (durch Treffer, Ablauf oder Wandkollision), werden zur Wiederverwendung in den Pool zurueckgegeben.
Pfad-Manipulatoren
Die Basisklasse definiert zwei Methoden: SetupStorage (einmal beim Spawn aufgerufen zur Zustandsinitialisierung) und ManipulatePath (jeden Tick aufgerufen zur Positionsaktualisierung). Der Zustand wird in Float- und Vektor-Arrays auf einem Wrapper-Objekt gespeichert, nicht auf dem Manipulator selbst, das bedeutet, eine einzelne ScriptableObject-Instanz kann von Tausenden Projektilen ohne Konflikte geteilt werden.
Die eingebauten Manipulatoren umfassen DirectionPathManipulator (gerade Linie, skaliert mit dem Projektilgeschwindigkeits-Stat des Besitzers), SinePathManipulator (Vorwaertsbewegung kombiniert mit seitlicher Sinus-Oszillation) und CirclePathManipulator (Orbitalbewegung um einen Mittelpunkt, der optional dem Besitzer folgen kann, mit konfigurierbarer Expansionsgeschwindigkeit).
Schaden und Kollision
Jedes Projektil traegt ein ProjectileCreateData-Asset, das seine Schadensgruppe, Durchschlagsmenge, Despawn-Zeit und optionale Aufpralleffekte definiert. Kollision nutzt die eigenen WarmanPhysics-Radiuspruefungen. Keine Unity-Physik beteiligt. Der Kollisionsradius des Projektils wird gegen alle gueltigen DamageTarget-Entitaeten im aktuellen Raum geprueft, gefiltert nach Hoehenunterschied.
Durchschlag ist simpel: Jedes Projektil zaehlt getroffene Ziele. Erreicht die Trefferanzahl das Durchschlagslimit, endet das Projektil. Ein Durchschlagswert von 255 (Byte-Maximum) bedeutet unendlichen Durchschlag.
Projektilgruppen
Skills beim Despawn
Ein maechiges Feature: Projektile koennen beim Despawn einen Skill casten. Eine SkillOnDespawn-Referenz auf den Erstellungsdaten feuert, wenn das Projektil ablaeuft oder eine Wand trifft. Das erzeugt explodierende Pfeile, sich teilende Bolzen oder verbleibende Effekte. Der Despawn-Skill flieszt durch das normale Skill-Cast-System, bekommt also alle Modifikator-Interaktionen und Proc-Chain-Moeglichkeiten.