1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
#ifndef E323_TASKHANDLER_H
#define E323_TASKHANDLER_H
#include <vector>
#include <map>
#include <stack>
#include "atask/Factory.h"
#include "atask/Build.h"
#include "atask/Attack.h"
#include "atask/Assist.h"
#include "atask/Merge.h"
#include "atask/Guard.h"
#include "atask/Repair.h"
struct UnitType;
class AIClasses;
class CGroup;
class CUnit;
class CTaskHandler: public ARegistrar {
public:
CTaskHandler(AIClasses *ai);
~CTaskHandler();
/* The active tasks per type */
std::map<TaskType, std::map<int, ATask*> > activeTasks;
/* Overload */
void remove(ARegistrar &task);
bool addTask(ATask* task, ATask::NPriority p = ATask::NORMAL);
/* Get active task of group */
ATask* getTask(const CGroup& group);
ATask* getTaskByTarget(int);
/* Get the group destination */
float3 getPos(const CGroup& group);
/* Update call */
void update();
/* Propagate "EnemyDestroyed" event to tasks */
void onEnemyDestroyed(int enemy, int attacker);
/* Propagate "UnitDestroyed" event to tasks */
void onUnitDestroyed(int uid, int attacker);
private:
AIClasses *ai;
/* The -to be removed- tasks */
std::stack<ATask*> obsoleteTasks;
/* The group to task table */
std::map<int, ATask*> groupToTask;
/* Task queues <queue_id, tasks> */
std::map<int, std::list<ATask*> > taskQueues;
/* Plain queue containing every task to be processed */
std::list<ATask*> processQueue;
int statsMaxActiveTasks;
int statsMaxTasks;
};
#endif
|