-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathATask.h
106 lines (85 loc) · 2.38 KB
/
ATask.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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#ifndef E323_ATASK_H
#define E323_ATASK_H
#include <list>
#include <iostream>
#include "CAI.h"
#include "ARegistrar.h"
enum TaskType {
TASK_UNDEFINED,
TASK_BUILD,
TASK_ASSIST,
TASK_ATTACK,
TASK_MERGE,
TASK_FACTORY,
TASK_REPAIR,
TASK_GUARD
};
class CGroup;
class ATask: public ARegistrar {
public:
enum NPriority { LOW = 0, NORMAL, HIGH };
ATask(AIClasses *_ai);
~ATask() {}
bool active;
// task is active
bool suspended;
// task is suspended
NPriority priority;
// task priority
int queueID;
// queue ID this task belongs to
int initFrame;
// frame when task was initialized
int validateInterval;
// validate interval in frames; 0 means validation is OFF
int nextValidateFrame;
// next frame to execute task validation
TaskType t;
// type of the task: BUILD, ASSIST, ATTACK, etc.
std::list<ATask*> assisters;
// the assisters assisting this task
std::list<CGroup*> groups;
// groups involved
//CGroup *group;
// the group involved; for Merge task it is master-group
bool isMoving;
// determine if all groups in this task are moving or not
float3 pos;
// the position to navigate too
// TODO: make it as method because for assisting task this position
// may vary depending on master task
CGroup* firstGroup() const;
/* Remove this task, unreg groups involved, and make them available again */
virtual void remove();
/* Overload */
void remove(ARegistrar &group);
/* Add a group to this task */
void addGroup(CGroup &group);
void removeGroup(CGroup &group);
/* Scan and micro for resources */
bool resourceScan();
/* Scan and micro for damaged units */
bool repairScan();
/* Scan and micro for enemy targets */
bool enemyScan(int& target);
/* Task lifetime in frames */
int lifeFrames() const;
/* Task lifetime in sec */
float lifeTime() const;
/* Update this task */
void update();
bool urgent() { return priority == HIGH; }
virtual void onUpdate() = 0;
virtual bool onValidate() { return true; }
virtual void toStream(std::ostream& out) const = 0;
virtual void onEnemyDestroyed(int enemy, int attacker) {};
virtual void onUnitDestroyed(int uid, int attacker) {};
ARegistrar::NType regtype() const { return ARegistrar::TASK; }
friend std::ostream& operator<<(std::ostream& out, const ATask& task);
protected:
AIClasses *ai;
private:
static int counter;
// task counter, used as task key; shared among all AI instances
};
#endif