1 #ifndef KAIK_UNITHANDLER_HDR 2 #define KAIK_UNITHANDLER_HDR 3 4 #include <vector> 5 6 namespace springLegacyAI { 7 struct UnitDef; 8 } // namespace springLegacyAI 9 10 class CMetalMaker; 11 struct AIClasses; 12 struct BuilderTracker; 13 struct BuildTask; 14 struct TaskPlan; 15 struct UpgradeTask; 16 17 class CUnitHandler { 18 public: 19 CR_DECLARE(CUnitHandler) 20 21 CUnitHandler(AIClasses* ai); 22 ~CUnitHandler(); 23 24 void UnitCreated(int unit); 25 void UnitDestroyed(int unit); 26 27 void IdleUnitUpdate(int); 28 void IdleUnitAdd(int unit, int); 29 void IdleUnitRemove(int unit); 30 int GetIU(UnitCategory); 31 int NumIdleUnits(UnitCategory); 32 // used to track stuck workers 33 void UnitMoveFailed(int unit); 34 35 void MMakerAdd(int unit); 36 void MMakerRemove(int unit); 37 void MMakerUpdate(int); 38 39 void BuildTaskCreate(int id); 40 void BuildTaskRemove(int id); 41 void BuildTaskRemove(BuilderTracker* builderTracker); 42 bool BuildTaskAddBuilder (int builder, UnitCategory); 43 void BuildTaskAddBuilder(BuildTask* buildTask, BuilderTracker* builderTracker); 44 BuildTask* GetBuildTask(int buildTaskId); 45 BuildTask* BuildTaskExist(float3 pos, const UnitDef* builtdef); 46 47 void TaskPlanCreate(int builder, float3 pos, const UnitDef* builtdef); 48 void TaskPlanRemove(BuilderTracker* builderTracker); 49 bool TaskPlanExist(float3 pos, const UnitDef* builtdef); 50 void TaskPlanAdd(TaskPlan* taskPlan, BuilderTracker* builderTracker); 51 TaskPlan* GetTaskPlan(int taskPlanId); 52 53 BuilderTracker* GetBuilderTracker(int builder); 54 55 void NukeSiloAdd(int siloID); 56 void NukeSiloRemove(int siloID); 57 void MetalExtractorAdd(int extractorID); 58 void MetalExtractorRemove(int extractorID); 59 int GetOldestMetalExtractor(void); 60 61 void FactoryAdd(int id); 62 void FactoryRemove(int id); 63 bool FactoryBuilderAdd(int builder); 64 bool FactoryBuilderAdd(BuilderTracker* builderTracker); 65 void FactoryBuilderRemove(BuilderTracker* builderTracker); 66 67 UpgradeTask* CreateUpgradeTask(int oldBuildingID, const float3& oldBuildingPos, const UnitDef* newBuildingDef); 68 UpgradeTask* FindUpgradeTask(int oldBuildingID); 69 void RemoveUpgradeTask(UpgradeTask* task); 70 bool AddUpgradeTaskBuilder(UpgradeTask* task, int builderID); 71 void UpdateUpgradeTasks(int frame); 72 73 // use this to tell the tracker that the builder is on a reclaim job 74 void BuilderReclaimOrder(int builderId, const float3&); 75 76 bool VerifyOrder(BuilderTracker* builderTracker); 77 void ClearOrder(BuilderTracker* builderTracker, bool reportError); 78 void DecodeOrder(BuilderTracker* builderTracker, bool reportError); 79 80 std::vector<std::list<int> > IdleUnits; 81 std::vector<std::list<BuildTask> > BuildTasks; 82 std::vector<std::list<TaskPlan> > TaskPlans; 83 std::vector<std::list<int> > AllUnitsByCat; 84 std::vector<std::list<int> > AllUnitsByType; 85 86 std::list<Factory> Factories; 87 std::list<NukeSilo> NukeSilos; 88 std::vector<MetalExtractor> MetalExtractors; 89 90 std::list<integer2> Limbo; 91 std::list<BuilderTracker*> BuilderTrackers; 92 93 CMetalMaker* metalMaker; 94 95 int lastCapturedUnitFrame; 96 int lastCapturedUnitID; 97 98 private: 99 AIClasses* ai; 100 int taskPlanCounter; 101 102 std::map<int, UpgradeTask*> upgradeTasks; 103 }; 104 105 106 #endif 107