celx.h
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:2k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // celx.h
  2. // 
  3. // Copyright (C) 2003, Chris Laurel <claurel@shatters.net>
  4. //
  5. // Lua script extensions for Celestia
  6. //
  7. // This program is free software; you can redistribute it and/or
  8. // modify it under the terms of the GNU General Public License
  9. // as published by the Free Software Foundation; either version 2
  10. // of the License, or (at your option) any later version.
  11. #ifndef _CELESTIA_CELX_H_
  12. #define _CELESTIA_CELX_H_
  13. #include <iostream>
  14. #include <string>
  15. #ifndef LUA_VER
  16. #define LUA_VER 0x050000
  17. #endif
  18. #if LUA_VER >= 0x050100
  19. #include "lua.hpp"
  20. #else
  21. extern "C" {
  22. #include "lua.h"
  23. #include "lualib.h"
  24. }
  25. #endif
  26. #include <celutil/timer.h>
  27. #include <celengine/observer.h>
  28. class CelestiaCore;
  29. class View;
  30. class LuaState
  31. {
  32. public:
  33.     LuaState();
  34.     ~LuaState();
  35.     lua_State* getState() const;
  36.     int loadScript(std::istream&, const std::string& streamname);
  37.     int loadScript(const std::string&);
  38.     bool init(CelestiaCore*);
  39.     std::string getErrorMessage();
  40.     bool createThread();
  41.     int resume();
  42.     bool tick(double);
  43.     void cleanup();
  44.     bool isAlive() const;
  45.     bool timesliceExpired();
  46.     void requestIO();
  47.     bool charEntered(const char*);
  48.     double getTime() const;
  49.     int screenshotCount;
  50.     double timeout;
  51.     // Celx script event handlers
  52.     bool handleKeyEvent(const char* key);
  53.     bool handleMouseButtonEvent(float x, float y, int button, bool down);
  54.     bool handleTickEvent(double dt);
  55.     // Lua hook handling
  56.     void setLuaPath(const string& s);
  57.     void allowSystemAccess();
  58.     void allowLuaPackageAccess();
  59.     void setLuaHookEventHandlerEnabled(bool);
  60.     bool callLuaHook(void* obj, const char* method);
  61.     bool callLuaHook(void* obj, const char* method, const char* keyName);
  62.     bool callLuaHook(void* obj, const char* method, float x, float y);
  63.     bool callLuaHook(void* obj, const char* method, float x, float y, int b);
  64.     bool callLuaHook(void* obj, const char* method, double dt);
  65.     
  66.     enum IOMode {
  67.         NoIO = 1,
  68.         Asking = 2,
  69.         IOAllowed = 4,
  70.         IODenied = 8
  71.     };
  72. private:
  73.     lua_State* state;
  74.     lua_State* costate; // coroutine stack
  75.     bool alive;
  76.     Timer* timer;
  77.     double scriptAwakenTime;
  78.     IOMode ioMode;
  79.     bool eventHandlerEnabled;
  80. };
  81. View* getViewByObserver(CelestiaCore*, Observer*);
  82. void getObservers(CelestiaCore*, std::vector<Observer*>&);
  83. #endif // _CELESTIA_CELX_H_