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 bool mSavedWindowMaximized =
false;
180 bool mSavedFullscreenForPie =
false;
181 int32_t mEditSceneIndex = -1;
182 int32_t mPieEditSceneIdx = -1;
183 std::unordered_map<Asset*, PieAssetSnapshot> mPieAssetSnapshots;
188 std::unordered_map<Scene*, NodePtr> mInspectorDefaultCache;
194 bool mBeginPieAtEndOfFrame =
false;
195 bool mEndPieAtEndOfFrame =
false;
196 bool mSaveSceneAtEndOfFrame =
false;
197 bool mSaveSelectedAssetAtEndOfFrame =
false;
198 bool mResaveAllAtEndOfFrame =
false;
199 bool mReloadScriptsAtEndOfFrame =
false;
200 bool mOpenProjectAtEndOfFrame =
false;
201 std::string mPendingOpenProjectPath;
205 bool mCloseProjectAtEndOfFrame =
false;
209 bool mAddonRecoveryAtEndOfFrame =
false;
210 std::string mPendingAddonRecoveryReason;
213 bool mEditorRestartAtEndOfFrame =
false;
214 std::string mPendingEditorRestartReason;
220 bool mOpenSceneAtEndOfFrame =
false;
221 AssetStub* mPendingOpenSceneStub =
nullptr;
226 bool mProgressActive =
false;
231 bool mProgressPumping =
false;
232 bool mProgressCancellable =
false;
233 bool mProgressCancelRequested =
false;
234 std::string mProgressTitle;
235 std::string mProgressStatus;
236 float mProgressFraction = -1.0f;
237 double mProgressLastPumpTime = 0.0;
238 AssetBrowserTab mActiveAssetTab = AssetBrowserTab::Project;
239 AssetDir* mTabCurrentDir[(int)AssetBrowserTab::Count] = {};
240 std::vector<AssetDir*> mTabDirPast[(int)AssetBrowserTab::Count];
241 std::vector<AssetDir*> mTabDirFuture[(int)AssetBrowserTab::Count];
242 std::string mTabFilterStr[(int)AssetBrowserTab::Count];
243 std::vector<AssetStub*> mTabFilteredStubs[(int)AssetBrowserTab::Count];
244 std::vector<Object*> mInspectPast;
245 std::vector<Object*> mInspectFuture;
247 Object* mPrevInspectedObject;
249 bool mInspectLocked =
false;
252 std::string mIOAssetPath;
253 bool mRequestSaveSceneAs =
false;
254 bool mTrackSelectedAsset =
false;
255 bool mTrackSelectedNode =
false;
258 std::string mRevealScriptName =
"";
259 std::string mRevealScriptPath =
"";
260 std::set<AssetDir*> mRevealAssetExpandDirs;
261 uint32_t mViewportX = 0;
262 uint32_t mViewportY = 0;
263 uint32_t mViewportWidth = 100;
264 uint32_t mViewportHeight = 100;
265 glm::uvec4 mPrevViewport = {};
266 bool mShowLeftPane =
true;
267 bool mShowRightPane =
true;
268 bool mShowInterface =
true;
269 bool mPreviewLighting =
true;
271 std::vector<std::string> mFavoritedDirs;
272 std::vector<std::string> mRecentProjects;
273 std::vector<RecentScene> mRecentScenes;
279 std::unordered_map<std::string, EditorCameraBookmarkArray> mCameraBookmarks;
280 PaintMode mPaintMode = PaintMode::None;
281 PaintManager* mPaintManager =
nullptr;
282 VoxelSculptManager* mVoxelSculptManager =
nullptr;
283 class TerrainSculptManager* mTerrainSculptManager =
nullptr;
284 TilePaintManager* mTilePaintManager =
nullptr;
293 std::string mActiveAddonViewportModeId;
298 bool mTilePaintProjectionStashed =
false;
299 bool mTilePaintPrevWasPerspective =
true;
300 bool mTilePaintTransformStashed =
false;
301 glm::vec3 mTilePaintPrevCameraPosition = { 0.0f, 0.0f, 0.0f };
302 glm::quat mTilePaintPrevCameraRotation = { 1.0f, 0.0f, 0.0f, 0.0f };
303 bool mNodePropertySelect =
false;
304 int32_t mNodePropertySelectIndex = 0;
305 std::string mNodePropertySelectName =
"";
306 std::string mPendingSceneImportPath =
"";
307 std::vector<std::string> mPendingMeshImportPaths;
308 std::vector<std::string> mPendingSceneImportQueue;
314 AssetDir* mMouseHoveredAssetDir =
nullptr;
321 struct PendingImportClash
323 std::string mSourcePath;
324 std::string mOriginalBaseName;
325 std::string mProposedName;
326 std::string mExistingTypeName;
327 std::string mImportTypeName;
328 bool mCombined =
false;
329 MeshImportOptions mMeshOpts;
330 bool mHasMeshOpts =
false;
332 std::vector<PendingImportClash> mPendingImportClashes;
333 AssetStub* mPendingReimportSceneStub =
nullptr;
334 std::string mPendingReimportScenePath =
"";
335 bool mShutdownUnsavedCheck =
false;
336 bool mDevMode =
false;
337 bool mShowBottomPane =
true;
338 float mBottomPaneHeight = 180.0f;
339 bool mShowProjectUpgradeModal =
false;
340 bool mProjectUpgradeInProgress =
false;
341 std::vector<AssetStub*> mAssetsNeedingUpgrade;
344 bool mShow3DSPreview =
false;
345 int32_t mSceneScreenFilter = -1;
348 bool mShowGamePreview =
false;
349 bool mGamePreviewCaptured =
false;
352 int32_t mPlayTarget = 0;
355 bool mShowNodeGraphPanel =
false;
358 bool mShowTimelinePanel =
false;
361 bool mShowProfilingPanel =
false;
364 bool mShowInputTesterPanel =
false;
367 bool mShowTextureAtlasViewer =
false;
370 bool mShowGitPanel =
false;
373 bool mShowAnimationBrowser =
false;
375 bool mShowBoneMaskEditor =
false;
378 float mTimelinePlayheadTime = 0.0f;
379 bool mTimelinePreviewing =
false;
380 float mTimelineZoom = 100.0f;
381 float mTimelineScrollX = 0.0f;
382 float mTimelineSnapInterval = 0.1f;
383 int32_t mTimelineSelectedTrack = -1;
384 int32_t mTimelineSelectedClip = -1;
385 int32_t mTimelineSelectedKeyframe = -1;
388 ImGuizmo::OPERATION mGizmoOperation = ImGuizmo::TRANSLATE;
389 ImGuizmo::MODE mGizmoMode = ImGuizmo::WORLD;
390 bool mGizmoBlockedBySelection =
false;
395 void Update(
float deltaTime);
397 void GatherProperties(std::vector<Property>& props);
399 void SetEditorMode(EditorMode mode);
400 EditorMode GetEditorMode();
402 void SetPaintMode(PaintMode paintMode);
403 PaintMode GetPaintMode();
421 void SetActiveAddonViewportMode(
const std::string& modeId);
429 void ClearActiveAddonViewportMode();
432 bool HasActiveAddonViewportMode()
const {
return !mActiveAddonViewportModeId.empty(); }
435 const std::string& GetActiveAddonViewportModeId()
const {
return mActiveAddonViewportModeId; }
437 void ReadEditorSave();
438 void WriteEditorSave();
440 void ReadEditorProjectSave();
441 void WriteEditorProjectSave();
443 void HandleNodeDestroy(
Node* node);
445 void SetSelectedNode(
Node* newNode);
446 void AddSelectedNode(
Node* node,
bool addAllChildren);
447 void SelectNodesInRange(
Node* rootNode,
Node* endNode);
448 void RemoveSelectedNode(
Node* node);
449 void SetSelectedAssetStub(
AssetStub* newStub);
450 void AddSelectedAssetStub(
AssetStub* stub);
451 void RemoveSelectedAssetStub(
AssetStub* stub);
452 void ClearSelectedAssetStubs();
453 const std::vector<AssetStub*>& GetSelectedAssetStubs();
454 bool IsAssetStubSelected(
AssetStub* stub);
455 void SetControlMode(ControlMode newMode);
457 void BeginPlayInEditor();
458 void EndPlayInEditor();
461 void RequestBeginPlayInEditor();
462 void RequestEndPlayInEditor();
466 void RequestReloadAllScripts();
467 void EjectPlayInEditor();
468 void InjectPlayInEditor();
469 void SnapshotAssetsForPie();
470 void RestoreAssetsFromPie();
477 Node* GetSubSceneDefaultTree(
Scene* src);
478 void InvalidateSubSceneDefaultCache(
Scene* src =
nullptr);
479 bool IsPropertyOverridden(
Node* node,
const std::string& propName);
480 void RevertPropertyToSource(
Node* node,
const std::string& propName);
481 void SetPlayInEditorPaused(
bool paused);
482 bool IsPlayInEditorPaused();
484 void SetNodePropertySelect(
bool enable, int32_t index,
const std::string& propName);
485 void ClearNodePropertySelect();
486 void AssignNodePropertySelect(
Node* targetNode);
489 void ToggleEditorCameraProjection();
490 void ApplyEditorCameraSettings();
498 void SaveCameraBookmark(int32_t slot);
499 void RestoreCameraBookmark(int32_t slot);
500 bool HasCameraBookmark(int32_t slot)
const;
501 const EditorCameraBookmarkArray* GetActiveSceneCameraBookmarks()
const;
502 EditorCameraBookmarkArray* GetOrCreateActiveSceneCameraBookmarks();
504 void LoadStartupScene();
506 Node* GetSelectedNode();
507 Widget* GetSelectedWidget();
508 const std::vector<Node*>& GetSelectedNodes();
509 bool IsNodeSelected(
Node* node);
510 void DeselectNode(
Node* node);
511 int32_t GetSelectedInstance();
512 void SetSelectedInstance(int32_t instance);
516 void OpenEditScene(int32_t idx);
517 void CloseEditScene(int32_t idx);
518 void ShelveEditScene();
519 EditScene* GetEditScene(int32_t idx = -1);
520 void CloseAllEditScenes();
521 void EnsureActiveScene();
523 void ShowEditorUi(
bool show);
525 Asset* GetSelectedAsset();
527 ControlMode GetControlMode();
528 glm::vec3 GetTransformLockVector(TransformLock lock);
529 void SetTransformLock(TransformLock lock);
531 Object* GetInspectedObject();
532 Node* GetInspectedNode();
533 Asset* GetInspectedAsset();
534 void InspectObject(
Object* obj,
bool force =
false,
bool recordHistory =
true);
535 void LockInspect(
bool lock);
536 bool IsInspectLocked();
537 void RecordInspectHistory();
538 void ClearInspectHistory();
539 void RemoveFromInspectHistory(
Object* obj);
540 void ProgressInspectFuture();
541 void RegressInspectPast();
542 void ClearAssetDirHistory();
545 void BrowseToAsset(
const std::string& name);
546 void BrowseToScript(
const std::string& scriptName);
547 void BrowseToScriptPath(
const std::string& fullPath);
550 void DuplicateAsset(
AssetStub* srcStub,
const char* overrideName =
nullptr);
552 void ProgressDirFuture();
553 void RegressDirPast();
555 void RemoveFilteredAssetStub(
AssetStub* stub);
556 int ActiveTab()
const {
return (
int)mActiveAssetTab; }
561 bool IsDirFavorited(
const std::string& dirPath);
562 void AddFavoriteDir(
const std::string& dirPath);
563 void RemoveFavoriteDir(
const std::string& dirPath);
565 void AddRecentProject(
const std::string& projPath);
566 void AddRecentScene(
const std::string& sceneName);
bool Update()
Definition Engine.cpp:897
void Shutdown()
Definition Engine.cpp:1147
ProjectionMode
Definition Enums.h:27
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Definition TimelineInstance.h:32
Definition Viewport2d.h:33
Definition Viewport3d.h:7