#pragma once #include #include #include #include #include "GameConfig.h" #include "ShipLayout.h" #include "entt/entity/entity.hpp" class EntityAdmin; class ShipSystem { public: ShipSystem(const GameConfig& config, EntityAdmin& admin); entt::entity spawn(const std::string& schematicId, int level, QVector2D position, bool isEnemy = false, const std::optional& layout = std::nullopt, const std::map& moduleLevelOverrides = {}); void despawn(entt::entity entity); // Reset all movement intents to inactive before behavior systems run. void clearMovementIntents(); // Set the rally point that newly spawned player combat ships will loiter at. void setRallyPoint(QVector2D point); // Release all gathered player combat ships to advance toward the enemy. void triggerRallyDeparture(); // Controls whether newly spawned player ships receive a RetreatBehavior. The // balancing tool disables this so arena fights stay symmetric and aggressive // (REQ-BAL-SIM-AI); the main game keeps it enabled (REQ-SHP-RETREAT). void setRetreatEnabled(bool enabled); private: const ShipDef* findShipDef(const std::string& schematicId) const; const ModuleDef* findModuleDef(const std::string& id) const; const GameConfig& m_config; EntityAdmin& m_admin; QVector2D m_rallyPoint; bool m_retreatEnabled = true; };