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 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287
|
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
#ifndef _AI_AI_CALLBACK_H
#define _AI_AI_CALLBACK_H
#include <memory>
#include "IAICallback.h"
// engine header copies
#include "UnitDef.h"
#include "FeatureDef.h"
#include "WeaponDef.h"
struct SSkirmishAICallback;
namespace springLegacyAI {
/**
* The AI side wrapper over the C AI interface for IAICallback.
*/
class CAIAICallback : public IAICallback {
public:
CAIAICallback();
CAIAICallback(int skirmishAIId, const SSkirmishAICallback* sAICallback);
~CAIAICallback();
void SendTextMsg(const char* text, int zone);
void SetLastMsgPos(float3 pos);
void AddNotification(float3 pos, float3 color, float alpha);
bool SendResources(float mAmount, float eAmount, int receivingTeam);
int SendUnits(const std::vector<int>& unitIDs, int receivingTeam);
bool PosInCamera(float3 pos, float radius);
int GetCurrentFrame();
int GetMySkirmishAIId();
int GetMyTeam();
int GetMyAllyTeam();
int GetPlayerTeam(int player);
int GetTeams();
const char* GetTeamSide(int teamId);
int GetTeamAllyTeam(int teamId);
float GetTeamMetalCurrent(int teamId);
float GetTeamMetalIncome(int teamId);
float GetTeamMetalUsage(int teamId);
float GetTeamMetalStorage(int teamId);
float GetTeamEnergyCurrent(int teamId);
float GetTeamEnergyIncome(int teamId);
float GetTeamEnergyUsage(int teamId);
float GetTeamEnergyStorage(int teamId);
bool IsAllied(int firstAllyTeamId, int secondAllyTeamId);
void* CreateSharedMemArea(char* name, int size);
void ReleasedSharedMemArea(char* name);
int CreateGroup();
void EraseGroup(int groupid);
bool AddUnitToGroup(int unitid, int groupid);
bool RemoveUnitFromGroup(int unitid);
int GetUnitGroup(int unitid);
const std::vector<SCommandDescription>* GetGroupCommands(int unitid);
int GiveGroupOrder(int unitid, Command* c);
int GiveOrder(int unitid, Command* c);
const std::vector<SCommandDescription>* GetUnitCommands(int unitid);
const CCommandQueue* GetCurrentUnitCommands(int unitid);
int GetMaxUnits();
int GetUnitAiHint(int unitid);
int GetUnitTeam(int unitid);
int GetUnitAllyTeam(int unitid);
float GetUnitHealth(int unitid);
float GetUnitMaxHealth(int unitid);
float GetUnitSpeed(int unitid);
float GetUnitPower(int unitid);
float GetUnitExperience(int unitid);
float GetUnitMaxRange(int unitid);
bool IsUnitActivated (int unitid);
bool UnitBeingBuilt(int unitid);
const UnitDef* GetUnitDef(int unitid);
float3 GetUnitPos(int unitid);
float3 GetUnitVel(int unitid);
int GetBuildingFacing(int unitid);
bool IsUnitCloaked(int unitid);
bool IsUnitParalyzed(int unitid);
bool IsUnitNeutral(int unitid);
bool GetUnitResourceInfo(int unitid, UnitResourceInfo* resourceInfo);
const UnitDef* GetUnitDef(const char* unitName);
const UnitDef* GetUnitDefById(int unitDefId);
int InitPath(float3 start, float3 end, int pathType, float goalRadius);
float3 GetNextWaypoint(int pathid);
void FreePath(int pathid);
float GetPathLength(float3 start, float3 end, int pathType,
float goalRadius);
int GetEnemyUnits(int* unitIds, int unitIds_max);
int GetEnemyUnitsInRadarAndLos(int* unitIds, int unitIds_max);
int GetEnemyUnits(int* unitIds, const float3& pos, float radius, int unitIds_max);
int GetFriendlyUnits(int* unitIds, int unitIds_max);
int GetFriendlyUnits(int* unitIds, const float3& pos, float radius, int unitIds_max);
int GetNeutralUnits(int* unitIds, int unitIds_max);
int GetNeutralUnits(int* unitIds, const float3& pos, float radius, int unitIds_max);
int GetMapWidth();
int GetMapHeight();
const float* GetHeightMap();
const float* GetCornersHeightMap();
float GetMinHeight();
float GetMaxHeight();
const float* GetSlopeMap();
const unsigned short* GetLosMap();
int GetLosMapResolution();
const unsigned short* GetRadarMap();
const unsigned short* GetJammerMap();
const unsigned char* GetMetalMap();
int GetMapHash();
const char* GetMapName();
const char* GetMapHumanName();
int GetModHash();
const char* GetModName();
const char* GetModHumanName();
const char* GetModShortName();
const char* GetModVersion();
float GetElevation(float x, float z);
float GetMaxMetal() const;
float GetExtractorRadius() const;
float GetMinWind() const;
float GetMaxWind() const;
float GetCurWind() const;
float GetTidalStrength() const;
float GetGravity() const;
void LineDrawerStartPath(const float3& pos, const float* color);
void LineDrawerFinishPath();
void LineDrawerDrawLine(const float3& endPos, const float* color);
void LineDrawerDrawLineAndIcon(int cmdID, const float3& endPos,
const float* color);
void LineDrawerDrawIconAtLastPos(int cmdID);
void LineDrawerBreak(const float3& endPos, const float* color);
void LineDrawerRestart();
void LineDrawerRestartSameColor();
int CreateSplineFigure(float3 pos1, float3 pos2, float3 pos3,
float3 pos4, float width, int arrow, int lifetime, int group);
int CreateLineFigure(float3 pos1, float3 pos2, float width,
int arrow, int lifetime, int group);
void SetFigureColor(int group, float red, float green, float blue,
float alpha);
void DeleteFigureGroup(int group);
void DrawUnit(const char* name, float3 pos, float rotation,
int lifetime, int team, bool transparent, bool drawBorder,
int facing);
bool IsDebugDrawerEnabled() const;
void DebugDrawerAddGraphPoint(int, float, float);
void DebugDrawerDelGraphPoints(int, int);
void DebugDrawerSetGraphPos(float, float);
void DebugDrawerSetGraphSize(float, float);
void DebugDrawerSetGraphLineColor(int, const float3&);
void DebugDrawerSetGraphLineLabel(int, const char*);
int DebugDrawerAddOverlayTexture(const float*, int, int);
void DebugDrawerUpdateOverlayTexture(int, const float*, int, int, int, int);
void DebugDrawerDelOverlayTexture(int);
void DebugDrawerSetOverlayTexturePos(int, float, float);
void DebugDrawerSetOverlayTextureSize(int, float, float);
void DebugDrawerSetOverlayTextureLabel(int, const char*);
bool CanBuildAt(const UnitDef* unitDef, float3 pos, int facing);
float3 ClosestBuildSite(const UnitDef* unitdef, float3 pos,
float searchRadius, int minDist, int facing);
bool GetProperty(int id, int property, void* dst);
bool GetValue(int id, void* dst);
int HandleCommand(int commandId, void* data);
int GetFileSize(const char* name);
bool ReadFile(const char* name, void* buffer, int bufferLen);
int GetSelectedUnits(int* unitIds, int unitIds_max);
float3 GetMousePos();
int GetMapPoints(PointMarker* pm, int pm_sizeMax, bool includeAllies);
int GetMapLines(LineMarker* lm, int lm_sizeMax, bool includeAllies);
float GetMetal();
float GetMetalIncome();
float GetMetalUsage();
float GetMetalStorage();
float GetEnergy();
float GetEnergyIncome();
float GetEnergyUsage();
float GetEnergyStorage();
int GetFeatures(int *features, int max);
int GetFeatures(int *features, int max, const float3& pos,
float radius);
const FeatureDef* GetFeatureDef(int feature);
const FeatureDef* GetFeatureDefById(int featureDefId);
float GetFeatureHealth(int feature);
float GetFeatureReclaimLeft(int feature);
float3 GetFeaturePos(int feature);
int GetNumUnitDefs();
void GetUnitDefList(const UnitDef** list);
float GetUnitDefHeight(int def);
float GetUnitDefRadius(int def);
const WeaponDef* GetWeapon(const char* weaponName);
const WeaponDef* GetWeaponDefById(int weaponDefId);
const float3* GetStartPos();
unsigned int GetCategoryFlag(const char* categoryName);
unsigned int GetCategoriesFlag(const char* categoryNames);
void GetCategoryName(int categoryFlag, char* name, int name_sizeMax);
std::string CallLuaRules(const char* inData, int inSize);
std::string CallLuaUI(const char* inData, int inSize);
std::map<std::string, std::string> GetMyInfo();
std::map<std::string, std::string> GetMyOptionValues();
private:
int skirmishAIId;
const SSkirmishAICallback* sAICallback;
void init();
int Internal_GiveOrder(int unitId, int groupId, Command* c);
// caches
std::vector<UnitDef> unitDefs;
std::vector<FeatureDef> featureDefs;
std::vector<WeaponDef> weaponDefs;
std::vector<int> unitDefFrames;
std::vector<int> featureDefFrames;
std::vector<int> weaponDefFrames;
// the following three are needed to prevent memory leaks
std::vector< std::vector<SCommandDescription> > groupPossibleCommands;
std::vector< std::vector<SCommandDescription> > unitPossibleCommands;
std::vector< std::unique_ptr<CCommandQueue> > unitCurrentCommandQueues;
float3 startPos;
static size_t numClbInstances;
static std::vector<float> heightMap;
static std::vector<float> cornersHeightMap;
static std::vector<float> slopeMap;
static std::vector<unsigned short> losMap;
static std::vector<unsigned short> radarMap;
static std::vector<unsigned short> jammerMap;
static std::vector<unsigned char> metalMap;
};
} // namespace springLegacyAI
#endif // _AI_AI_CALLBACK_H
|