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
|
#ifndef MILITARY_H
#define MILITARY_H
#include <map>
#include <vector>
#include <stack>
#include "ARegistrar.h"
#include "headers/HEngine.h"
#include "headers/Defines.h"
class CUnit;
class CGroup;
class AIClasses;
enum MilitaryGroupBehaviour {
SCOUT,
ENGAGE,
BOMBER,
HARASS,
AIRFIGHTER
};
class CMilitary: public ARegistrar {
public:
CMilitary(AIClasses *ai);
/* Overload */
void remove(ARegistrar& group);
/* Add a unit, place it in the correct group */
bool addUnit(CUnit& unit);
/* Returns a fresh CGroup instance */
CGroup* requestGroup(MilitaryGroupBehaviour type);
/* Update call-in */
void update(int groupsize);
int idleScoutGroupsNum();
bool switchDebugMode();
void onEnemyDestroyed(int enemy, int attacker);
protected:
AIClasses* ai;
private:
unitCategory allowedEnvCats;
/* Current group per factory <factory, CGroup*> */
std::map<int, CGroup*> assemblingGroups;
/* The ingame scout groups */
std::map<int, CGroup*> activeScoutGroups;
/* The ingame attack groups */
std::map<int, CGroup*> activeAttackGroups;
/* The ingame bomber groups */
std::map<int, CGroup*> activeBomberGroups;
std::map<int, CGroup*> activeAirFighterGroups;
std::map<MilitaryGroupBehaviour, std::map<int, CGroup*>* > groups;
/* Mergable groups */
std::map<int,CGroup*> mergeGroups;
bool drawTasks;
/* Request a unit for building using a roulette wheel system */
unitCategory requestUnit(unitCategory basecat = 0);
bool isAssemblingGroup(CGroup *group);
void visualizeTasks(CGroup*);
};
#endif
|