1 #pragma once
2 
3 class CSpringGame;
4 
5 #include "../../TestAI.h"
6 #include "SpringMap.h"
7 #include "SpringUnit.h"
8 #include "SpringUnitType.h"
9 #include "SpringMapFeature.h"
10 
11 class CSpringGame : public IGame {
12 public:
13 	CSpringGame(springai::OOAICallback* callback);
14 	virtual ~CSpringGame();
15 
16 	virtual IMap* Map();
17 
18 	virtual std::string GameID();
19 	virtual void SendToConsole(std::string message);
20 	virtual int Frame();
21 	virtual bool IsPaused();
22 
23 	virtual IUnitType* GetTypeByName(std::string typeName);
24 
25 	virtual const char* ConfigFolderPath();
26 	virtual std::string ReadFile(std::string filename);
27 	virtual bool LocatePath(std::string& filename);
28 
29 	virtual int GetTeamID();
30 
31 	virtual bool HasEnemies();
32 	virtual bool HasFriendlies();
33 	virtual std::vector<IUnit*> GetEnemies();
34 	virtual std::vector<IUnit*> GetFriendlies();
35 	virtual std::vector<IUnit*> GetUnits();
36 
37 	virtual CSpringUnit* CreateUnit(int id);
38 	virtual CSpringUnit* CreateUnit(springai::Unit* unit, bool addToVectors = true);
39 	virtual void DestroyUnit(int id);
40 	virtual CSpringUnit* GetUnitById(int id);
41 
42 	virtual IAI* Me();
43 
44 	virtual std::string GameName();
45 
46 	virtual bool FileExists(std::string filename);
47 
48 	virtual void AddMarker(Position p,std::string label);
49 
50 	virtual std::string SendToContent(std::string data);
51 
52 
53 	virtual SResourceData GetResource(int idx);
54 	virtual int GetResourceCount();
55 	virtual SResourceData GetResourceByName(std::string name);
56 
57 	IUnitType* ToIUnitType(springai::UnitDef* def);
58 
59 	virtual void UpdateUnits();
60 
61 	virtual IUnit* getUnitByID( int unit_id );
62 	/*virtual void removeUnit( IUnit* dead_unit );*/
63 protected:
64 	//helper functions to managing unit vectors.
65 	//vectors are updated at maximum once per frame.
66 	//if unit vectors are required, best call "UpdateUnits" before.
67 	virtual void FillUnitVector(std::vector<IUnit*>& target, std::vector<springai::Unit*> source);
68 
69 	CSpringMap* map;
70 	springai::OOAICallback* callback;
71 	CTestAI* ai;
72 	std::map<std::string,CSpringUnitType*> definitions;
73 	springai::DataDirs* datadirs;
74 	springai::Economy* economy;
75 	std::vector<springai::Resource*> resources;
76 	springai::Game* game;
77 	std::map<int,CSpringUnit*> aliveUnits;
78 	std::vector<IUnit*> friendlyUnits;
79 	std::vector<IUnit*> teamUnits;
80 	std::vector<IUnit*> enemyUnits;
81 	int lastUnitUpdate;
82 };
83