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;
165 int32_t mEditorFrameRateCap = 60;
166 bool mPlayInEditor =
false;
167 bool mPlayInGameWindow =
false;
168 bool mEjected =
false;
169 bool mPaused =
false;
170 bool mHasEjectedOnce =
false;
171 bool mSavedGridEnabled =
false;
180 bool mSuppressNextSelectionClick =
false;
181 glm::vec4 mSavedEditorClearColor = glm::vec4(0.0f, 0.0f, 0.0f, 1.0f);
182 int32_t mSavedWindowRect[4] = {};
183 bool mSavedWindowMaximized =
false;
184 bool mSavedFullscreenForPie =
false;
185 int32_t mEditSceneIndex = -1;
186 int32_t mPieEditSceneIdx = -1;
187 std::unordered_map<Asset*, PieAssetSnapshot> mPieAssetSnapshots;
192 std::unordered_map<Scene*, NodePtr> mInspectorDefaultCache;
198 bool mBeginPieAtEndOfFrame =
false;
199 bool mEndPieAtEndOfFrame =
false;
200 bool mSaveSceneAtEndOfFrame =
false;
201 bool mSaveSelectedAssetAtEndOfFrame =
false;
202 bool mResaveAllAtEndOfFrame =
false;
203 bool mBakeOcclusionAtEndOfFrame =
false;
204 bool mClearOcclusionAtEndOfFrame =
false;
207 bool mOcclusionStaleNotice =
false;
208 bool mReloadScriptsAtEndOfFrame =
false;
209 bool mOpenProjectAtEndOfFrame =
false;
210 std::string mPendingOpenProjectPath;
214 bool mCloseProjectAtEndOfFrame =
false;
218 bool mAddonRecoveryAtEndOfFrame =
false;
219 std::string mPendingAddonRecoveryReason;
222 bool mEditorRestartAtEndOfFrame =
false;
223 std::string mPendingEditorRestartReason;
230 bool mInstallAddonsAtEndOfFrame =
false;
231 std::vector<std::string> mPendingAddonInstalls;
236 bool mUninstallAddonsAtEndOfFrame =
false;
237 std::vector<std::string> mPendingAddonUninstalls;
240 bool mCheckAddonUpdatesAtEndOfFrame =
false;
246 bool mOpenSceneAtEndOfFrame =
false;
247 AssetStub* mPendingOpenSceneStub =
nullptr;
252 bool mProgressActive =
false;
257 bool mProgressPumping =
false;
258 bool mProgressCancellable =
false;
259 bool mProgressCancelRequested =
false;
260 std::string mProgressTitle;
261 std::string mProgressStatus;
262 float mProgressFraction = -1.0f;
263 double mProgressLastPumpTime = 0.0;
264 AssetBrowserTab mActiveAssetTab = AssetBrowserTab::Project;
265 AssetDir* mTabCurrentDir[(int)AssetBrowserTab::Count] = {};
266 std::vector<AssetDir*> mTabDirPast[(int)AssetBrowserTab::Count];
267 std::vector<AssetDir*> mTabDirFuture[(int)AssetBrowserTab::Count];
268 std::string mTabFilterStr[(int)AssetBrowserTab::Count];
269 std::vector<AssetStub*> mTabFilteredStubs[(int)AssetBrowserTab::Count];
270 std::vector<Object*> mInspectPast;
271 std::vector<Object*> mInspectFuture;
273 Object* mPrevInspectedObject;
275 bool mInspectLocked =
false;
278 std::string mIOAssetPath;
279 bool mRequestSaveSceneAs =
false;
280 bool mTrackSelectedAsset =
false;
281 bool mTrackSelectedNode =
false;
284 std::string mRevealScriptName =
"";
285 std::string mRevealScriptPath =
"";
286 std::set<AssetDir*> mRevealAssetExpandDirs;
287 uint32_t mViewportX = 0;
288 uint32_t mViewportY = 0;
289 uint32_t mViewportWidth = 100;
290 uint32_t mViewportHeight = 100;
291 glm::uvec4 mPrevViewport = {};
292 bool mShowLeftPane =
true;
293 bool mShowRightPane =
true;
294 bool mShowInterface =
true;
295 bool mPreviewLighting =
true;
297 std::vector<std::string> mFavoritedDirs;
298 std::vector<std::string> mRecentProjects;
299 std::vector<RecentScene> mRecentScenes;
305 std::unordered_map<std::string, EditorCameraBookmarkArray> mCameraBookmarks;
306 PaintMode mPaintMode = PaintMode::None;
307 PaintManager* mPaintManager =
nullptr;
308 VoxelSculptManager* mVoxelSculptManager =
nullptr;
309 class TerrainSculptManager* mTerrainSculptManager =
nullptr;
310 TilePaintManager* mTilePaintManager =
nullptr;
319 std::string mActiveAddonViewportModeId;
324 bool mTilePaintProjectionStashed =
false;
325 bool mTilePaintPrevWasPerspective =
true;
326 bool mTilePaintTransformStashed =
false;
327 glm::vec3 mTilePaintPrevCameraPosition = { 0.0f, 0.0f, 0.0f };
328 glm::quat mTilePaintPrevCameraRotation = { 1.0f, 0.0f, 0.0f, 0.0f };
329 bool mNodePropertySelect =
false;
330 int32_t mNodePropertySelectIndex = 0;
331 std::string mNodePropertySelectName =
"";
332 std::string mPendingSceneImportPath =
"";
333 std::vector<std::string> mPendingMeshImportPaths;
338 bool mImportAssetsAtEndOfFrame =
false;
339 std::vector<std::string> mPendingAssetImportPaths;
340 std::vector<std::string> mPendingSceneImportQueue;
346 AssetDir* mMouseHoveredAssetDir =
nullptr;
353 struct PendingImportClash
355 std::string mSourcePath;
356 std::string mOriginalBaseName;
357 std::string mProposedName;
358 std::string mExistingTypeName;
359 std::string mImportTypeName;
360 bool mCombined =
false;
361 MeshImportOptions mMeshOpts;
362 bool mHasMeshOpts =
false;
364 std::vector<PendingImportClash> mPendingImportClashes;
365 AssetStub* mPendingReimportSceneStub =
nullptr;
366 std::string mPendingReimportScenePath =
"";
367 bool mShutdownUnsavedCheck =
false;
368 bool mDevMode =
false;
369 bool mShowBottomPane =
true;
370 float mBottomPaneHeight = 180.0f;
371 bool mShowProjectUpgradeModal =
false;
372 bool mProjectUpgradeInProgress =
false;
373 std::vector<AssetStub*> mAssetsNeedingUpgrade;
376 bool mShow3DSPreview =
false;
377 int32_t mSceneScreenFilter = -1;
380 bool mShowGamePreview =
false;
381 bool mGamePreviewCaptured =
false;
384 int32_t mPlayTarget = 0;
387 bool mShowNodeGraphPanel =
false;
390 bool mShowTimelinePanel =
false;
393 bool mShowProfilingPanel =
false;
396 bool mShowInputTesterPanel =
false;
399 bool mShowTextureAtlasViewer =
false;
402 bool mShowGitPanel =
false;
405 bool mShowAnimationBrowser =
false;
407 bool mShowBoneMaskEditor =
false;
410 float mTimelinePlayheadTime = 0.0f;
411 bool mTimelinePreviewing =
false;
412 float mTimelineZoom = 100.0f;
413 float mTimelineScrollX = 0.0f;
414 float mTimelineSnapInterval = 0.1f;
415 int32_t mTimelineSelectedTrack = -1;
416 int32_t mTimelineSelectedClip = -1;
417 int32_t mTimelineSelectedKeyframe = -1;
420 ImGuizmo::OPERATION mGizmoOperation = ImGuizmo::TRANSLATE;
421 ImGuizmo::MODE mGizmoMode = ImGuizmo::WORLD;
422 bool mGizmoBlockedBySelection =
false;
427 void Update(
float deltaTime);
429 void GatherProperties(std::vector<Property>& props);
431 void SetEditorMode(EditorMode mode);
432 EditorMode GetEditorMode();
434 void SetPaintMode(PaintMode paintMode);
435 PaintMode GetPaintMode();
453 void SetActiveAddonViewportMode(
const std::string& modeId);
461 void ClearActiveAddonViewportMode();
464 bool HasActiveAddonViewportMode()
const {
return !mActiveAddonViewportModeId.empty(); }
467 const std::string& GetActiveAddonViewportModeId()
const {
return mActiveAddonViewportModeId; }
469 void ReadEditorSave();
470 void WriteEditorSave();
472 void ReadEditorProjectSave();
473 void WriteEditorProjectSave();
475 void HandleNodeDestroy(
Node* node);
477 void SetSelectedNode(
Node* newNode);
478 void AddSelectedNode(
Node* node,
bool addAllChildren);
479 void SelectNodesInRange(
Node* rootNode,
Node* endNode);
480 void RemoveSelectedNode(
Node* node);
481 void SetSelectedAssetStub(
AssetStub* newStub);
482 void AddSelectedAssetStub(
AssetStub* stub);
483 void RemoveSelectedAssetStub(
AssetStub* stub);
484 void ClearSelectedAssetStubs();
485 const std::vector<AssetStub*>& GetSelectedAssetStubs();
486 bool IsAssetStubSelected(
AssetStub* stub);
487 void SetControlMode(ControlMode newMode);
489 void BeginPlayInEditor();
490 void EndPlayInEditor();
493 void RequestBeginPlayInEditor();
494 void RequestEndPlayInEditor();
498 void RequestReloadAllScripts();
499 void EjectPlayInEditor();
500 void InjectPlayInEditor();
501 void SnapshotAssetsForPie();
502 void RestoreAssetsFromPie();
509 Node* GetSubSceneDefaultTree(
Scene* src);
510 void InvalidateSubSceneDefaultCache(
Scene* src =
nullptr);
511 bool IsPropertyOverridden(
Node* node,
const std::string& propName);
512 void RevertPropertyToSource(
Node* node,
const std::string& propName);
513 void SetPlayInEditorPaused(
bool paused);
514 bool IsPlayInEditorPaused();
516 void SetNodePropertySelect(
bool enable, int32_t index,
const std::string& propName);
517 void ClearNodePropertySelect();
518 void AssignNodePropertySelect(
Node* targetNode);
521 void ToggleEditorCameraProjection();
522 void ApplyEditorCameraSettings();
530 void SaveCameraBookmark(int32_t slot);
531 void RestoreCameraBookmark(int32_t slot);
532 bool HasCameraBookmark(int32_t slot)
const;
533 const EditorCameraBookmarkArray* GetActiveSceneCameraBookmarks()
const;
534 EditorCameraBookmarkArray* GetOrCreateActiveSceneCameraBookmarks();
536 void LoadStartupScene();
538 Node* GetSelectedNode();
539 Widget* GetSelectedWidget();
540 const std::vector<Node*>& GetSelectedNodes();
541 bool IsNodeSelected(
Node* node);
542 void DeselectNode(
Node* node);
543 int32_t GetSelectedInstance();
544 void SetSelectedInstance(int32_t instance);
548 void OpenEditScene(int32_t idx);
549 void CloseEditScene(int32_t idx);
550 void ShelveEditScene();
551 EditScene* GetEditScene(int32_t idx = -1);
552 void CloseAllEditScenes();
553 void EnsureActiveScene();
555 void ShowEditorUi(
bool show);
557 Asset* GetSelectedAsset();
559 ControlMode GetControlMode();
560 glm::vec3 GetTransformLockVector(TransformLock lock);
561 void SetTransformLock(TransformLock lock);
563 Object* GetInspectedObject();
564 Node* GetInspectedNode();
565 Asset* GetInspectedAsset();
566 void InspectObject(
Object* obj,
bool force =
false,
bool recordHistory =
true);
567 void LockInspect(
bool lock);
568 bool IsInspectLocked();
569 void RecordInspectHistory();
570 void ClearInspectHistory();
571 void RemoveFromInspectHistory(
Object* obj);
572 void ProgressInspectFuture();
573 void RegressInspectPast();
574 void ClearAssetDirHistory();
577 void BrowseToAsset(
const std::string& name);
578 void BrowseToScript(
const std::string& scriptName);
579 void BrowseToScriptPath(
const std::string& fullPath);
582 void DuplicateAsset(
AssetStub* srcStub,
const char* overrideName =
nullptr);
584 void ProgressDirFuture();
585 void RegressDirPast();
587 void RemoveFilteredAssetStub(
AssetStub* stub);
588 int ActiveTab()
const {
return (
int)mActiveAssetTab; }
598 bool ShouldPreviewConsoleLighting();
600 bool IsDirFavorited(
const std::string& dirPath);
601 void AddFavoriteDir(
const std::string& dirPath);
602 void RemoveFavoriteDir(
const std::string& dirPath);
604 void AddRecentProject(
const std::string& projPath);
605 void AddRecentScene(
const std::string& sceneName);
bool Update()
Definition Engine.cpp:995
void Shutdown()
Definition Engine.cpp:1298
ProjectionMode
Definition Enums.h:27
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Definition TimelineInstance.h:32
Definition Viewport2d.h:34
Definition Viewport3d.h:8