#include #include #include #include "../Core/System.h" #include "../Core/EMousePress.h" #include "../Core/EMouseRelease.h" #include "../Core/EMouseMove.h" #include "../Core/ConfigFile.h" #include "../Input/EInputCommand.h" #include "../Rendering/IRenderer.h" #include "../Rendering/EPicking.h" #include "../Core/EFileDropped.h" #include "../Rendering/RenderQueueFactory.h" class EditorSystem : public ImpureSystem { public: EditorSystem(EventBroker* eventBroker, IRenderer* renderer); virtual void Update(World* world, double dt) override; private: IRenderer* m_Renderer; World* m_World = nullptr; bool m_Enabled; bool m_Visible; std::vector m_PickingQueue; enum class WidgetMode { None, Translate, Rotate, Scale } m_WidgetMode = WidgetMode::None; enum class WidgetSpace { Local, Global } m_WidgetSpace = WidgetSpace::Global; EntityID m_Widget = 0; EntityID m_WidgetX = 0; EntityID m_WidgetPlaneX = 0; EntityID m_WidgetY = 0; EntityID m_WidgetPlaneY = 0; EntityID m_WidgetZ = 0; EntityID m_WidgetPlaneZ = 0; EntityID m_WidgetOrigin = 0; glm::vec3 m_WidgetCurrentAxis; float m_WidgetPickingDepth = 0.f; EntityID m_Selection = 0; EntityID m_LastSelection = 0; glm::vec3 m_Position; std::string m_LastDroppedFile; EventRelay m_EInputCommand; bool OnInputCommand(const Events::InputCommand& e); EventRelay m_EMouseRelease; bool OnMouseRelease(const Events::MouseRelease& e); EventRelay m_EMousePress; bool OnMousePress(const Events::MousePress& e); EventRelay m_EMouseMove; bool OnMouseMove(const Events::MouseMove& e); EventRelay m_EPicking; bool OnPicking(const Events::Picking& e); EventRelay m_EFileDropped; bool OnFileDropped(const Events::FileDropped& e); void updateWidget(); void setWidgetMode(WidgetMode newMode); void setWidgetSpace(WidgetSpace space); void drawUI(World* world, double dt); bool createDeleteButton(std::string componentType); void changeParent(EntityID entity, EntityID newParent); };