forked from Error323/E323AI
-
Notifications
You must be signed in to change notification settings - Fork 1
/
CTaskHandler.h
63 lines (50 loc) · 1.41 KB
/
CTaskHandler.h
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