CLua.h 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. #include "global.h"
  2. #include "lstate.h"
  3. #include <set>
  4. #include <map>
  5. class CLua;
  6. struct SDL_Surface;
  7. class CGObjectInstance;
  8. class CGameInfo;
  9. class CGHeroInstance;
  10. class CScriptCallback;
  11. class SComponent;
  12. class CSelectableComponent;
  13. enum ESLan{UNDEF=-1,CPP,ERM,LUA};
  14. class CObjectScript
  15. {
  16. public:
  17. int owner, language;
  18. std::string filename;
  19. int getOwner(){return owner;} //255 - neutral / 254 - not flaggable
  20. CObjectScript();
  21. virtual ~CObjectScript();
  22. //functions to be called in script
  23. //virtual void init(){};
  24. virtual void newObject(CGObjectInstance *os){};
  25. virtual void onHeroVisit(CGObjectInstance *os, int heroID){};
  26. virtual void onHeroLeave(CGObjectInstance *os, int heroID){};
  27. virtual std::string hoverText(CGObjectInstance *os){return "";};
  28. virtual void newTurn (){};
  29. //TODO: implement functions below:
  30. virtual void equipArtefact(int HID, int AID, int slot, bool putOn){}; //putOn==0 means that artifact is taken off
  31. virtual void battleStart(int phase){}; //phase==0 - very start, before initialization of battle; phase==1 - just before battle starts
  32. virtual void battleNewTurn (int turn){}; //turn==-1 is for tactic stage
  33. //virtual void battleAction (int type,int destination, int stack, int owner, int){};
  34. //virtual void mouseClick (down,left,screen?, pos??){};
  35. virtual void heroLevelUp (int HID){}; //add possibility of changing available sec. skills
  36. };
  37. class CScript
  38. {
  39. public:
  40. CScript();
  41. virtual ~CScript();
  42. };
  43. class IChosen
  44. {
  45. public:
  46. virtual void chosen(int which)=0;
  47. };
  48. class CLua :public CScript
  49. {
  50. protected:
  51. lua_State * is; /// tez niebezpieczne!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (ale chwilowo okielznane)
  52. bool opened;
  53. public:
  54. CLua(std::string initpath);
  55. void open(std::string initpath);
  56. void registerCLuaCallback();
  57. CLua();
  58. virtual ~CLua();
  59. void findF(std::string fname);
  60. void findF2(std::string fname);
  61. void findFS(std::string fname);
  62. friend void initGameState(CGameInfo * cgi);
  63. };
  64. class CLuaObjectScript : public CLua, public CObjectScript
  65. {
  66. public:
  67. CLuaObjectScript(std::string filename);
  68. virtual ~CLuaObjectScript();
  69. static std::string genFN(std::string base, int ID);
  70. void init();
  71. void newObject(CGObjectInstance *os);
  72. void onHeroVisit(CGObjectInstance *os, int heroID);
  73. std::string hoverText(CGObjectInstance *os);
  74. friend void initGameState(CGameInfo * cgi);
  75. };
  76. class CCPPObjectScript: public CObjectScript
  77. {
  78. protected:
  79. CScriptCallback * cb;
  80. CCPPObjectScript(CScriptCallback * CB){cb=CB;};
  81. public:
  82. virtual std::vector<int> yourObjects()=0; //returns IDs of objects which are handled by script
  83. virtual std::string hoverText(CGObjectInstance *os);
  84. };
  85. class CVisitableOPH : public CCPPObjectScript //once per hero
  86. {
  87. CVisitableOPH(CScriptCallback * CB):CCPPObjectScript(CB){};
  88. std::map<CGObjectInstance*,std::set<int> > visitors;
  89. void onNAHeroVisit(CGObjectInstance *os, int heroID, bool alreadyVisited);
  90. void newObject(CGObjectInstance *os);
  91. void onHeroVisit(CGObjectInstance *os, int heroID);
  92. std::vector<int> yourObjects(); //returns IDs of objects which are handled by script
  93. std::string hoverText(CGObjectInstance *os);
  94. friend void initGameState(CGameInfo * cgi);
  95. };
  96. class CVisitableOPW : public CCPPObjectScript //once per week
  97. {
  98. CVisitableOPW(CScriptCallback * CB):CCPPObjectScript(CB){};
  99. std::map<CGObjectInstance*,bool> visited;
  100. void onNAHeroVisit(CGObjectInstance *os, int heroID, bool alreadyVisited);
  101. void newObject(CGObjectInstance *os);
  102. void onHeroVisit(CGObjectInstance *os, int heroID);
  103. std::vector<int> yourObjects(); //returns IDs of objects which are handled by script
  104. std::string hoverText(CGObjectInstance *os);
  105. void newTurn ();
  106. friend void initGameState(CGameInfo * cgi);
  107. };
  108. class CMines : public CCPPObjectScript //flaggable, and giving resource at each day
  109. {
  110. CMines(CScriptCallback * CB):CCPPObjectScript(CB){};
  111. std::vector<CGObjectInstance*> ourObjs;
  112. void newObject(CGObjectInstance *os);
  113. void onHeroVisit(CGObjectInstance *os, int heroID);
  114. std::vector<int> yourObjects(); //returns IDs of objects which are handled by script
  115. std::string hoverText(CGObjectInstance *os);
  116. void newTurn ();
  117. friend void initGameState(CGameInfo * cgi);
  118. };
  119. class CPickable : public CCPPObjectScript, public IChosen //pickable - resources, artifacts, etc
  120. {
  121. std::vector<CSelectableComponent*> tempStore;
  122. int player;
  123. CPickable(CScriptCallback * CB):CCPPObjectScript(CB){};
  124. void chosen(int which);
  125. void newObject(CGObjectInstance *os);
  126. void onHeroVisit(CGObjectInstance *os, int heroID);
  127. std::string hoverText(CGObjectInstance *os);
  128. std::vector<int> yourObjects(); //returns IDs of objects which are handled by script
  129. friend void initGameState(CGameInfo * cgi);
  130. };
  131. class CTownScript : public CCPPObjectScript //pickable - resources, artifacts, etc
  132. {
  133. CTownScript(CScriptCallback * CB):CCPPObjectScript(CB){};
  134. void onHeroVisit(CGObjectInstance *os, int heroID);
  135. void onHeroLeave(CGObjectInstance *os, int heroID);
  136. std::string hoverText(CGObjectInstance *os);
  137. std::vector<int> yourObjects(); //returns IDs of objects which are handled by script
  138. friend void initGameState(CGameInfo * cgi);
  139. };