#include "BehaviorTargeting.h" #include "EntityAdmin.h" #include "FactionComponent.h" #include "HealthComponent.h" #include "HqProxyComponent.h" #include "ModuleOwnerComponent.h" #include "PositionComponent.h" #include "SalvageCargoComponent.h" #include "ShipIdentityComponent.h" #include "StationBodyComponent.h" std::vector buildRepairables(EntityAdmin& admin) { std::vector repairables; admin.forEach( [&repairables](entt::entity e, const ShipIdentityComponent& /*si*/, const PositionComponent& pos, const FactionComponent& f, const HealthComponent& h) { repairables.push_back({e, pos.value, f.isEnemy, true, h.hp, h.maxHp}); }); admin.forEach( [&repairables](entt::entity e, const StationBodyComponent& /*sb*/, const PositionComponent& pos, const FactionComponent& f, const HealthComponent& h) { repairables.push_back({e, pos.value, f.isEnemy, false, h.hp, h.maxHp}); }); return repairables; } std::vector buildCombatants(EntityAdmin& admin) { std::vector combatants; admin.forEach( [&combatants](entt::entity e, const PositionComponent& pos, const FactionComponent& f, const ShipIdentityComponent& /*si*/) { combatants.push_back({e, pos.value, f.isEnemy, false}); }); admin.forEach( [&combatants](entt::entity e, const PositionComponent& pos, const FactionComponent& f, const StationBodyComponent& /*sb*/) { combatants.push_back({e, pos.value, f.isEnemy, true}); }); admin.forEach( [&combatants](entt::entity e, const PositionComponent& pos, const FactionComponent& f, const HqProxyComponent& /*hq*/) { combatants.push_back({e, pos.value, f.isEnemy, true}); }); return combatants; } std::unordered_map buildCargoByShip(EntityAdmin& admin) { std::unordered_map cargoByShip; admin.forEach( [&cargoByShip](entt::entity /*ce*/, const SalvageCargoComponent& c, const ModuleOwnerComponent& o) { CargoState& agg = cargoByShip[o.owner]; agg.current += c.current; agg.capacity += c.capacity; }); return cargoByShip; } bool isCargoFull(const CargoState& cargo) { return cargo.capacity > 0 && cargo.current >= cargo.capacity; }