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