CLua.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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 std::string hoverText(CGObjectInstance *os){return "";};
  27. virtual void newTurn (){};
  28. //TODO: implement functions below:
  29. virtual void equipArtefact(int HID, int AID, int slot, bool putOn){}; //putOn==0 means that artifact is taken off
  30. virtual void battleStart(int phase){}; //phase==0 - very start, before initialization of battle; phase==1 - just before battle starts
  31. virtual void battleNewTurn (int turn){}; //turn==-1 is for tactic stage
  32. //virtual void battleAction (int type,int destination, int stack, int owner, int){};
  33. //virtual void mouseClick (down,left,screen?, pos??){};
  34. virtual void heroLevelUp (int HID){}; //add possibility of changing available sec. skills
  35. };
  36. class CScript
  37. {
  38. public:
  39. CScript();
  40. virtual ~CScript();
  41. };
  42. class IChosen
  43. {
  44. public:
  45. virtual void chosen(int which)=0;
  46. };
  47. class CLua :public CScript
  48. {
  49. protected:
  50. lua_State * is; /// tez niebezpieczne!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (ale chwilowo okielznane)
  51. bool opened;
  52. public:
  53. CLua(std::string initpath);
  54. void open(std::string initpath);
  55. void registerCLuaCallback();
  56. CLua();
  57. virtual ~CLua();
  58. void findF(std::string fname);
  59. void findF2(std::string fname);
  60. void findFS(std::string fname);
  61. friend void initGameState(CGameInfo * cgi);
  62. };
  63. class CLuaObjectScript : public CLua, public CObjectScript
  64. {
  65. public:
  66. CLuaObjectScript(std::string filename);
  67. virtual ~CLuaObjectScript();
  68. static std::string genFN(std::string base, int ID);
  69. void init();
  70. void newObject(CGObjectInstance *os);
  71. void onHeroVisit(CGObjectInstance *os, int heroID);
  72. std::string hoverText(CGObjectInstance *os);
  73. friend void initGameState(CGameInfo * cgi);
  74. };
  75. class CCPPObjectScript: public CObjectScript
  76. {
  77. protected:
  78. CScriptCallback * cb;
  79. CCPPObjectScript(CScriptCallback * CB){cb=CB;};
  80. public:
  81. virtual std::vector<int> yourObjects()=0; //returns IDs of objects which are handled by script
  82. virtual std::string hoverText(CGObjectInstance *os);
  83. };
  84. class CVisitableOPH : public CCPPObjectScript //once per hero
  85. {
  86. CVisitableOPH(CScriptCallback * CB):CCPPObjectScript(CB){};
  87. std::map<CGObjectInstance*,std::set<int> > visitors;
  88. void onNAHeroVisit(CGObjectInstance *os, int heroID, bool alreadyVisited);
  89. void newObject(CGObjectInstance *os);
  90. void onHeroVisit(CGObjectInstance *os, int heroID);
  91. std::vector<int> yourObjects(); //returns IDs of objects which are handled by script
  92. std::string hoverText(CGObjectInstance *os);
  93. friend void initGameState(CGameInfo * cgi);
  94. };
  95. class CVisitableOPW : public CCPPObjectScript //once per week
  96. {
  97. CVisitableOPW(CScriptCallback * CB):CCPPObjectScript(CB){};
  98. std::map<CGObjectInstance*,bool> visited;
  99. void onNAHeroVisit(CGObjectInstance *os, int heroID, bool alreadyVisited);
  100. void newObject(CGObjectInstance *os);
  101. void onHeroVisit(CGObjectInstance *os, int heroID);
  102. std::vector<int> yourObjects(); //returns IDs of objects which are handled by script
  103. std::string hoverText(CGObjectInstance *os);
  104. void newTurn ();
  105. friend void initGameState(CGameInfo * cgi);
  106. };
  107. class CMines : public CCPPObjectScript //flaggable, and giving resource at each day
  108. {
  109. CMines(CScriptCallback * CB):CCPPObjectScript(CB){};
  110. std::vector<CGObjectInstance*> ourObjs;
  111. void newObject(CGObjectInstance *os);
  112. void onHeroVisit(CGObjectInstance *os, int heroID);
  113. std::vector<int> yourObjects(); //returns IDs of objects which are handled by script
  114. std::string hoverText(CGObjectInstance *os);
  115. void newTurn ();
  116. friend void initGameState(CGameInfo * cgi);
  117. };
  118. class CPickable : public CCPPObjectScript, public IChosen //pickable - resources, artifacts, etc
  119. {
  120. std::vector<CSelectableComponent*> tempStore;
  121. int player;
  122. CPickable(CScriptCallback * CB):CCPPObjectScript(CB){};
  123. void chosen(int which);
  124. void newObject(CGObjectInstance *os);
  125. void onHeroVisit(CGObjectInstance *os, int heroID);
  126. std::string hoverText(CGObjectInstance *os);
  127. std::vector<int> yourObjects(); //returns IDs of objects which are handled by script
  128. friend void initGameState(CGameInfo * cgi);
  129. };