60 lines
2.0 KiB
C++
60 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include "AdvanceEvaluator.h"
|
|
#include "AdvanceExecutor.h"
|
|
#include "AttackEvaluator.h"
|
|
#include "AttackExecutor.h"
|
|
#include "DeliverScrapEvaluator.h"
|
|
#include "DeliverScrapExecutor.h"
|
|
#include "RallyEvaluator.h"
|
|
#include "RallyExecutor.h"
|
|
#include "RepairEvaluator.h"
|
|
#include "RepairExecutor.h"
|
|
#include "RetreatEvaluator.h"
|
|
#include "RetreatExecutor.h"
|
|
#include "SalvageScrapEvaluator.h"
|
|
#include "SalvageScrapExecutor.h"
|
|
#include "StandbyEvaluator.h"
|
|
#include "StandbyExecutor.h"
|
|
|
|
class BuildingSystem;
|
|
class EntityAdmin;
|
|
class ScrapSystem;
|
|
struct GameConfig;
|
|
|
|
// Orchestrates ship-behavior decision-making in three batched phases:
|
|
// 1. evaluators score each behavior and set its target data,
|
|
// 2. selectWinningBehaviors picks the highest-scoring behavior per ship,
|
|
// 3. executors run for the winning behavior, setting movement intent and
|
|
// preferred module targets.
|
|
// All world mutation (collection, healing, damage) is left to the module
|
|
// systems (SalvagerSystem, RepairSystem, CombatSystem).
|
|
class AiSystem
|
|
{
|
|
public:
|
|
explicit AiSystem(const GameConfig& config);
|
|
|
|
void tick(EntityAdmin& admin, const BuildingSystem& buildings, const ScrapSystem& scraps);
|
|
|
|
private:
|
|
void selectWinningBehaviors(EntityAdmin& admin);
|
|
|
|
AdvanceEvaluator m_advanceEvaluator;
|
|
StandbyEvaluator m_standbyEvaluator;
|
|
RallyEvaluator m_rallyEvaluator;
|
|
RetreatEvaluator m_retreatEvaluator;
|
|
AttackEvaluator m_attackEvaluator;
|
|
RepairEvaluator m_repairEvaluator;
|
|
SalvageScrapEvaluator m_salvageScrapEvaluator;
|
|
DeliverScrapEvaluator m_deliverScrapEvaluator;
|
|
|
|
AdvanceExecutor m_advanceExecutor;
|
|
StandbyExecutor m_standbyExecutor;
|
|
RallyExecutor m_rallyExecutor;
|
|
RetreatExecutor m_retreatExecutor;
|
|
AttackExecutor m_attackExecutor;
|
|
RepairExecutor m_repairExecutor;
|
|
SalvageScrapExecutor m_salvageScrapExecutor;
|
|
DeliverScrapExecutor m_deliverScrapExecutor;
|
|
};
|