#include "EntityAdmin.h" #include "DespawnAtComponent.h" #include "DynamicBodyComponent.h" #include "FacingComponent.h" #include "FactionComponent.h" #include "HealthComponent.h" #include "HqProxyComponent.h" #include "MovementIntentComponent.h" #include "PositionComponent.h" #include "DebrisComponent.h" #include "SensorRangeComponent.h" #include "ShipIdentityComponent.h" #include "StationBodyComponent.h" entt::entity EntityAdmin::createEntity() { return m_registry.create(); } entt::entity EntityAdmin::createModuleEntity() { return m_registry.create(); } bool EntityAdmin::isValid(entt::entity entity) const { return m_registry.valid(entity); } void EntityAdmin::destroy(entt::entity entity) { m_registry.destroy(entity); } void EntityAdmin::clear() { m_registry.clear(); } entt::entity EntityAdmin::spawnShip(QVector2D position, float hp, float maxHp, float maxSpeed_tpt, float mainAcceleration_tptt, float maneuveringAcceleration_tptt, float maxAngularAcceleration_rptt, float maxRotationSpeed_rpt, float sensorRange_tiles, const std::string& schematicId, bool isEnemy) { entt::entity entity = createEntity(); add(entity, PositionComponent{position}); add(entity, HealthComponent{hp, maxHp}); add(entity, FactionComponent{isEnemy}); add(entity, FacingComponent{0.0f}); add(entity, DynamicBodyComponent{ maxSpeed_tpt, mainAcceleration_tptt, maneuveringAcceleration_tptt, maxAngularAcceleration_rptt, maxRotationSpeed_rpt, QVector2D(0.0f, 0.0f), // velocity_tpt 0.0f, // angularVelocity_rpt QVector2D(0.0f, 0.0f), // linearAcceleration_tptt 0.0f // angularAcceleration_rptt }); add(entity, SensorRangeComponent{sensorRange_tiles}); add(entity, ShipIdentityComponent{schematicId}); add(entity, MovementIntentComponent{0, QVector2D(0.0f, 0.0f)}); return entity; } entt::entity EntityAdmin::spawnStation(QPoint anchor, QSize footprint, const std::vector& bodyCells, float hp, float maxHp, bool isEnemy) { entt::entity entity = createEntity(); QVector2D center(anchor.x() + footprint.width() / 2.0f, anchor.y() + footprint.height() / 2.0f); add(entity, PositionComponent{center}); add(entity, HealthComponent{hp, maxHp}); add(entity, FactionComponent{isEnemy}); add(entity, StationBodyComponent{anchor, footprint, bodyCells}); return entity; } entt::entity EntityAdmin::spawnDebris(QVector2D position, int amount, Tick despawnAt) { entt::entity entity = createEntity(); add(entity, PositionComponent{position}); add(entity, DebrisComponent{amount}); add(entity, DespawnAtComponent{despawnAt}); return entity; } entt::entity EntityAdmin::spawnHqProxy(QVector2D position, float hp, float maxHp) { entt::entity entity = createEntity(); add(entity, PositionComponent{position}); add(entity, HealthComponent{hp, maxHp}); add(entity, FactionComponent{false}); add(entity); return entity; }