8#include <unordered_map>
35class VoxelSculptManager;
36class TilePaintManager;
50enum class TransformLock
83enum class AssetBrowserTab
90struct LinkedSceneProps
92 Node* mNode =
nullptr;
93 std::vector<Property> mProps;
94 std::vector<SubSceneOverride> mSubSceneOverrides;
101 glm::mat4 mCameraTransform;
102 std::vector<LinkedSceneProps> mLinkedSceneProps;
107 std::string mSceneName;
108 uint64_t mTimestamp = 0;
114constexpr int32_t kEditorCameraBookmarkSlotCount = 10;
116struct EditorCameraBookmark
119 glm::vec3 mPosition = { 0.0f, 0.0f, 0.0f };
120 glm::quat mRotation = { 1.0f, 0.0f, 0.0f, 0.0f };
122 float mPerspectiveNearZ = 0.25f;
123 float mPerspectiveFarZ = 4096.0f;
124 float mPerspectiveFov = 70.0f;
125 float mOrthoNearZ = -2048.0f;
126 float mOrthoFarZ = 2048.0f;
127 float mOrthoWidth = 12.8f;
128 float mFocalDistance = 10.0f;
131using EditorCameraBookmarkArray = std::array<EditorCameraBookmark, kEditorCameraBookmarkSlotCount>;
135struct PieAssetSnapshot
137 std::vector<uint8_t> mBytes;
138 bool mWasDirty =
false;
145 std::vector<Node*> mSelectedNodes;
146 Node* mShiftSelectAnchor =
nullptr;
147 int32_t mSelectedInstance = -1;
148 std::vector<EditScene> mEditScenes;
150 std::vector<AssetStub*> mSelectedAssetStubs;
151 ControlMode mControlMode = ControlMode::Default;
152 TransformLock mTransformLock = TransformLock::None;
154 float mPerspectiveNearZ = 0.25f;
155 float mPerspectiveFarZ = 4096.0f;
156 float mPerspectiveFov = 70.0f;
157 float mOrthoNearZ = -2048.0f;
158 float mOrthoFarZ = 2048.0f;
159 float mOrthoWidth = 12.8f;
160 bool mMouseNeedsRecenter =
false;
161 bool mUiEnabled =
true;
162 bool mPlayInEditor =
false;
163 bool mPlayInGameWindow =
false;
164 bool mEjected =
false;
165 bool mPaused =
false;
166 bool mHasEjectedOnce =
false;
167 bool mSavedGridEnabled =
false;
176 bool mSuppressNextSelectionClick =
false;
177 glm::vec4 mSavedEditorClearColor = glm::vec4(0.0f, 0.0f, 0.0f, 1.0f);
178 int32_t mSavedWindowRect[4] = {};
179 int32_t mEditSceneIndex = -1;
180 int32_t mPieEditSceneIdx = -1;
181 std::unordered_map<Asset*, PieAssetSnapshot> mPieAssetSnapshots;
186 std::unordered_map<Scene*, NodePtr> mInspectorDefaultCache;
192 bool mBeginPieAtEndOfFrame =
false;
193 bool mEndPieAtEndOfFrame =
false;
194 bool mSaveSceneAtEndOfFrame =
false;
195 bool mSaveSelectedAssetAtEndOfFrame =
false;
196 bool mResaveAllAtEndOfFrame =
false;
197 bool mReloadScriptsAtEndOfFrame =
false;
198 bool mOpenProjectAtEndOfFrame =
false;
199 std::string mPendingOpenProjectPath;
203 bool mCloseProjectAtEndOfFrame =
false;
207 bool mAddonRecoveryAtEndOfFrame =
false;
208 std::string mPendingAddonRecoveryReason;
211 bool mEditorRestartAtEndOfFrame =
false;
212 std::string mPendingEditorRestartReason;
218 bool mOpenSceneAtEndOfFrame =
false;
219 AssetStub* mPendingOpenSceneStub =
nullptr;
224 bool mProgressActive =
false;
225 bool mProgressCancellable =
false;
226 bool mProgressCancelRequested =
false;
227 std::string mProgressTitle;
228 std::string mProgressStatus;
229 float mProgressFraction = -1.0f;
230 double mProgressLastPumpTime = 0.0;
231 AssetBrowserTab mActiveAssetTab = AssetBrowserTab::Project;
232 AssetDir* mTabCurrentDir[(int)AssetBrowserTab::Count] = {};
233 std::vector<AssetDir*> mTabDirPast[(int)AssetBrowserTab::Count];
234 std::vector<AssetDir*> mTabDirFuture[(int)AssetBrowserTab::Count];
235 std::string mTabFilterStr[(int)AssetBrowserTab::Count];
236 std::vector<AssetStub*> mTabFilteredStubs[(int)AssetBrowserTab::Count];
237 std::vector<Object*> mInspectPast;
238 std::vector<Object*> mInspectFuture;
240 Object* mPrevInspectedObject;
242 bool mInspectLocked =
false;
245 std::string mIOAssetPath;
246 bool mRequestSaveSceneAs =
false;
247 bool mTrackSelectedAsset =
false;
248 bool mTrackSelectedNode =
false;
249 std::string mRevealScriptName =
"";
250 std::set<AssetDir*> mRevealAssetExpandDirs;
251 uint32_t mViewportX = 0;
252 uint32_t mViewportY = 0;
253 uint32_t mViewportWidth = 100;
254 uint32_t mViewportHeight = 100;
255 glm::uvec4 mPrevViewport = {};
256 bool mShowLeftPane =
true;
257 bool mShowRightPane =
true;
258 bool mShowInterface =
true;
259 bool mPreviewLighting =
true;
261 std::vector<std::string> mFavoritedDirs;
262 std::vector<std::string> mRecentProjects;
263 std::vector<RecentScene> mRecentScenes;
269 std::unordered_map<std::string, EditorCameraBookmarkArray> mCameraBookmarks;
270 PaintMode mPaintMode = PaintMode::None;
271 PaintManager* mPaintManager =
nullptr;
272 VoxelSculptManager* mVoxelSculptManager =
nullptr;
273 class TerrainSculptManager* mTerrainSculptManager =
nullptr;
274 TilePaintManager* mTilePaintManager =
nullptr;
283 std::string mActiveAddonViewportModeId;
288 bool mTilePaintProjectionStashed =
false;
289 bool mTilePaintPrevWasPerspective =
true;
290 bool mTilePaintTransformStashed =
false;
291 glm::vec3 mTilePaintPrevCameraPosition = { 0.0f, 0.0f, 0.0f };
292 glm::quat mTilePaintPrevCameraRotation = { 1.0f, 0.0f, 0.0f, 0.0f };
293 bool mNodePropertySelect =
false;
294 int32_t mNodePropertySelectIndex = 0;
295 std::string mNodePropertySelectName =
"";
296 std::string mPendingSceneImportPath =
"";
297 std::vector<std::string> mPendingMeshImportPaths;
298 std::vector<std::string> mPendingSceneImportQueue;
304 AssetDir* mMouseHoveredAssetDir =
nullptr;
311 struct PendingImportClash
313 std::string mSourcePath;
314 std::string mOriginalBaseName;
315 std::string mProposedName;
316 std::string mExistingTypeName;
317 std::string mImportTypeName;
318 bool mCombined =
false;
319 MeshImportOptions mMeshOpts;
320 bool mHasMeshOpts =
false;
322 std::vector<PendingImportClash> mPendingImportClashes;
323 AssetStub* mPendingReimportSceneStub =
nullptr;
324 std::string mPendingReimportScenePath =
"";
325 bool mShutdownUnsavedCheck =
false;
326 bool mDevMode =
false;
327 bool mShowBottomPane =
true;
328 float mBottomPaneHeight = 180.0f;
329 bool mShowProjectUpgradeModal =
false;
330 bool mProjectUpgradeInProgress =
false;
331 std::vector<AssetStub*> mAssetsNeedingUpgrade;
334 bool mShow3DSPreview =
false;
335 int32_t mSceneScreenFilter = -1;
338 bool mShowGamePreview =
false;
339 bool mGamePreviewCaptured =
false;
342 int32_t mPlayTarget = 0;
345 bool mShowNodeGraphPanel =
false;
348 bool mShowTimelinePanel =
false;
351 bool mShowProfilingPanel =
false;
354 bool mShowInputTesterPanel =
false;
357 bool mShowTextureAtlasViewer =
false;
360 bool mShowGitPanel =
false;
363 bool mShowAnimationBrowser =
false;
365 bool mShowBoneMaskEditor =
false;
368 float mTimelinePlayheadTime = 0.0f;
369 bool mTimelinePreviewing =
false;
370 float mTimelineZoom = 100.0f;
371 float mTimelineScrollX = 0.0f;
372 float mTimelineSnapInterval = 0.1f;
373 int32_t mTimelineSelectedTrack = -1;
374 int32_t mTimelineSelectedClip = -1;
375 int32_t mTimelineSelectedKeyframe = -1;
378 ImGuizmo::OPERATION mGizmoOperation = ImGuizmo::TRANSLATE;
379 ImGuizmo::MODE mGizmoMode = ImGuizmo::WORLD;
380 bool mGizmoBlockedBySelection =
false;
385 void Update(
float deltaTime);
387 void GatherProperties(std::vector<Property>& props);
389 void SetEditorMode(EditorMode mode);
390 EditorMode GetEditorMode();
392 void SetPaintMode(PaintMode paintMode);
393 PaintMode GetPaintMode();
411 void SetActiveAddonViewportMode(
const std::string& modeId);
419 void ClearActiveAddonViewportMode();
422 bool HasActiveAddonViewportMode()
const {
return !mActiveAddonViewportModeId.empty(); }
425 const std::string& GetActiveAddonViewportModeId()
const {
return mActiveAddonViewportModeId; }
427 void ReadEditorSave();
428 void WriteEditorSave();
430 void ReadEditorProjectSave();
431 void WriteEditorProjectSave();
433 void HandleNodeDestroy(
Node* node);
435 void SetSelectedNode(
Node* newNode);
436 void AddSelectedNode(
Node* node,
bool addAllChildren);
437 void SelectNodesInRange(
Node* rootNode,
Node* endNode);
438 void RemoveSelectedNode(
Node* node);
439 void SetSelectedAssetStub(
AssetStub* newStub);
440 void AddSelectedAssetStub(
AssetStub* stub);
441 void RemoveSelectedAssetStub(
AssetStub* stub);
442 void ClearSelectedAssetStubs();
443 const std::vector<AssetStub*>& GetSelectedAssetStubs();
444 bool IsAssetStubSelected(
AssetStub* stub);
445 void SetControlMode(ControlMode newMode);
447 void BeginPlayInEditor();
448 void EndPlayInEditor();
451 void RequestBeginPlayInEditor();
452 void RequestEndPlayInEditor();
456 void RequestReloadAllScripts();
457 void EjectPlayInEditor();
458 void InjectPlayInEditor();
459 void SnapshotAssetsForPie();
460 void RestoreAssetsFromPie();
467 Node* GetSubSceneDefaultTree(
Scene* src);
468 void InvalidateSubSceneDefaultCache(
Scene* src =
nullptr);
469 bool IsPropertyOverridden(
Node* node,
const std::string& propName);
470 void RevertPropertyToSource(
Node* node,
const std::string& propName);
471 void SetPlayInEditorPaused(
bool paused);
472 bool IsPlayInEditorPaused();
474 void SetNodePropertySelect(
bool enable, int32_t index,
const std::string& propName);
475 void ClearNodePropertySelect();
476 void AssignNodePropertySelect(
Node* targetNode);
479 void ToggleEditorCameraProjection();
480 void ApplyEditorCameraSettings();
488 void SaveCameraBookmark(int32_t slot);
489 void RestoreCameraBookmark(int32_t slot);
490 bool HasCameraBookmark(int32_t slot)
const;
491 const EditorCameraBookmarkArray* GetActiveSceneCameraBookmarks()
const;
492 EditorCameraBookmarkArray* GetOrCreateActiveSceneCameraBookmarks();
494 void LoadStartupScene();
496 Node* GetSelectedNode();
497 Widget* GetSelectedWidget();
498 const std::vector<Node*>& GetSelectedNodes();
499 bool IsNodeSelected(
Node* node);
500 void DeselectNode(
Node* node);
501 int32_t GetSelectedInstance();
502 void SetSelectedInstance(int32_t instance);
505 void OpenEditScene(
Scene* scene);
506 void OpenEditScene(int32_t idx);
507 void CloseEditScene(int32_t idx);
508 void ShelveEditScene();
509 EditScene* GetEditScene(int32_t idx = -1);
510 void CloseAllEditScenes();
511 void EnsureActiveScene();
513 void ShowEditorUi(
bool show);
515 Asset* GetSelectedAsset();
517 ControlMode GetControlMode();
518 glm::vec3 GetTransformLockVector(TransformLock lock);
519 void SetTransformLock(TransformLock lock);
521 Object* GetInspectedObject();
522 Node* GetInspectedNode();
523 Asset* GetInspectedAsset();
524 void InspectObject(
Object* obj,
bool force =
false,
bool recordHistory =
true);
525 void LockInspect(
bool lock);
526 bool IsInspectLocked();
527 void RecordInspectHistory();
528 void ClearInspectHistory();
529 void RemoveFromInspectHistory(
Object* obj);
530 void ProgressInspectFuture();
531 void RegressInspectPast();
532 void ClearAssetDirHistory();
533 void SetAssetDirectory(
AssetDir* assetDir,
bool recordHistory);
535 void BrowseToAsset(
const std::string& name);
536 void BrowseToScript(
const std::string& scriptName);
539 void DuplicateAsset(
AssetStub* srcStub,
const char* overrideName =
nullptr);
541 void ProgressDirFuture();
542 void RegressDirPast();
544 void RemoveFilteredAssetStub(
AssetStub* stub);
545 int ActiveTab()
const {
return (
int)mActiveAssetTab; }
550 bool IsDirFavorited(
const std::string& dirPath);
551 void AddFavoriteDir(
const std::string& dirPath);
552 void RemoveFavoriteDir(
const std::string& dirPath);
554 void AddRecentProject(
const std::string& projPath);
555 void AddRecentScene(
const std::string& sceneName);
558EditorState* GetEditorState();
bool Update()
Definition Engine.cpp:790
void Shutdown()
Definition Engine.cpp:1026
ProjectionMode
Definition Enums.h:27
Definition TimelineInstance.h:32
Definition Viewport2d.h:33
Definition Viewport3d.h:7