CLua.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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. //TODO: implement functions below:
  26. virtual void equipArtefact(int HID, int AID, int slot, bool putOn){}; //putOn==0 means that artifact is taken off
  27. virtual void battleStart(int phase){}; //phase==0 - very start, before initialization of battle; phase==1 - just before battle starts
  28. virtual void battleNewTurn (int turn){}; //turn==-1 is for tactic stage
  29. //virtual void battleAction (int type,int destination, int stack, int owner, int){};
  30. //virtual void mouseClick (down,left,screen?, pos??){};
  31. virtual void heroLevelUp (int HID){}; //add possibility of changing available sec. skills
  32. };
  33. class CScript
  34. {
  35. public:
  36. CScript();
  37. virtual ~CScript();
  38. };
  39. class CLua :public CScript
  40. {
  41. protected:
  42. lua_State * is; /// tez niebezpieczne!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (ale chwilowo okielznane)
  43. bool opened;
  44. public:
  45. CLua(std::string initpath);
  46. void open(std::string initpath);
  47. void registerCLuaCallback();
  48. CLua();
  49. virtual ~CLua();
  50. void findF(std::string fname);
  51. void findF2(std::string fname);
  52. void findFS(std::string fname);
  53. friend void initGameState(CGameInfo * cgi);
  54. };
  55. class CLuaObjectScript : public CLua, public CObjectScript
  56. {
  57. public:
  58. CLuaObjectScript(std::string filename);
  59. virtual ~CLuaObjectScript();
  60. static std::string genFN(std::string base, int ID);
  61. void init();
  62. void newObject(CGObjectInstance *os);
  63. void onHeroVisit(CGObjectInstance *os, int heroID);
  64. std::string hoverText(CGObjectInstance *os);
  65. friend void initGameState(CGameInfo * cgi);
  66. };
  67. class CCPPObjectScript: public CObjectScript
  68. {
  69. protected:
  70. CScriptCallback * cb;
  71. CCPPObjectScript(CScriptCallback * CB){cb=CB;};
  72. public:
  73. virtual std::vector<int> yourObjects()=0; //returns IDs of objects which are handled by script
  74. virtual std::string hoverText(CGObjectInstance *os);
  75. };
  76. class CVisitableOPH : public CCPPObjectScript //once per hero
  77. {
  78. CVisitableOPH(CScriptCallback * CB):CCPPObjectScript(CB){};
  79. std::map<CGObjectInstance*,std::set<int> > visitors;
  80. void onNAHeroVisit(CGObjectInstance *os, int heroID, bool alreadyVisited);
  81. void newObject(CGObjectInstance *os);
  82. void onHeroVisit(CGObjectInstance *os, int heroID);
  83. std::vector<int> yourObjects(); //returns IDs of objects which are handled by script
  84. std::string hoverText(CGObjectInstance *os);
  85. friend void initGameState(CGameInfo * cgi);
  86. };
  87. struct SComponent
  88. {
  89. enum Etype
  90. {
  91. primskill, secskill, resource, creature, artifact
  92. } type;
  93. int subtype;
  94. int val;
  95. std::string description; //r-click
  96. std::string subtitle;
  97. SComponent(Etype Type, int Subtype, int Val);
  98. //SComponent(const & SComponent r);
  99. SDL_Surface * getImg();
  100. };