63 class EditorOutputWindow;
64 class EditorOptionsWindow;
65 class EditorGeneralWidget;
66 class EditorWindowManager;
67 class EditorPropertyWindow;
68 class EditorSceneViewWindow;
69 class EditorSolutionExplorerWindow;
70 class EditorRenderPassExecutor;
71 class EditorEditorComponent;
94 class SceneViewWindow;
95 class PlatformContext;
96 class ApplicationOutput;
97 class NodePreviewWindow;
98 class ContentExplorerWindow;
99 class SolutionExplorerWindow;
100 class SceneEnvironmentProbePool;
194 void idle() noexcept;
197 void drawScreenOverlay( const
Camera* camera, const
Rect<
I32>& targetViewport, GFX::CommandBuffer& bufferInOut, GFX::MemoryBarrierCommand& memCmdInOut ) const;
199 void toggle(
bool state );
205 [[nodiscard]]
bool Undo() const;
208 [[nodiscard]]
bool Redo() const;
215 [[nodiscard]]
bool hasFocus() const;
220 [[nodiscard]] inline
bool inEditMode() const noexcept;
239 [[nodiscard]]
bool onKeyDown( const Input::KeyEvent& key ) override;
241 [[nodiscard]]
bool onKeyUp( const Input::KeyEvent& key ) override;
243 [[nodiscard]]
bool mouseMoved( const Input::MouseMoveEvent& arg ) override;
251 [[nodiscard]]
bool joystickAxisMoved( const Input::JoystickEvent& arg ) noexcept override;
252 [[nodiscard]]
bool joystickPovMoved( const Input::JoystickEvent& arg ) noexcept override;
253 [[nodiscard]]
bool joystickBallMoved( const Input::JoystickEvent& arg ) noexcept override;
254 [[nodiscard]]
bool joystickAddRemove( const Input::JoystickEvent& arg ) noexcept override;
255 [[nodiscard]]
bool joystickRemap( const Input::JoystickEvent& arg ) noexcept override;
256 [[nodiscard]]
bool onTextEvent( const Input::TextEvent& arg ) override;
262 [[nodiscard]] inline
bool isInit() const noexcept;
263 [[nodiscard]]
bool render( );
280 void getCommandBuffer( GFX::CommandBuffer& bufferInOut, GFX::MemoryBarrierCommand& memCmdInOut );
301 void renderDrawList( ImDrawData* pDrawData,
I64 bufferGUID, const
Rect<
I32>& targetViewport,
bool editorPass, GFX::CommandBuffer& bufferInOut, GFX::MemoryBarrierCommand& memCmdInOut );
360 eastl::fixed_vector<std::pair<I64, GenericVertexData_ptr>, 5,
true>
_imguiBuffers;
397 editor.
renderDrawList( pDrawData, windowGUID, targetViewport,
false, bufferInOut, memCmdInOut );
407 return editor._gizmo->enabled();
412 editor._gizmo->enable( state );
417 editor.copyPlayerCamToEditorCam();
422 editor.setEditorCamLookAt( eye, fwd, up );
427 editor.setEditorCameraSpeed( speed );
432 editor._stepQueue = steps;
437 editor._simulationPaused = state;
442 return editor._nodePreviewBGColour;
453 editor.selectedCamera( camera );
458 return editor.selectedCamera();
463 return editor._gizmo->enabled();
468 editor._gizmo->enable( state );
493 return editor.lockSolutionExplorer();
507 editor.selectedCamera( camera );
512 return editor.selectedCamera();
517 editor.lockSolutionExplorer( state );
533 return editor._currentTheme;
538 editor._currentTheme = newTheme;
543 return editor._externalTextEditorPath;
558 editor.toggleMemoryEditor( state );
563 return editor._showMemoryEditor;
568 return editor._showSampleWindow;
573 return editor._showOptionsWindow;
578 return editor._recentSceneList;
583 return editor.getSceneList();
588 return editor.getProjectList();
593 return editor.openProject( projectID );
603 editor.setTransformSettings( settings );
608 return editor.getTransformSettings();
623 return editor._gizmo->enable( state );
628 return editor._gizmo->enabled();
633 return editor.sceneGizmoEnabled( state );
638 return editor.sceneGizmoEnabled();
643 return editor.saveItemCount();
648 return editor.unsavedSceneChanges();
653 return editor.isDefaultScene();
658 editor.unsavedSceneChanges(
true );
668 return editor.
switchScene( scene, createIfNotExists );
673 editor._memoryEditorData = data;
678 return editor.
modalTextureView( modalName, tex, dimensions, preserveAspect, useModal );
688 return *editor._imguiContexts[
to_base( type )];
693 return *editor._imguiContexts[
to_base( type )];
698 return editor.
addComponent( selections, newComponentType );
718 return editor._externalTextEditorPath;
723 editor._previewNode = previewNode;
745 editor.
postRender( stage, cameraSnapshot, target, bufferInOut, memCmdInOut );
static void onRemoveComponent(const Editor &editor, const EditorComponent &comp)
static void renderDrawList(Editor &editor, ImDrawData *pDrawData, const I64 windowGUID, const Rect< I32 > &targetViewport, GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
static ImGuiStyleEnum getTheme(const Editor &editor) noexcept
static void setTheme(Editor &editor, const ImGuiStyleEnum newTheme) noexcept
static void externalTextEditorPath(Editor &editor, const ResourcePath &path)
static const ResourcePath & externalTextEditorPath(const Editor &editor) noexcept
static void setSelectedCamera(Editor &editor, Camera *camera) noexcept
static void saveNode(const Editor &editor, const SceneGraphNode *targetNode)
static Camera * getSelectedCamera(const Editor &editor) noexcept
static void lockSolutionExplorer(Editor &editor, const bool state) noexcept
static void getCommandBuffer(Editor &editor, GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
static void postRender(Editor &editor, const RenderStage stage, const CameraSnapshot &cameraSnapshot, const RenderTargetID target, GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
static void editorEnableGizmo(const Editor &editor, const bool state) noexcept
static void copyPlayerCamToEditorCam(Editor &editor) noexcept
static void setEditorCameraSpeed(Editor &editor, const vec3< F32 > &speed) noexcept
static FColour3 & nodePreviewBGColour(Editor &editor) noexcept
static bool editorEnabledGizmo(const Editor &editor) noexcept
static void simulationPaused(Editor &editor, const bool state) noexcept
static void editorStepQueue(Editor &editor, const U32 steps) noexcept
static void setEditorCamLookAt(Editor &editor, const vec3< F32 > &eye, const vec3< F32 > &fwd, const vec3< F32 > &up) noexcept
static void queueRemoveNode(Editor &editor, const I64 nodeGUID)
static BoundingSphere teleportToNode(const Editor &editor, Camera *camera, const SceneGraphNode *targetNode)
static void saveNode(const Editor &editor, const SceneGraphNode *targetNode)
static void setSelectedCamera(Editor &editor, Camera *camera) noexcept
static bool lockSolutionExplorer(const Editor &editor)
static bool isNodeInView(const Editor &editor, const SceneGraphNode &node)
static void loadNode(const Editor &editor, SceneGraphNode *targetNode)
static void editorEnableGizmo(const Editor &editor, const bool state) noexcept
static const Camera * getSelectedCamera(const Editor &editor) noexcept
static bool editorEnableGizmo(const Editor &editor) noexcept
void selectionChangeCallback(PlayerIndex idx, const vector< SceneGraphNode * > &nodes) const
bool joystickAxisMoved(const Input::JoystickEvent &arg) noexcept override
Handle< ShaderProgram > _infiniteGridProgram
void createFontTexture(F32 DPIScaleFactor)
Destroys the old font, if any, before loading the new one.
PipelineDescriptor _axisGizmoPipelineDesc
bool inEditMode() const noexcept
size_t UndoStackSize() const noexcept
DisplayWindow * _mainWindow
void showStatusMessage(const string &message, F32 durationMS, bool error) const
void registerUndoEntry(const UndoEntry< T > &entry)
void updateFocusState(ImVec2 mousePos)
bool mouseButtonReleased(const Input::MouseButtonEvent &arg) override
Mouse button released: return true if input was consumed.
const RenderTargetHandle & getNodePreviewTarget() const noexcept
EditorOptionsWindow_uptr _optionsWindow
UndoManager_uptr _undoManager
static ImGuiViewport * FindViewportByPlatformHandle(ImGuiContext *context, const DisplayWindow *window)
SceneGraphNode * _previewNode
bool mouseMoved(const Input::MouseMoveEvent &arg) override
Mouse moved: return true if input was consumed.
bool onKeyDown(const Input::KeyEvent &key) override
Key pressed: return true if input was consumed.
bool wantsKeyboard() const noexcept
std::pair< bufferPtr, size_t > _memoryEditorData
eastl::fixed_vector< std::pair< I64, GenericVertexData_ptr >, 5, true > _imguiBuffers
RenderTargetHandle _nodePreviewRTHandle
bool addComponent(SceneGraphNode *selection, ComponentType newComponentType) const
bool joystickButtonPressed(const Input::JoystickEvent &arg) noexcept override
Joystick or Gamepad: return true if input was consumed.
bool joystickRemap(const Input::JoystickEvent &arg) noexcept override
friend class Attorney::EditorOutputWindow
void onChangeScene(Scene *newScene)
bool modalModelSpawn(Handle< Mesh > mesh, bool quick, const vec3< F32 > &scale=VECTOR3_UNIT, const vec3< F32 > &position=VECTOR3_ZERO)
Returns true if the model was queued.
U32 stepQueue() const noexcept
void onWindowSizeChange(const SizeChangeParams ¶ms)
bool init(const vec2< U16 > renderResolution)
bool modalTextureView(std::string_view modalName, Handle< Texture > tex, vec2< F32 > dimensions, bool preserveAspect, bool useModal) const
Returns true if the window was closed.
std::array< ImGuiContext *, to_base(ImGuiContextType::COUNT)> _imguiContexts
void drawScreenOverlay(const Camera *camera, const Rect< I32 > &targetViewport, GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut) const
Render any editor specific element that needs to be part of the scene (e.g. Control Gizmo)
bool mouseButtonPressed(const Input::MouseButtonEvent &arg) override
Mouse button pressed: return true if input was consumed.
void renderModelSpawnModal()
void renderDrawList(ImDrawData *pDrawData, I64 bufferGUID, const Rect< I32 > &targetViewport, bool editorPass, GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
LightPool & getActiveLightPool() const
bool joystickAddRemove(const Input::JoystickEvent &arg) noexcept override
Time::ProfileTimer & _editorUpdateTimer
U32 saveItemCount() const noexcept
StatusBar_uptr _statusBar
void postRender(RenderStage stage, const CameraSnapshot &cameraSnapshot, RenderTargetID target, GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
bool spawnGeometry(Handle< Mesh > mesh, const vec3< F32 > &scale, const vec3< F32 > &position, const vec3< Angle::DEGREES< F32 > > &rotation, std::string_view name) const
Return true if the model was spawned as a scene node.
bool isInit() const noexcept
Pipeline * _editorPipeline
const ProjectIDs & getProjectList() const noexcept
void infiniteGridScale(const F32 value) noexcept
bool joystickBallMoved(const Input::JoystickEvent &arg) noexcept override
void copyPlayerCamToEditorCam() noexcept
ImGuiStyleEnum _currentTheme
void update(U64 deltaTimeUS)
void setTransformSettings(const TransformSettings &settings) const noexcept
std::array< std::unique_ptr< DockedWindow >, to_base(WindowType::COUNT)> _dockedWindows
struct Divide::Editor::QueueModelSpawn _queuedModelSpawn
const TransformSettings & getTransformSettings() const noexcept
IMPrimitive * _infiniteGridPrimitive
static std::array< Input::MouseButton, 5 > g_oisButtons
SamplerDescriptor _editorSampler
bool removeComponent(SceneGraphNode *selection, ComponentType newComponentType) const
bool isNodeInView(const SceneGraphNode &node) const noexcept
Return true if the specified node passed frustum culling during the main render pass.
CircularBuffer< SceneEntry, 10 > _recentSceneList
static std::array< const char *, 3 > g_supportedExportPlatforms
void loadNode(SceneGraphNode *sgn) const
size_t RedoStackSize() const noexcept
void onRemoveComponent(const EditorComponent &comp) const
bool onTextEvent(const Input::TextEvent &arg) override
bool wantsJoystick() const noexcept
BoundingSphere teleportToNode(Camera *camera, const SceneGraphNode *sgn) const
bool onKeyUp(const Input::KeyEvent &key) override
Key released: return true if input was consumed.
void setEditorCamLookAt(const vec3< F32 > &eye, const vec3< F32 > &fwd, const vec3< F32 > &up)
void saveNode(const SceneGraphNode *sgn) const
bool switchScene(const SceneEntry &scene, bool createIfNotExists=false)
void toggleMemoryEditor(bool state) noexcept
bool frameEnded(const FrameEvent &evt) noexcept override
frameEnded is called after the buffers have been swapped
bool framePostRender(const FrameEvent &evt) override
const SceneEntries & getSceneList() const noexcept
ResourcePath _externalTextEditorPath
GenericVertexData * getOrCreateIMGUIBuffer(I64 bufferGUID, U32 maxVertices, GFX::MemoryBarrierCommand &memCmdInOut)
bool simulationPaused() const noexcept
void getCommandBuffer(GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
SceneEnvironmentProbePool * getActiveEnvProbePool() const noexcept
bool joystickButtonReleased(const Input::JoystickEvent &arg) noexcept override
void setEditorCameraSpeed(const vec3< F32 > &speed) noexcept
bool saveSceneChanges(const DELEGATE< void, std::string_view > &msgCallback, const DELEGATE< void, bool > &finishCallback) const
Saves all new changes to the current scene and uses the provided callbacks to return progress message...
void onResolutionChange(const SizeChangeParams ¶ms)
Handle< Texture > _fontTexture
bool joystickPovMoved(const Input::JoystickEvent &arg) noexcept override
Time::ProfileTimer & _editorRenderTimer
void queueRemoveNode(I64 nodeGUID)
CameraSnapshot _render2DSnapshot
bool isDefaultScene() const noexcept
bool openProject(const ProjectID &projectID)
void infiniteGridAxisWidth(const F32 value) noexcept
string _lastOpenSceneName
PipelineDescriptor _infiniteGridPipelineDesc
Handle< ShaderProgram > _imguiProgram
friend class Attorney::EditorWindowManager
Rect< I32 > scenePreviewRect(bool globalCoords) const noexcept
IMPrimitive replaces immediate mode calls to VB based rendering.
PlatformContext & context() noexcept
An API-independent representation of a texture.
constexpr Optick::Category::Type Scene
Handle console commands that start with a forward slash.
ImTextureID to_TexID(Handle< Texture > handle)
void InitBasicImGUIState(ImGuiIO &io) noexcept
DELEGATE_STD< Ret, Args... > DELEGATE
vector< SceneEntry > SceneEntries
PushConstantsStruct IMGUICallbackToPushConstants(const IMGUICallbackData &data, const bool isArrayTexture)
void PushReadOnly(const bool fade)
vector< ProjectID > ProjectIDs
eastl::vector< Type > vector
static const vec3< F32 > VECTOR3_UNIT
Handle< Texture > from_TexID(ImTextureID texID)
static const vec3< F32 > VECTOR3_ZERO
Project const SceneEntry & entry
constexpr auto to_base(const Type value) -> Type
bool _hoveredScenePreview
bool _focusedScenePreview
Handle< Texture > _texture
GFX::CommandBuffer * _cmdBuffer
ScopedReadOnly(bool fade=false)