#ifndef ANAGLYM_H #define ANAGLYM_H #include #include #include #include "Video.h" #include "OdeWorld/OdeWorld.h" #include "wfobj/WFObj.hh" #define FILENAME_SAFE_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-" class Engine { public: class Object { public: Object() { body = 0; } WFObj * wfobj; GLuint display_list; std::vector geoms; dBodyID body; void draw(); void loadPhy(const std::string & path, bool static_data = false); void setPosition(double x, double y, double z); void getPosition(double * x, double * y, double * z); }; Engine(); ~Engine(); std::string locateResource(const std::string & shortname); Video * getVideo() { return m_video; } bool load(const char * program); void run(); void reportErrors(int status); OdeWorld & getWorld() { return m_world; } int addObject(WFObj * obj); Object * getObject(int id); void doPhysics(); /* lua services */ int startFrame(lua_State * L); int endFrame(lua_State * L); int setCamera(lua_State * L); protected: static Uint32 updateCallback(Uint32 interval, void * param); static SDL_Event userEvent; Uint32 updateCallback(Uint32 interval); void registerLibraries(); bool fileExists(const std::string & path); void update(); lua_State * m_luaState; Video * m_video; std::string m_program_path; OdeWorld m_world; std::map m_objects; int m_next_object_index; GLdouble m_eye[3]; GLdouble m_center[3]; GLdouble m_up[3]; bool m_drawing; }; extern Engine * g_engine; #endif