Polyphase Game Engine
Loading...
Searching...
No Matches
ActionManager.h
Go to the documentation of this file.
1#pragma once
2
3#include <string>
4#include <vector>
5#include <map>
6#include <thread>
7#include <mutex>
8#include <atomic>
9#if PLATFORM_LINUX
10#include <sys/types.h>
11#endif
12
13#include "EngineTypes.h"
14#include "EditorTypes.h"
15#include "Asset.h"
16#include "AssetRef.h"
17#include "Nodes/Node.h"
20
21class Node3D;
22class Mesh3D;
23class InstancedMesh3D;
24class Timeline;
25class Widget;
27struct MeshInstanceData;
28
30{
31 glm::vec2 mOffset;
32 glm::vec2 mSize;
33 float mRotation;
34};
35
40{
41 std::thread mBuildThread;
42 std::atomic<bool> mRunning{false};
43 std::atomic<bool> mCancelRequested{false};
44 std::atomic<bool> mComplete{false};
45 std::atomic<bool> mSuccess{false};
46 std::atomic<int> mExitCode{0};
47
48 std::mutex mOutputMutex;
49 std::string mOutput;
50 bool mOutputDirty{false};
51
52 // Build config (set in BuildData, used by Phase1 and compile thread)
54 bool mEmbedded{false};
55 std::string mPackagedDir;
56 std::string mBuildProjDir;
57 std::string mProjectDir;
58 std::string mProjectName;
59 std::string mExeSrc;
60 std::string mExtension;
61 int64_t mExeMTimeBeforeBuild{0}; // stat mtime of mExeSrc before compile, used to detect silent link.exe failures
62 bool mStandalone{false};
63 bool mNeedCompile{true};
64 bool mUseSteam{false};
65 std::string mCompileCommand;
66 std::string mPrebuiltExePath;
67 std::string mTmpMakefile;
69 std::string mStripCommand;
70 // Path to a .vcxproj that was injected with addon sources/includes before the build.
71 // Restored from .vcxproj.orig after the build completes (success or failure) so the
72 // working tree doesn't accumulate uncommitted changes.
74
75 // Post-build flags
76 bool mRunAfterBuild{false};
77 bool mRunOnDevice{false};
78 bool mForceRebuild{false};
79 // Snapshot of mForceRebuild captured in BuildData before it's cleared, so BuildPhase1
80 // can still tell whether the user requested a force rebuild when it decides whether
81 // to reuse the prebuilt Polyphase.exe.
82 bool mForceCompile{false};
83
84 void Reset()
85 {
86 // Thread must be joined before calling Reset
87 mRunning.store(false);
88 mCancelRequested.store(false);
89 mComplete.store(false);
90 mSuccess.store(false);
91 mExitCode.store(0);
92 {
93 std::lock_guard<std::mutex> lock(mOutputMutex);
94 mOutput.clear();
95 mOutputDirty = false;
96 }
98 mEmbedded = false;
99 mPackagedDir.clear();
100 mBuildProjDir.clear();
101 mProjectDir.clear();
102 mProjectName.clear();
103 mExeSrc.clear();
104 mExtension.clear();
106 mStandalone = false;
107 mNeedCompile = true;
108 mUseSteam = false;
109 mCompileCommand.clear();
110 mPrebuiltExePath.clear();
111 mTmpMakefile.clear();
112 mShaderCompileCommand.clear();
113 mStripCommand.clear();
114 mInjectedVcxprojPath.clear();
115 mRunAfterBuild = false;
116 mRunOnDevice = false;
117 mForceRebuild = false;
118 mForceCompile = false;
119#if PLATFORM_LINUX
120 mProcessId = 0;
121#elif PLATFORM_WINDOWS
122 mProcessHandle = nullptr;
123#endif
124 }
125
126#if PLATFORM_LINUX
127 pid_t mProcessId{0};
128#elif PLATFORM_WINDOWS
129 void* mProcessHandle{nullptr};
130#endif
131};
132
134{
135public:
136 virtual ~Action() {}
137 virtual void Execute();
138 virtual void Reverse();
139 virtual const char* GetName() = 0;
140};
141
143{
144public:
145
147
148 static void Create();
149 static void Destroy();
151
152 void Update();
153
155
156 Node* SpawnNode(TypeId nodeType, Node* parent);
157 Node* SpawnNode(TypeId nodeType, glm::vec3 position);
158
159 Node* SpawnBasicNode(const std::string& name, Node* parent, Asset* srcAsset = nullptr, bool setWorldPos = false, glm::vec3 worldPos = { 0.0f, 0.0f, 0.0f });
160
161 void ExecuteAction(Action* action);
162 void Undo();
163 void Redo();
164
165 // Actions
166 void EXE_EditProperty(void* owner, PropertyOwnerType ownerType, const std::string& name, uint32_t index, Datum newValue);
167 void EXE_EditTransform(Node3D* node, const glm::mat4& transform);
168 void EXE_EditTransforms(const std::vector<Node3D*>& nodes, const std::vector<glm::mat4>& newTransforms);
169 void EXE_EditWidgetTransforms(const std::vector<Widget*>& widgets, const std::vector<WidgetTransformData>& newTransforms);
171 Node* EXE_SpawnNode(const char* srcTypeName);
174 void EXE_DeleteNode(Node* node);
175 std::vector<Node*> EXE_SpawnNodes(const std::vector<Node*>& nodes);
176 void EXE_DeleteNodes(const std::vector<Node*>& nodes);
177 void EXE_AttachNode(Node* node, Node* newParent, int32_t childIndex, int32_t boneIndex);
178 void EXE_SetRootNode(Node* newRoot);
179 void EXE_SetWorldRotation(Node3D* node, glm::quat rot);
180 void EXE_SetWorldPosition(Node3D* node, glm::vec3 pos);
181 void EXE_SetWorldScale(Node3D* node, glm::vec3 scale);
183 void EXE_ResetScene(Node* node);
184 void EXE_SetInstanceColors(const std::vector<ActionSetInstanceColorsData>& data);
185 void EXE_SetVoxels(class Voxel3D* voxel, const std::vector<struct VoxelChange>& changes);
186 void EXE_SetTerrainHeights(class Terrain3D* terrain, const std::vector<struct TerrainHeightChange>& changes);
187 void EXE_PaintTiles(class TileMap2D* tileMapNode, const std::vector<struct TilePaintChange>& changes);
188 void EXE_SetInstanceData(InstancedMesh3D* instMesh, int32_t startIndex, const std::vector<MeshInstanceData>& data);
189
195 void EXE_ReplaceSelectedWithAsset(Asset* asset, const std::vector<Node*>& nodes);
196
202 void EXE_ReplaceWithInstancedMesh(const std::vector<Node*>& nodes, bool merge);
203
208 void EXE_ReplaceWithStaticMesh(const std::vector<Node*>& nodes);
209
216 void EXE_ParentSelectedWith(const std::vector<Node*>& nodes, TypeId parentType,
218
219 // Timeline actions
220 void EXE_TimelineAddTrack(Timeline* timeline, TypeId trackType);
221 void EXE_TimelineRemoveTrack(Timeline* timeline, int32_t trackIndex);
222 void EXE_TimelineAddClip(Timeline* timeline, int32_t trackIndex, TypeId clipType, float startTime, float duration);
223 void EXE_TimelineRemoveClip(Timeline* timeline, int32_t trackIndex, int32_t clipIndex);
224 void EXE_TimelineMoveClip(Timeline* timeline, int32_t trackIndex, int32_t clipIndex, float oldStartTime, float newStartTime);
225 void EXE_TimelineBindTrack(Timeline* timeline, int32_t trackIndex, uint64_t oldUuid, uint64_t newUuid, const std::string& oldName, const std::string& newName);
226
230 void ExileNode(NodePtr node);
232 void GatherScriptFiles(const std::string& dir, std::vector<std::string>& outFiles);
233
234protected:
235
238
239 // Raw (non-.oct) file entry to embed into gEmbeddedRawAssets[].
240 // mLookupKey is the canonical VFS lookup path the runtime will use
241 // (projectDir-relative, forward slashes, e.g. "Assets/intro.mp4" or
242 // "Packages/videoplayer/Assets/test.mp4").
244 {
245 std::string mAbsolutePath;
246 std::string mLookupKey;
247 bool mEngineAsset = false;
248 };
249
251 std::vector<std::pair<AssetStub*, std::string> >& assets,
252 std::vector<EmbeddedRawAssetEntry>& rawAssets,
253 const char* headerPath,
254 const char* sourcePath);
255
257 std::vector<std::string> files,
258 const char* headerPath,
259 const char* sourcePath);
260
261
262 std::vector<Action*> mActionHistory;
263 std::vector<Action*> mActionFuture;
264 std::vector<NodePtr> mExiledNodes;
265
266 // Non-blocking build state
268 bool mShowBuildModal = false;
270 bool mBuildAutoScroll = true;
271 bool mBuildPending = false;
272
276 void AppendBuildOutput(const std::string& text);
278
279public:
280
281 // Actions
282 void CreateNewProject(const char* folderPath = nullptr, bool cpp = false, const char* defaultSceneName = "SC_Default");
283 void OpenProject(const char* path = nullptr);
284
285 // Drop Directory.Build.props + PolyphaseConfig.cmake at the project
286 // root recording the engine path. Lets addons under <project>/Packages
287 // build via Visual Studio / cmake without env-var setup. Called from
288 // OpenProject each time a project loads, so the recorded path stays in
289 // sync with whichever editor binary opened the project.
291
292 void OpenScene();
293 void OpenScene(Scene* scene);
294 // Defer OpenScene so the progress modal renders before Scene::Instantiate
295 // (which builds the node tree) blocks the main thread on large scenes.
296 // Pass nullptr to trigger the OS file dialog inside the worker; pass a
297 // stub to open that scene directly (same as the non-Request OpenScene).
300 void SaveScene(bool saveAs);
301 // Defer SaveScene/SaveSelectedAsset/ResaveAllAssets to end-of-frame so the
302 // progress modal can render before the (potentially slow) capture and
303 // serialization work blocks the main thread. The hotkey / menu /
304 // command path should prefer these wrappers; SaveScene() etc. remain
305 // available for callers that need synchronous semantics (e.g. the REST
306 // controller, where the response must include the result).
307 void RequestSaveScene(bool saveAs);
310 // Defer OpenProject so the progress modal renders before LoadProject's
311 // (potentially many-second) Purge / ReloadAddons / Discover sequence
312 // blocks the main thread. Pass empty/null path to trigger the OS folder
313 // picker inside the worker (same as direct OpenProject).
314 void RequestOpenProject(const char* path);
315 // sceneType: 0 = 2D Canvas root, 1 = 3D Node3D root. targetDir defaults to the
316 // editor's currently-selected asset directory. Returns the created Scene asset
317 // (already saved to disk) or nullptr on failure.
318 Scene* CreateNewScene(const char* sceneName, int sceneType, bool createCamera, bool createSkybox = false, AssetDir* targetDir = nullptr);
321 void DeleteNode(Node* node);
322 void RunScript();
324 Asset* ImportAsset(const std::string& path);
327 void ImportCamera(const CameraImportOptions& options);
328 void ImportScene(const SceneImportOptions& options);
333 void BuildData(Platform platform, bool embedded);
335 bool IsBuildRunning() const;
344 bool DuplicateNodes(std::vector<Node*> nodes);
345 void AttachSelectedNodes(Node* newParent, int32_t boneIdx);
346
347 // Project upgrade functions
350};
351
352#define DECLARE_ACTION_INTERFACE(Name) \
353 virtual void Execute() override; \
354 virtual void Reverse() override; \
355 virtual const char* GetName() { return #Name; }
356
357// Actions
358
360{
361public:
362 DECLARE_ACTION_INTERFACE(EditProperty)
363
365 void* owner,
366 PropertyOwnerType ownerType,
367 const std::string& propName,
368 uint32_t index,
369 Datum value);
370
371protected:
372
373 void GatherProps(std::vector<Property>& props);
374 Property* FindProp(std::vector<Property>& props, const std::string& name);
375
376 void* mOwner = nullptr;
379 uint32_t mIndex = 0;
381
384};
385
387{
388public:
389 DECLARE_ACTION_INTERFACE(EditTransforms)
390
392 const std::vector<Node3D*>& nodes,
393 const std::vector<glm::mat4>& newTransforms);
394
395protected:
396 std::vector<Node3D*> mNodes;
397 std::vector<glm::mat4> mNewTransforms;
398 std::vector<glm::mat4> mPrevTransforms;
399};
400
402{
403public:
404 DECLARE_ACTION_INTERFACE(EditWidgetTransforms)
405
407 const std::vector<Widget*>& widgets,
408 const std::vector<WidgetTransformData>& newTransforms);
409
410protected:
411 std::vector<Widget*> mWidgets;
412 std::vector<WidgetTransformData> mNewTransforms;
413 std::vector<WidgetTransformData> mPrevTransforms;
414};
415
417{
418public:
419 DECLARE_ACTION_INTERFACE(SpawnNodes)
420 ActionSpawnNodes(const std::vector<TypeId>& types);
421 ActionSpawnNodes(const std::vector<const char*>& typeNames);
422 ActionSpawnNodes(const std::vector<SceneRef>& scenes);
423 ActionSpawnNodes(const std::vector<Node*>& srcNodes);
424
425 const std::vector<NodePtr>& GetNodes() const { return mNodes; }
426
427protected:
428
429 // Action inputs, only one should be filled.
430 std::vector<TypeId> mSrcTypes;
431 std::vector<const char*> mSrcTypeNames;
432 std::vector<SceneRef> mSrcScenes;
433 std::vector<NodePtr> mSrcNodes;
434
435 // Populated after first Execute()
436 std::vector<NodePtr> mNodes;
437
438 // Populated after first Reverse()
439 std::vector<NodePtr> mParents;
440};
441
443{
444public:
445 DECLARE_ACTION_INTERFACE(DeleteNodes)
446 ActionDeleteNodes(const std::vector<Node*>& nodes);
447protected:
448 std::vector<NodePtr> mNodes;
449 std::vector<NodePtr> mParents;
450 std::vector<int32_t> mChildIndices;
451 std::vector<int32_t> mBoneIndices;
452};
453
455{
456public:
457 DECLARE_ACTION_INTERFACE(AttachNode)
458 ActionAttachNode(Node* node, Node* newParent, int32_t childIndex, int32_t boneIndex);
459protected:
460 NodePtr mNode = nullptr;
461 NodePtr mNewParent = nullptr;
462 NodePtr mPrevParent = nullptr;
463 int32_t mChildIndex = -1;
464 int32_t mPrevChildIndex = -1;
465 int32_t mBoneIndex = -1;
466 int32_t mPrevBoneIndex = -1;
467};
468
470{
471public:
472 DECLARE_ACTION_INTERFACE(SetRootNode)
474protected:
475 NodePtr mNewRoot = nullptr;
476 NodePtr mOldRoot = nullptr;
477 NodePtr mNewRootParent = nullptr;
478 int32_t mNewRootChildIndex = -1;
479};
480
482{
483public:
484 DECLARE_ACTION_INTERFACE(SetWorldRotation)
485 ActionSetWorldRotation(Node3D* node, glm::quat rot);
486protected:
487 Node3D* mNode = nullptr;
488 glm::quat mNewRotation;
489 glm::quat mPrevRotation;
490};
491
493{
494public:
495 DECLARE_ACTION_INTERFACE(SetWorldPosition)
496 ActionSetWorldPosition(Node3D* node, glm::vec3 pos);
497protected:
498 Node3D* mNode = nullptr;
499 glm::vec3 mNewPosition;
500 glm::vec3 mPrevPosition;
501};
502
504{
505public:
506 DECLARE_ACTION_INTERFACE(SetWorldScale)
507 ActionSetWorldScale(Node3D* node, glm::vec3 scale);
508protected:
509 Node3D* mNode = nullptr;
510 glm::vec3 mNewScale;
511 glm::vec3 mPrevScale;
512};
513
515{
516public:
519
520protected:
521
522 Node* mNode = nullptr;
524
525};
526
528{
529public:
532
533protected:
534
535 Node* mNode = nullptr;
537 std::vector<Property> mPrevProperties;
538};
539
541{
542 StaticMesh3D* mMesh3d = nullptr;
543 std::vector<uint32_t> mColors;
544 bool mBakedLight = false;
545};
546
548{
549public:
550 DECLARE_ACTION_INTERFACE(SetInstanceColors);
551 ActionSetInstanceColors(const std::vector<ActionSetInstanceColorsData>& data);
552
553protected:
554
555 std::vector<ActionSetInstanceColorsData> mData;
556 std::vector<ActionSetInstanceColorsData> mPrevData;
557};
558
560{
561public:
562 DECLARE_ACTION_INTERFACE(SetInstanceData);
563 ActionSetInstanceData(InstancedMesh3D* instMesh, int32_t startIndex, const std::vector<MeshInstanceData>& data);
564
565protected:
566 InstancedMesh3D* mInstMesh = nullptr;
567 int32_t mStartIndex = -1;
568
569 std::vector<MeshInstanceData> mData;
570 std::vector<MeshInstanceData> mPrevData;
571};
572
577{
578public:
579 DECLARE_ACTION_INTERFACE(ReplaceWithAsset);
580 ActionReplaceWithAsset(Asset* asset, const std::vector<Node*>& nodes);
581
582protected:
583
584 enum class ReplaceMode
585 {
587 Material,
588 Scene,
589 Invalid
590 };
591
593 ReplaceMode mMode = ReplaceMode::Invalid;
594
595 // For StaticMesh mode
596 std::vector<StaticMesh3D*> mMeshNodes;
597 std::vector<StaticMeshRef> mPrevMeshes;
598
599 // For Material mode
600 std::vector<Mesh3D*> mMatNodes;
601 std::vector<MaterialRef> mPrevMaterials;
602
603 // For Scene mode
611 std::vector<SceneReplaceEntry> mSceneEntries;
612};
613
618{
619public:
620 DECLARE_ACTION_INTERFACE(ReplaceWithInstancedMesh);
621 ActionReplaceWithInstancedMesh(const std::vector<Node*>& nodes, bool merge);
622
623protected:
624
626 {
627 std::vector<NodePtr> mOriginalNodes;
628 std::vector<NodePtr> mOriginalParents;
629 std::vector<int32_t> mOriginalChildIndices;
632 int32_t mInstancedChildIndex = -1;
633 };
634
635 std::vector<GroupEntry> mGroups;
636 bool mFirstExecute = true;
637};
638
643{
644public:
645 DECLARE_ACTION_INTERFACE(ReplaceWithStaticMesh);
646 ActionReplaceWithStaticMesh(const std::vector<Node*>& nodes);
647
648protected:
649
651 {
654 int32_t mOriginalChildIndex = -1;
655 std::vector<NodePtr> mCreatedNodes;
656 };
657
658 std::vector<SplitEntry> mEntries;
659 bool mFirstExecute = true;
660};
661
666{
667public:
668 DECLARE_ACTION_INTERFACE(ParentSelectedWith);
670 const std::vector<Node*>& nodes,
671 TypeId newParentType,
673
674protected:
675 std::vector<NodePtr> mNodes;
676 std::vector<NodePtr> mPrevParents;
677 std::vector<int32_t> mPrevChildIndices;
678 std::vector<int32_t> mPrevBoneIndices;
681 int32_t mCreatedParentChildIndex = -1;
684 bool mFirstExecute = true;
685};
686
687struct VoxelChange;
688class Voxel3D;
689
691{
692public:
694 ActionSetVoxels(Voxel3D* voxel, const std::vector<VoxelChange>& changes);
695
696protected:
697 Voxel3D* mVoxel = nullptr;
698 std::vector<VoxelChange> mChanges;
699};
700
701struct TerrainHeightChange;
702class Terrain3D;
703
705{
706public:
707 DECLARE_ACTION_INTERFACE(SetTerrainHeights);
708 ActionSetTerrainHeights(Terrain3D* terrain, const std::vector<TerrainHeightChange>& changes);
709
710protected:
711 Terrain3D* mTerrain = nullptr;
712 std::vector<TerrainHeightChange> mChanges;
713};
714
715struct TilePaintChange;
716class TileMap2D;
717
719{
720public:
722 ActionPaintTiles(TileMap2D* tileMapNode, const std::vector<TilePaintChange>& changes);
723
724protected:
725 TileMap2D* mTarget = nullptr;
726 std::vector<TilePaintChange> mChanges;
727};
#define DECLARE_ACTION_INTERFACE(Name)
Definition ActionManager.h:352
ArrayOrientation
Definition ArrayWidget.h:11
Platform
Definition EngineTypes.h:31
PropertyOwnerType
Definition EngineTypes.h:148
uint32_t TypeId
Definition EngineTypes.h:64
Definition ActionManager.h:455
Definition ActionManager.h:443
Definition ActionManager.h:360
Datum mPreviousValue
Definition ActionManager.h:383
Property * FindProp(std::vector< Property > &props, const std::string &name)
Datum mValue
Definition ActionManager.h:380
void * mOwner
Definition ActionManager.h:376
void GatherProps(std::vector< Property > &props)
PropertyOwnerType mOwnerType
Definition ActionManager.h:377
std::string mPropertyName
Definition ActionManager.h:378
uint32_t mIndex
Definition ActionManager.h:379
AssetRef mReferencedAsset
Definition ActionManager.h:382
Definition ActionManager.h:387
Definition ActionManager.h:402
Definition ActionManager.h:143
void EXE_TimelineAddClip(Timeline *timeline, int32_t trackIndex, TypeId clipType, float startTime, float duration)
void WriteProjectLocalPolyphaseConfig()
std::string mBuildDisplayOutput
Definition ActionManager.h:269
void AttachSelectedNodes(Node *newParent, int32_t boneIdx)
void BeginImportCamera()
void BeginReimportAssetWithNewFile(AssetStub *stub)
void EXE_DeleteNodes(const std::vector< Node * > &nodes)
bool mShowBuildModal
Definition ActionManager.h:268
void EXE_ReplaceWithInstancedMesh(const std::vector< Node * > &nodes, bool merge)
Replace selected StaticMesh3D nodes with InstancedMesh3D nodes.
static void Create()
void BuildPhase1()
void ImportTinyLLMModel()
void DeleteAssetDir(AssetDir *dir)
void UpgradeProject()
void FinalizeLocalBuild()
void ExecuteAction(Action *action)
Asset * ImportAsset(const std::string &path)
void EXE_SetRootNode(Node *newRoot)
void ImportScene(const SceneImportOptions &options)
void SaveSelectedAsset()
std::vector< NodePtr > mExiledNodes
Definition ActionManager.h:264
Node * EXE_SpawnNode(TypeId srcType)
void PrepareRelease()
void EXE_SetWorldRotation(Node3D *node, glm::quat rot)
void EXE_TimelineRemoveClip(Timeline *timeline, int32_t trackIndex, int32_t clipIndex)
void ClearActionFuture()
void EXE_TimelineMoveClip(Timeline *timeline, int32_t trackIndex, int32_t clipIndex, float oldStartTime, float newStartTime)
void EXE_EditTransform(Node3D *node, const glm::mat4 &transform)
void OnSelectedNodeChanged()
void AppendBuildOutput(const std::string &text)
void EXE_UnlinkScene(Node *node)
void ResaveAllAssets()
void OpenScene(Scene *scene)
void ImportCamera(const CameraImportOptions &options)
void DrawBuildModal()
void ResetUndoRedo()
void BeginImportScene()
void EXE_SetWorldPosition(Node3D *node, glm::vec3 pos)
void EXE_DeleteNode(Node *node)
void RestoreExiledNode(NodePtr node)
void EXE_SetVoxels(class Voxel3D *voxel, const std::vector< struct VoxelChange > &changes)
void EXE_TimelineBindTrack(Timeline *timeline, int32_t trackIndex, uint64_t oldUuid, uint64_t newUuid, const std::string &oldName, const std::string &newName)
void RequestResaveAllAssets()
void EXE_SetInstanceData(InstancedMesh3D *instMesh, int32_t startIndex, const std::vector< MeshInstanceData > &data)
void RequestOpenScene(AssetStub *stub)
Node * EXE_SpawnNode(Scene *srcScene)
void DeleteAllNodes()
void CreateNewProject(const char *folderPath=nullptr, bool cpp=false, const char *defaultSceneName="SC_Default")
static ActionManager * Get()
void OpenScene()
void EXE_TimelineAddTrack(Timeline *timeline, TypeId trackType)
void EXE_SetTerrainHeights(class Terrain3D *terrain, const std::vector< struct TerrainHeightChange > &changes)
static ActionManager * sInstance
Definition ActionManager.h:236
void ExileNode(NodePtr node)
Scene * CreateNewScene(const char *sceneName, int sceneType, bool createCamera, bool createSkybox=false, AssetDir *targetDir=nullptr)
void EXE_PaintTiles(class TileMap2D *tileMapNode, const std::vector< struct TilePaintChange > &changes)
void EXE_EditWidgetTransforms(const std::vector< Widget * > &widgets, const std::vector< WidgetTransformData > &newTransforms)
void ClearActionHistory()
void EXE_ReplaceWithStaticMesh(const std::vector< Node * > &nodes)
Split selected InstancedMesh3D nodes into individual StaticMesh3D nodes.
void GenerateEmbeddedAssetFiles(std::vector< std::pair< AssetStub *, std::string > > &assets, std::vector< EmbeddedRawAssetEntry > &rawAssets, const char *headerPath, const char *sourcePath)
bool DuplicateNodes(std::vector< Node * > nodes)
void EXE_TimelineRemoveTrack(Timeline *timeline, int32_t trackIndex)
void EXE_EditTransforms(const std::vector< Node3D * > &nodes, const std::vector< glm::mat4 > &newTransforms)
void ClearWorld()
void EXE_SetInstanceColors(const std::vector< ActionSetInstanceColorsData > &data)
bool mBuildPending
Definition ActionManager.h:271
LocalBuildState & GetBuildState()
Definition ActionManager.h:336
void RecaptureAndSaveAllScenes()
bool CheckProjectNeedsUpgrade()
void DeleteNode(Node *node)
void EXE_ReplaceSelectedWithAsset(Asset *asset, const std::vector< Node * > &nodes)
Replace selected nodes' mesh/material with an asset, or replace with scene instances.
Node * SpawnNode(TypeId nodeType, Node *parent)
Node * EXE_SpawnNode(const char *srcTypeName)
void ImportAsset()
void RequestSaveScene(bool saveAs)
void OpenProject(const char *path=nullptr)
void RequestSaveSelectedAsset()
void RequestOpenSceneFromDialog()
bool IsBuildRunning() const
void BeginReimportScene(AssetStub *sceneStub)
Node * EXE_SpawnNode(Node *srcNode)
void EXE_ResetScene(Node *node)
bool mBuildAutoScroll
Definition ActionManager.h:270
void RequestOpenProject(const char *path)
LocalBuildState mBuildState
Definition ActionManager.h:267
Node * SpawnBasicNode(const std::string &name, Node *parent, Asset *srcAsset=nullptr, bool setWorldPos=false, glm::vec3 worldPos={ 0.0f, 0.0f, 0.0f })
void ImportTinyLLMTokenizer()
void GatherScriptFiles(const std::string &dir, std::vector< std::string > &outFiles)
void CancelBuild()
std::vector< Action * > mActionHistory
Definition ActionManager.h:262
void BuildData(Platform platform, bool embedded)
void GenerateEmbeddedScriptFiles(std::vector< std::string > files, const char *headerPath, const char *sourcePath)
static void Destroy()
void DeleteAsset(AssetStub *stub)
void EXE_SetWorldScale(Node3D *node, glm::vec3 scale)
void EXE_AttachNode(Node *node, Node *newParent, int32_t childIndex, int32_t boneIndex)
std::vector< Node * > EXE_SpawnNodes(const std::vector< Node * > &nodes)
void DeleteSelectedNodes()
void SaveScene(bool saveAs)
void BuildCompileThreadFunc()
void RunScript()
void EXE_EditProperty(void *owner, PropertyOwnerType ownerType, const std::string &name, uint32_t index, Datum newValue)
Node * SpawnNode(TypeId nodeType, glm::vec3 position)
std::vector< Action * > mActionFuture
Definition ActionManager.h:263
void EXE_ParentSelectedWith(const std::vector< Node * > &nodes, TypeId parentType, ArrayOrientation arrayOrientation=ArrayOrientation::Vertical)
Create a new parent node of the specified type and reparent all selected nodes under it.
Definition ActionManager.h:719
ActionPaintTiles(TileMap2D *tileMapNode, const std::vector< TilePaintChange > &changes)
std::vector< TilePaintChange > mChanges
Definition ActionManager.h:726
DECLARE_ACTION_INTERFACE(PaintTiles)
Action to create a new parent node and reparent selected nodes under it.
Definition ActionManager.h:666
ActionParentSelectedWith(const std::vector< Node * > &nodes, TypeId newParentType, ArrayOrientation arrayOrientation=ArrayOrientation::Vertical)
std::vector< int32_t > mPrevChildIndices
Definition ActionManager.h:677
NodePtr mCreatedParent
Definition ActionManager.h:679
TypeId mNewParentType
Definition ActionManager.h:682
std::vector< NodePtr > mNodes
Definition ActionManager.h:675
NodePtr mCreatedParentParent
Definition ActionManager.h:680
std::vector< NodePtr > mPrevParents
Definition ActionManager.h:676
DECLARE_ACTION_INTERFACE(ParentSelectedWith)
std::vector< int32_t > mPrevBoneIndices
Definition ActionManager.h:678
Action to replace selected nodes' mesh or material with an asset, or replace with scene instances.
Definition ActionManager.h:577
DECLARE_ACTION_INTERFACE(ReplaceWithAsset)
std::vector< Mesh3D * > mMatNodes
Definition ActionManager.h:600
std::vector< MaterialRef > mPrevMaterials
Definition ActionManager.h:601
std::vector< SceneReplaceEntry > mSceneEntries
Definition ActionManager.h:611
ReplaceMode
Definition ActionManager.h:585
AssetRef mAsset
Definition ActionManager.h:592
std::vector< StaticMesh3D * > mMeshNodes
Definition ActionManager.h:596
ActionReplaceWithAsset(Asset *asset, const std::vector< Node * > &nodes)
std::vector< StaticMeshRef > mPrevMeshes
Definition ActionManager.h:597
Action to merge selected StaticMesh3D nodes into InstancedMesh3D nodes grouped by mesh.
Definition ActionManager.h:618
std::vector< GroupEntry > mGroups
Definition ActionManager.h:635
ActionReplaceWithInstancedMesh(const std::vector< Node * > &nodes, bool merge)
DECLARE_ACTION_INTERFACE(ReplaceWithInstancedMesh)
Action to split selected InstancedMesh3D nodes into individual StaticMesh3D nodes.
Definition ActionManager.h:643
DECLARE_ACTION_INTERFACE(ReplaceWithStaticMesh)
std::vector< SplitEntry > mEntries
Definition ActionManager.h:658
ActionReplaceWithStaticMesh(const std::vector< Node * > &nodes)
Definition ActionManager.h:528
SceneRef mScene
Definition ActionManager.h:536
DECLARE_ACTION_INTERFACE(ResetScene)
ActionResetScene(Node *node)
std::vector< Property > mPrevProperties
Definition ActionManager.h:537
Definition ActionManager.h:548
DECLARE_ACTION_INTERFACE(SetInstanceColors)
std::vector< ActionSetInstanceColorsData > mPrevData
Definition ActionManager.h:556
std::vector< ActionSetInstanceColorsData > mData
Definition ActionManager.h:555
ActionSetInstanceColors(const std::vector< ActionSetInstanceColorsData > &data)
Definition ActionManager.h:560
std::vector< MeshInstanceData > mPrevData
Definition ActionManager.h:570
DECLARE_ACTION_INTERFACE(SetInstanceData)
std::vector< MeshInstanceData > mData
Definition ActionManager.h:569
ActionSetInstanceData(InstancedMesh3D *instMesh, int32_t startIndex, const std::vector< MeshInstanceData > &data)
Definition ActionManager.h:470
Definition ActionManager.h:705
ActionSetTerrainHeights(Terrain3D *terrain, const std::vector< TerrainHeightChange > &changes)
DECLARE_ACTION_INTERFACE(SetTerrainHeights)
std::vector< TerrainHeightChange > mChanges
Definition ActionManager.h:712
Definition ActionManager.h:691
std::vector< VoxelChange > mChanges
Definition ActionManager.h:698
DECLARE_ACTION_INTERFACE(SetVoxels)
ActionSetVoxels(Voxel3D *voxel, const std::vector< VoxelChange > &changes)
Definition ActionManager.h:493
Definition ActionManager.h:482
Definition ActionManager.h:504
Definition ActionManager.h:417
std::vector< NodePtr > mParents
Definition ActionManager.h:439
std::vector< TypeId > mSrcTypes
Definition ActionManager.h:430
std::vector< SceneRef > mSrcScenes
Definition ActionManager.h:432
std::vector< NodePtr > mNodes
Definition ActionManager.h:436
std::vector< NodePtr > mSrcNodes
Definition ActionManager.h:433
std::vector< const char * > mSrcTypeNames
Definition ActionManager.h:431
Definition ActionManager.h:515
ActionUnlinkScene(Node *node)
DECLARE_ACTION_INTERFACE(UnlinkScene)
SceneRef mScene
Definition ActionManager.h:523
Definition ActionManager.h:134
virtual void Execute()
virtual ~Action()
Definition ActionManager.h:136
virtual const char * GetName()=0
virtual void Reverse()
Definition AssetDir.h:11
Definition AssetRef.h:18
Definition Asset.h:113
Definition Datum.h:164
Definition InstancedMesh3d.h:13
Definition Material.h:48
Definition Mesh3d.h:13
Definition Node3d.h:14
Definition Node.h:67
Definition Property.h:14
Definition Scene.h:36
Definition StaticMesh3d.h:12
Definition StaticMesh.h:18
Definition Terrain3d.h:13
Definition TileMap2d.h:23
Definition Timeline.h:10
Definition Voxel3d.h:61
Definition Widget.h:53
Definition SmartPointer.h:631
Definition ActionManager.h:244
std::string mLookupKey
Definition ActionManager.h:246
bool mEngineAsset
Definition ActionManager.h:247
std::string mAbsolutePath
Definition ActionManager.h:245
Definition ActionManager.h:605
NodePtr mSpawnedNode
Definition ActionManager.h:609
NodePtr mOriginal
Definition ActionManager.h:606
NodePtr mParent
Definition ActionManager.h:607
Definition ActionManager.h:626
NodePtr mInstancedNode
Definition ActionManager.h:630
std::vector< int32_t > mOriginalChildIndices
Definition ActionManager.h:629
std::vector< NodePtr > mOriginalNodes
Definition ActionManager.h:627
NodePtr mInstancedParent
Definition ActionManager.h:631
std::vector< NodePtr > mOriginalParents
Definition ActionManager.h:628
Definition ActionManager.h:651
NodePtr mOriginalParent
Definition ActionManager.h:653
std::vector< NodePtr > mCreatedNodes
Definition ActionManager.h:655
NodePtr mOriginalNode
Definition ActionManager.h:652
Definition ActionManager.h:541
std::vector< uint32_t > mColors
Definition ActionManager.h:543
Definition Asset.h:82
State for async local build operations.
Definition ActionManager.h:40
std::string mProjectName
Definition ActionManager.h:58
std::string mExtension
Definition ActionManager.h:60
std::string mStripCommand
Definition ActionManager.h:69
std::atomic< int > mExitCode
Definition ActionManager.h:46
bool mUseSteam
Definition ActionManager.h:64
std::string mCompileCommand
Definition ActionManager.h:65
bool mForceRebuild
Definition ActionManager.h:78
Platform mPlatform
Definition ActionManager.h:53
bool mStandalone
Definition ActionManager.h:62
bool mForceCompile
Definition ActionManager.h:82
std::string mPackagedDir
Definition ActionManager.h:55
void Reset()
Definition ActionManager.h:84
int64_t mExeMTimeBeforeBuild
Definition ActionManager.h:61
std::atomic< bool > mCancelRequested
Definition ActionManager.h:43
std::string mBuildProjDir
Definition ActionManager.h:56
std::string mExeSrc
Definition ActionManager.h:59
bool mNeedCompile
Definition ActionManager.h:63
bool mRunOnDevice
Definition ActionManager.h:77
std::string mInjectedVcxprojPath
Definition ActionManager.h:73
std::string mProjectDir
Definition ActionManager.h:57
bool mOutputDirty
Definition ActionManager.h:50
std::string mPrebuiltExePath
Definition ActionManager.h:66
std::string mShaderCompileCommand
Definition ActionManager.h:68
std::string mOutput
Definition ActionManager.h:49
std::mutex mOutputMutex
Definition ActionManager.h:48
std::atomic< bool > mRunning
Definition ActionManager.h:42
std::string mTmpMakefile
Definition ActionManager.h:67
bool mRunAfterBuild
Definition ActionManager.h:76
std::atomic< bool > mComplete
Definition ActionManager.h:44
bool mEmbedded
Definition ActionManager.h:54
std::atomic< bool > mSuccess
Definition ActionManager.h:45
std::thread mBuildThread
Definition ActionManager.h:41
Definition InstancedMesh3d.h:6
Definition ActionManager.h:30
glm::vec2 mOffset
Definition ActionManager.h:31
glm::vec2 mSize
Definition ActionManager.h:32
float mRotation
Definition ActionManager.h:33