#ifndef ENGINE_H #define ENGINE_H // Forward declaration of class UserInterface class UserInterface; class View; #include #include #include #include #include "EventHandler.h" #include "extlib/CGUITTFont.h" #include enum SceneItemID { SIID_LIGHT = 1, SIID_CAMERA = 2, SIID_MODEL = 3 }; class Engine { friend class UserInterface; friend class View; private: std::wstring m_NextPath; irr::IrrlichtDevice* m_Device; irr::video::IVideoDriver* m_Driver; irr::scene::ISceneManager* m_Scene; irr::scene::IAnimatedMeshSceneNode* m_LoadedMesh; irr::scene::ILightSceneNode* m_SceneLight; irr::gui::CGUITTFont* m_AxisFont; irr::gui::CGUITTFace* m_AxisFontFace; irr::core::dimension2d m_WindowSize; bool m_RunEngine; EventHandler* m_EventHandler; UserInterface* m_UserInterface; View* m_View; void setupScene(); void drawAxisLines(); void drawBackground(); void checkResize(); irr::gui::IGUIEnvironment* getGUIEnvironment() const; irr::s32 getNumberOfVertices(); bool isPlaying; irr::u32 worldFPS; irr::u32 prevFPS; std::vector textureExtensions; // Making materials in contructor or setupScene causes segfault at // `m_Driver->setMaterial(*lineX);` in // `Engine::drawAxisLines` for unknown reason: // irr::video::SMaterial *lineX; // irr::video::SMaterial *lineY; // irr::video::SMaterial *lineZ; irr::core::vector3df m_CamPos; irr::core::vector3df m_CamTarget; std::wstring m_FontPath = L"ClearSansRegular.ttf"; // core::stringc has implicit conversion to io::path bool KeyIsDown[irr::KEY_KEY_CODES_COUNT]; irr::s32 keyState[irr::KEY_KEY_CODES_COUNT]; irr::s32 LMouseState, RMouseState; public: std::wstring m_PreviousPath; std::wstring m_PrevTexturePath; Engine(); ~Engine(); void run(); void loadMesh(const std::wstring& fileName); void reloadMesh(); void reloadTexture(); bool loadTexture(const std::wstring& fileName); void setMeshDisplayMode(bool wireframe = false, bool lighting = true, bool textureInterpolation = true); bool isAnimating(); void playAnimation(); void pauseAnimation(); void toggleAnimation(); void setAnimationFPS(irr::u32 animationFPS); void setZUp(bool zUp); irr::u32 animationFPS(); }; #endif // ENGINE_H