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
|
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
#ifndef SELECTED_UNITS_AI_H
#define SELECTED_UNITS_AI_H
#include "Sim/Units/CommandAI/Command.h"
#include "System/float3.h"
#include <map>
#include <set>
class CUnit;
/// Handling commands given to the currently selected group of units.
class CSelectedUnitsAI {
public:
/* set<int> selUnits;
void AddUnit(int unit); (And include update() in game.cpp to call every frame)
void RemoveUnit(int unit);
*/
CSelectedUnitsAI();
void GiveCommandNet(Command& c, int player);
float3 centerPos;
float3 rightPos;
int sumLength;
float avgLength;
float frontLength;
float addSpace;
private:
void CalculateGroupData(int player, bool queueing);
void MakeFrontMove(Command* c, int player);
void CreateUnitOrder(std::multimap<float, int>& out, int player);
float3 MoveToPos(int unit, float3 nextCornerPos, float3 dir, Command* command, std::vector<std::pair<int, Command> >* frontcmds, bool* newline);
void AddUnitSetMaxSpeedCommand(CUnit* unit, unsigned char options);
void AddGroupSetMaxSpeedCommand(CUnit* unit, unsigned char options);
void SelectAttack(const Command& cmd, int player);
void SelectCircleUnits(const float3& pos, float radius, std::vector<int>& units, int player);
void SelectRectangleUnits(const float3& pos0, const float3& pos1, std::vector<int>& units, int player);
float3 LastQueuePosition(const CUnit* unit);
float3 minCoor, maxCoor, centerCoor;
float minMaxSpeed;
float3 frontDir;
float3 sideDir;
float columnDist;
float lineDist;
int numColumns;
};
extern CSelectedUnitsAI selectedUnitsAI;
#endif // SELECTED_UNITS_AI_H
|