CCallback.h 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. #ifndef CCALLBACK_H
  2. #define CCALLBACK_H
  3. #include "global.h"
  4. #ifdef _WIN32
  5. #include "tchar.h"
  6. #else
  7. #include "tchar_amigaos4.h"
  8. #endif
  9. #include "CGameState.h"
  10. class CGHeroInstance;
  11. class CGameState;
  12. struct CPath;
  13. class CGObjectInstance;
  14. class CArmedInstance;
  15. class SComponent;
  16. class IChosen;
  17. class CSelectableComponent;
  18. struct BattleAction;
  19. class CGTownInstance;
  20. struct StartInfo;
  21. class CStack;
  22. struct lua_State;
  23. class CClient;
  24. //structure gathering info about upgrade possibilites
  25. struct UpgradeInfo
  26. {
  27. int oldID; //creature to be upgraded
  28. std::vector<int> newID; //possible upgrades
  29. std::vector<std::set<std::pair<int,int> > > cost; // cost[upgrade_serial] -> set of pairs<resource_ID,resource_amount>
  30. UpgradeInfo(){oldID = -1;};
  31. };
  32. class ICallback
  33. {
  34. public:
  35. virtual bool moveHero(int ID, CPath * path, int idtype, int pathType=0)=0;//idtype: 0 - position in vector of heroes (of that player); 1 - ID of hero
  36. //pathType: 0 - nodes are manifestation pos, 1 - nodes are object pos
  37. virtual int swapCreatures(const CGObjectInstance *s1, const CGObjectInstance *s2, int p1, int p2)=0;//swaps creatures between two posiibly different garrisons // TODO: AI-unsafe code - fix it!
  38. virtual int mergeStacks(const CGObjectInstance *s1, const CGObjectInstance *s2, int p1, int p2)=0;//joins first stack tothe second (creatures must be same type)
  39. virtual int splitStack(const CGObjectInstance *s1, const CGObjectInstance *s2, int p1, int p2, int val)=0;//split creatures from the first stack
  40. virtual bool dismissHero(const CGHeroInstance * hero)=0; //dismisses diven hero; true - successfuly, false - not successfuly
  41. virtual bool swapArifacts(const CGHeroInstance * hero1, bool worn1, int pos1, const CGHeroInstance * hero2, bool worn2, int pos2)=0; //swaps artifacts between two given heroes
  42. virtual void recruitCreatures(const CGObjectInstance *obj, ui32 ID, ui32 amount)=0;
  43. virtual bool dismissCreature(const CArmedInstance *obj, int stackPos)=0;
  44. virtual bool upgradeCreature(const CArmedInstance *obj, int stackPos, int newID=-1)=0; //if newID==-1 then best possible upgrade will be made
  45. virtual void endTurn()=0;
  46. //get info
  47. virtual bool verifyPath(CPath * path, bool blockSea)=0;
  48. virtual int getDate(int mode=0)=0; //mode=0 - total days in game, mode=1 - day of week, mode=2 - current week, mode=3 - current month
  49. virtual std::vector< std::vector< std::vector<unsigned char> > > & getVisibilityMap()=0; //returns visibility map (TODO: make it const)
  50. virtual const CGHeroInstance * getHeroInfo(int player, int val, bool mode)=0; //mode = 0 -> val = serial; mode = 1 -> val = ID
  51. virtual int getResourceAmount(int type)=0;
  52. virtual int howManyHeroes()=0;
  53. virtual const CGTownInstance * getTownInfo(int val, bool mode)=0; //mode = 0 -> val = serial; mode = 1 -> val = ID
  54. virtual int howManyTowns()=0;
  55. virtual std::vector < std::string > getObjDescriptions(int3 pos)=0; //returns descriptions of objects at pos in order from the lowest to the highest
  56. virtual std::vector < const CGHeroInstance *> getHeroesInfo(bool onlyOur=true)=0;
  57. virtual bool isVisible(int3 pos)=0;
  58. virtual int getMyColor()=0;
  59. virtual int getMySerial()=0;
  60. virtual int getHeroSerial(const CGHeroInstance * hero)=0;
  61. virtual const CCreatureSet* getGarrison(const CGObjectInstance *obj)=0;
  62. virtual UpgradeInfo getUpgradeInfo(const CArmedInstance *obj, int stackPos)=0;
  63. virtual const StartInfo * getStartInfo()=0;
  64. //battle
  65. virtual int battleGetBattlefieldType()=0; // 1. sand/shore 2. sand/mesas 3. dirt/birches 4. dirt/hills 5. dirt/pines 6. grass/hills 7. grass/pines 8. lava 9. magic plains 10. snow/mountains 11. snow/trees 12. subterranean 13. swamp/trees 14. fiery fields 15. rock lands 16. magic clouds 17. lucid pools 18. holy ground 19. clover field 20. evil fog 21. "favourable winds" text on magic plains background 22. cursed ground 23. rough 24. ship to ship 25. ship
  66. virtual int battleGetObstaclesAtTile(int tile)=0; //returns bitfield
  67. virtual int battleGetStack(int pos)=0; //returns ID of stack on the tile
  68. virtual CStack * battleGetStackByID(int ID)=0; //returns stack info by given ID
  69. virtual CStack * battleGetStackByPos(int pos)=0; //returns stack info by given pos
  70. virtual int battleGetPos(int stack)=0; //returns position (tile ID) of stack
  71. //virtual int battleMakeAction(BattleAction* action)=0;//perform action with an active stack (or custom action)
  72. virtual std::map<int, CStack> battleGetStacks()=0; //returns stacks on battlefield
  73. virtual CCreature battleGetCreature(int number)=0; //returns type of creature by given number of stack
  74. //virtual bool battleMoveCreature(int ID, int dest)=0; //moves creature with id ID to dest if possible
  75. virtual std::vector<int> battleGetAvailableHexes(int ID)=0; //reutrns numbers of hexes reachable by creature with id ID
  76. virtual bool battleIsStackMine(int ID)=0; //returns true if stack with id ID belongs to caller
  77. virtual bool battleCanShoot(int ID, int dest)=0; //returns true if unit with id ID can shoot to dest
  78. };
  79. struct HeroMoveDetails
  80. {
  81. HeroMoveDetails(){};
  82. HeroMoveDetails(int3 Src, int3 Dst, CGHeroInstance*Ho);
  83. int3 src, dst; //source and destination points
  84. CGHeroInstance * ho; //object instance of this hero
  85. int owner;
  86. bool successful;
  87. };
  88. class CCallback : public ICallback
  89. {
  90. private:
  91. CCallback(CGameState * GS, int Player, CClient *C):gs(GS),player(Player),cl(C){};
  92. CGameState * gs;
  93. CClient *cl;
  94. bool isVisible(int3 pos, int Player);
  95. protected:
  96. int player;
  97. public:
  98. //commands
  99. bool moveHero(int ID, CPath * path, int idtype, int pathType=0);//idtype: 0 - position in vector of heroes (of that player); 1 - ID of hero
  100. //pathType: 0 - nodes are manifestation pos, 1 - nodes are object pos
  101. void selectionMade(int selection, int asker);
  102. int swapCreatures(const CGObjectInstance *s1, const CGObjectInstance *s2, int p1, int p2);
  103. int mergeStacks(const CGObjectInstance *s1, const CGObjectInstance *s2, int p1, int p2); //first goes to the second
  104. int splitStack(const CGObjectInstance *s1, const CGObjectInstance *s2, int p1, int p2, int val);
  105. bool dismissHero(const CGHeroInstance * hero);
  106. bool swapArifacts(const CGHeroInstance * hero1, bool worn1, int pos1, const CGHeroInstance * hero2, bool worn2, int pos2);
  107. bool buildBuilding(const CGTownInstance *town, si32 buildingID);
  108. void recruitCreatures(const CGObjectInstance *obj, ui32 ID, ui32 amount);
  109. bool dismissCreature(const CArmedInstance *obj, int stackPos);
  110. bool upgradeCreature(const CArmedInstance *obj, int stackPos, int newID=-1);
  111. void endTurn();
  112. //get info
  113. bool verifyPath(CPath * path, bool blockSea);
  114. int getDate(int mode=0); //mode=0 - total days in game, mode=1 - day of week, mode=2 - current week, mode=3 - current month
  115. std::vector< std::vector< std::vector<unsigned char> > > & getVisibilityMap(); //returns visibility map (TODO: make it const)
  116. const CGHeroInstance * getHeroInfo(int player, int val, bool mode); //mode = 0 -> val = serial; mode = 1 -> val = ID
  117. int getResourceAmount(int type);
  118. std::vector<si32> getResourceAmount();
  119. int howManyHeroes();
  120. const CGTownInstance * getTownInfo(int val, bool mode); //mode = 0 -> val = serial; mode = 1 -> val = ID
  121. std::vector < const CGTownInstance *> getTownsInfo(bool onlyOur=true);
  122. int howManyTowns();
  123. std::vector < std::string > getObjDescriptions(int3 pos); //returns descriptions of objects at pos in order from the lowest to the highest
  124. std::vector < const CGHeroInstance *> getHeroesInfo(bool onlyOur=true);
  125. bool isVisible(int3 pos);
  126. int getMyColor();
  127. int getHeroSerial(const CGHeroInstance * hero);
  128. int getMySerial();
  129. const CCreatureSet* getGarrison(const CGObjectInstance *obj);
  130. UpgradeInfo getUpgradeInfo(const CArmedInstance *obj, int stackPos);
  131. virtual const StartInfo * getStartInfo();
  132. //battle
  133. int battleGetBattlefieldType(); // 1. sand/shore 2. sand/mesas 3. dirt/birches 4. dirt/hills 5. dirt/pines 6. grass/hills 7. grass/pines 8. lava 9. magic plains 10. snow/mountains 11. snow/trees 12. subterranean 13. swamp/trees 14. fiery fields 15. rock lands 16. magic clouds 17. lucid pools 18. holy ground 19. clover field 20. evil fog 21. "favourable winds" text on magic plains background 22. cursed ground 23. rough 24. ship to ship 25. ship
  134. int battleGetObstaclesAtTile(int tile); //returns bitfield
  135. int battleGetStack(int pos); //returns ID of stack on the tile
  136. CStack * battleGetStackByID(int ID); //returns stack info by given ID
  137. CStack * battleGetStackByPos(int pos); //returns stack info by given pos
  138. int battleGetPos(int stack); //returns position (tile ID) of stack
  139. //int battleMakeAction(BattleAction* action);//perform action with an active stack (or custom action)
  140. std::map<int, CStack> battleGetStacks(); //returns stacks on battlefield
  141. CCreature battleGetCreature(int number); //returns type of creature by given number of stack
  142. //bool battleMoveCreature(int ID, int dest); //moves creature with id ID to dest if possible
  143. std::vector<int> battleGetAvailableHexes(int ID); //reutrns numbers of hexes reachable by creature with id ID
  144. bool battleIsStackMine(int ID); //returns true if stack with id ID belongs to caller
  145. bool battleCanShoot(int ID, int dest); //returns true if unit with id ID can shoot to dest
  146. //friends
  147. friend class CClient;
  148. #ifndef __GNUC__
  149. friend int _tmain(int argc, _TCHAR* argv[]);
  150. #else
  151. friend int main(int argc, _TCHAR* argv[]);
  152. #endif
  153. };
  154. #endif //CCALLBACK_H