CLua.h 4.0 KB

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