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 <unordered_map>
7#include <thread>
8#include <mutex>
9#include <atomic>
10#if PLATFORM_LINUX || PLATFORM_MAC
11#include <sys/types.h>
12#endif
13
14#include "EngineTypes.h"
15#include "EditorTypes.h"
16#include "Asset.h"
17#include "AssetRef.h"
18#include "Nodes/Node.h"
21
22class Node3D;
23class Mesh3D;
24class InstancedMesh3D;
25class Timeline;
26class Widget;
28struct MeshInstanceData;
29
31{
32 glm::vec2 mOffset;
33 glm::vec2 mSize;
34 float mRotation;
35};
36
41{
42 std::thread mBuildThread;
43 std::atomic<bool> mRunning{false};
44 std::atomic<bool> mCancelRequested{false};
45 std::atomic<bool> mComplete{false};
46 std::atomic<bool> mSuccess{false};
47 std::atomic<int> mExitCode{0};
48
49 std::mutex mOutputMutex;
50 std::string mOutput;
51 bool mOutputDirty{false};
52
53 // Build config (set in BuildData, used by Phase1 and compile thread)
60 std::string mTargetId;
68 std::unordered_map<std::string, std::string> mTargetOptions;
69 bool mEmbedded{false};
70
77 bool mStaticContent{false};
78
80 bool mContentPak{false};
81
82 std::string mPackagedDir;
83 std::string mBuildProjDir;
84 std::string mProjectDir;
85 std::string mProjectName;
86 std::string mExeSrc;
87 std::string mExtension;
88 int64_t mExeMTimeBeforeBuild{0}; // stat mtime of mExeSrc before compile, used to detect silent link.exe failures
89 bool mStandalone{false};
90 bool mNeedCompile{true};
91 bool mUseSteam{false};
92 std::string mCompileCommand;
93 std::string mPrebuiltExePath;
94 std::string mTmpMakefile;
96 std::string mStripCommand;
97 // Path to a .vcxproj that was injected with addon sources/includes before the build.
98 // Restored from .vcxproj.orig after the build completes (success or failure) so the
99 // working tree doesn't accumulate uncommitted changes.
101
102 // Post-build flags
103 bool mRunAfterBuild{false};
104 bool mRunOnDevice{false};
105 bool mForceRebuild{false};
107 // Snapshot of mForceRebuild captured in BuildData before it's cleared, so BuildPhase1
108 // can still tell whether the user requested a force rebuild when it decides whether
109 // to reuse the prebuilt Polyphase.exe.
110 bool mForceCompile{false};
111
112 // Stashed by the Android branch: the icon source path resolved from
113 // mTargetOptions["android.iconSource"] (fallback EngineConfig::mIconPath).
114 // Read by the icon-generation step further down the same branch.
116
117 void Reset()
118 {
119 // Thread must be joined before calling Reset
120 mRunning.store(false);
121 mCancelRequested.store(false);
122 mComplete.store(false);
123 mSuccess.store(false);
124 mExitCode.store(0);
125 {
126 std::lock_guard<std::mutex> lock(mOutputMutex);
127 mOutput.clear();
128 mOutputDirty = false;
129 }
131 mTargetId.clear();
132 mTargetOptions.clear();
133 mEmbedded = false;
134 mStaticContent = false;
135 mContentPak = false;
136 mPackagedDir.clear();
137 mBuildProjDir.clear();
138 mProjectDir.clear();
139 mProjectName.clear();
140 mExeSrc.clear();
141 mExtension.clear();
143 mStandalone = false;
144 mNeedCompile = true;
145 mUseSteam = false;
146 mCompileCommand.clear();
147 mPrebuiltExePath.clear();
148 mTmpMakefile.clear();
149 mShaderCompileCommand.clear();
150 mStripCommand.clear();
151 mInjectedVcxprojPath.clear();
152 mRunAfterBuild = false;
153 mRunOnDevice = false;
154 mForceRebuild = false;
155 mForceCompile = false;
158#if PLATFORM_LINUX || PLATFORM_MAC
159 mProcessId = 0;
160#elif PLATFORM_WINDOWS
161 mProcessHandle = nullptr;
162#endif
163 }
164
165#if PLATFORM_LINUX || PLATFORM_MAC
166 pid_t mProcessId{0};
167#elif PLATFORM_WINDOWS
168 void* mProcessHandle{nullptr};
169#endif
170};
171
173{
174public:
175 virtual ~Action() {}
176 virtual void Execute();
177 virtual void Reverse();
178 virtual const char* GetName() = 0;
179};
180
181// Plugin-driven actions — addons push these via the
182// PolyphaseEngineAPI::EditorAction_Push entry. The three callbacks carry
183// arbitrary userData (opaque to the engine); the optional freeFn cleans
184// it up when the action falls out of the history.
185//
186// mPluginTag identifies the owning addon DLL — used by NativeAddonManager
187// during UnloadNativeAddon to scrub any PluginAction whose function
188// pointers live inside the DLL that's about to be FreeLibrary'd. Without
189// this, undoing into a stale history after a hot-reload calls into freed
190// memory.
191class PluginAction : public Action
192{
193public:
194 using DoFn = void (*)(void* userData);
195 using UndoFn = void (*)(void* userData);
196 using FreeFn = void (*)(void* userData);
197
198 PluginAction(const char* name, DoFn doFn, UndoFn undoFn,
199 FreeFn freeFn, void* userData);
200 ~PluginAction() override;
201
202 void Execute() override;
203 void Reverse() override;
204 const char* GetName() override;
205
206 void SetPluginTag(const std::string& tag) { mPluginTag = tag; }
207 const std::string& GetPluginTag() const { return mPluginTag; }
208
209private:
210 std::string mName;
211 std::string mPluginTag;
212 DoFn mDoFn = nullptr;
213 UndoFn mUndoFn = nullptr;
214 FreeFn mFreeFn = nullptr;
215 void* mUserData = nullptr;
216};
217
218// Groups multiple actions into a single undo step. Used by plugin
219// EditorAction_BeginGroup / EditorAction_EndGroup so a continuous
220// paint-drag (which may push 60+ spawn actions per second) is one
221// Ctrl+Z.
222class ActionGroup : public Action
223{
224public:
225 explicit ActionGroup(const char* name);
226 ~ActionGroup() override;
227
228 void Add(Action* a); // takes ownership
229 bool IsEmpty() const { return mChildren.empty(); }
230
231 void Execute() override; // forward order
232 void Reverse() override; // reverse order
233 const char* GetName() override;
234
235 std::vector<Action*>& GetChildren() { return mChildren; }
236 const std::vector<Action*>& GetChildren() const { return mChildren; }
237
238private:
239 std::string mName;
240 std::vector<Action*> mChildren;
241};
242
244{
245public:
246
248
249 static void Create();
250 static void Destroy();
252
253 void Update();
254
256
257 Node* SpawnNode(TypeId nodeType, Node* parent);
258 Node* SpawnNode(TypeId nodeType, glm::vec3 position);
259
260 Node* SpawnBasicNode(const std::string& name, Node* parent, Asset* srcAsset = nullptr, bool setWorldPos = false, glm::vec3 worldPos = { 0.0f, 0.0f, 0.0f });
261
262 void ExecuteAction(Action* action);
263 void Undo();
264 void Redo();
265
266 // Plugin-action group helpers (used by EditorAction_BeginGroup /
267 // EditorAction_EndGroup). Nesting is supported — the outermost
268 // Begin starts the group; the matching End closes it and pushes
269 // a single ActionGroup onto the history.
270 void BeginActionGroup(const char* name);
272
273 // Walk mActionHistory + mActionFuture and drop any PluginAction
274 // (or ActionGroup containing one) whose mPluginTag matches `tag`.
275 // Called from NativeAddonManager::UnloadNativeAddon BEFORE the DLL
276 // is FreeLibrary'd, so the function pointers stored on the action
277 // are still valid when freeFn fires.
278 void PurgePluginActions(const std::string& pluginTag);
279
280 // Actions
281 void EXE_EditProperty(void* owner, PropertyOwnerType ownerType, const std::string& name, uint32_t index, Datum newValue);
282 void EXE_EditPropertyOnSelection(void* owner, PropertyOwnerType ownerType, const std::string& name, uint32_t index, Datum newValue);
283 void EXE_EditTransform(Node3D* node, const glm::mat4& transform);
284 void EXE_EditTransforms(const std::vector<Node3D*>& nodes, const std::vector<glm::mat4>& newTransforms);
285 void EXE_EditWidgetTransforms(const std::vector<Widget*>& widgets, const std::vector<WidgetTransformData>& newTransforms);
287 Node* EXE_SpawnNode(const char* srcTypeName);
290 void EXE_DeleteNode(Node* node);
291 std::vector<Node*> EXE_SpawnNodes(const std::vector<Node*>& nodes);
292 void EXE_DeleteNodes(const std::vector<Node*>& nodes);
293 void EXE_AttachNode(Node* node, Node* newParent, int32_t childIndex, int32_t boneIndex, const char* socketName = nullptr);
294 void EXE_SetRootNode(Node* newRoot);
295 void EXE_SetWorldRotation(Node3D* node, glm::quat rot);
296 void EXE_SetWorldPosition(Node3D* node, glm::vec3 pos);
297 void EXE_SetWorldScale(Node3D* node, glm::vec3 scale);
299 void EXE_ResetScene(Node* node);
300 void EXE_SetInstanceColors(const std::vector<ActionSetInstanceColorsData>& data);
301 void EXE_SetVoxels(class Voxel3D* voxel, const std::vector<struct VoxelChange>& changes);
302 void EXE_SetTerrainHeights(class Terrain3D* terrain, const std::vector<struct TerrainHeightChange>& changes);
303 void EXE_PaintTiles(class TileMap2D* tileMapNode, const std::vector<struct TilePaintChange>& changes);
304 void EXE_SetInstanceData(InstancedMesh3D* instMesh, int32_t startIndex, const std::vector<MeshInstanceData>& data);
305
311 void EXE_ReplaceSelectedWithAsset(Asset* asset, const std::vector<Node*>& nodes);
312
318 void EXE_ReplaceWithInstancedMesh(const std::vector<Node*>& nodes, bool merge);
319
324 void EXE_ReplaceWithStaticMesh(const std::vector<Node*>& nodes);
325
332 void EXE_ParentSelectedWith(const std::vector<Node*>& nodes, TypeId parentType,
334
341 void EXE_ReplaceNodeType(Node* oldNode, TypeId newType);
342
343 // Timeline actions
344 void EXE_TimelineAddTrack(Timeline* timeline, TypeId trackType);
345 void EXE_TimelineRemoveTrack(Timeline* timeline, int32_t trackIndex);
346 void EXE_TimelineAddClip(Timeline* timeline, int32_t trackIndex, TypeId clipType, float startTime, float duration);
347 void EXE_TimelineRemoveClip(Timeline* timeline, int32_t trackIndex, int32_t clipIndex);
348 void EXE_TimelineMoveClip(Timeline* timeline, int32_t trackIndex, int32_t clipIndex, float oldStartTime, float newStartTime);
349 void EXE_TimelineBindTrack(Timeline* timeline, int32_t trackIndex, uint64_t oldUuid, uint64_t newUuid, const std::string& oldName, const std::string& newName);
350
354 void ExileNode(NodePtr node);
356 void GatherScriptFiles(const std::string& dir, std::vector<std::string>& outFiles);
357
366 void ObfuscatePackagedContent(const std::string& packagedDir);
367
376 bool PackPackagedContent(const std::string& packagedDir,
377 const std::string& projectName,
378 bool contentIsEmbedded);
379
380protected:
381
384
385 // Raw (non-.oct) file entry to embed into gEmbeddedRawAssets[].
386 // mLookupKey is the canonical VFS lookup path the runtime will use
387 // (projectDir-relative, forward slashes, e.g. "Assets/intro.mp4" or
388 // "Packages/videoplayer/Assets/test.mp4").
390 {
391 std::string mAbsolutePath;
392 std::string mLookupKey;
393 bool mEngineAsset = false;
394 };
395
397 std::vector<std::pair<AssetStub*, std::string> >& assets,
398 std::vector<EmbeddedRawAssetEntry>& rawAssets,
399 const char* headerPath,
400 const char* sourcePath);
401
403 std::vector<std::string> files,
404 const char* headerPath,
405 const char* sourcePath);
406
407
408 std::vector<Action*> mActionHistory;
409 std::vector<Action*> mActionFuture;
410 std::vector<NodePtr> mExiledNodes;
411
412 // Open plugin-action group; non-null between BeginActionGroup
413 // and the outermost matching EndActionGroup.
415 int mGroupDepth = 0;
416
417 // Non-blocking build state
419 bool mShowBuildModal = false;
421 bool mBuildAutoScroll = true;
422 bool mBuildPending = false;
423
424 // Extract-skeletal-animations modal state. Lives here because the modal
425 // body is drawn from the editor's per-frame loop via
426 // DrawExtractSkeletalAnimationsModal — same pattern as DrawBuildModal.
428 std::vector<uint8_t> mExtractSkelAnimSelections; // 1 byte per anim, 0/1
429 char mExtractSkelAnimPrefix[32] = "SA_";
434
435 // Import-animations modal state (animation-only fbx/glb).
438 std::vector<std::string> mImportAnimNames;
439 std::vector<uint8_t> mImportAnimSelections;
440 char mImportAnimPrefix[32] = "SA_";
442 bool mImportAnimUnique = true;
444
445 // Retarget-animation modal state.
449 char mRetargetOutputName[128] = "";
450 int32_t mRetargetMode = 0; // 0=NameRemap, 1=ReferencePose
451 bool mRetargetOverwrite = false;
452 bool mRetargetUnique = true;
453 bool mShowRetargetModal = false;
455
459 // Runs the active target's PostPackage callback (if any) against an
460 // already-populated Packaged dir. Returns false when the callback fails.
461 bool RunPostPackage(Platform platform, const std::string& projectName, const std::string& projectDir,
462 const std::string& packagedDir, const std::string& compiledBinaryDir);
464
465public:
466
467 // Public so the build-context WriteOutputLine trampoline can forward a
468 // target's PostPackage progress into the PackagingWindow log.
469 void AppendBuildOutput(const std::string& text);
470
471 // Actions
472 void CreateNewProject(const char* folderPath = nullptr, bool cpp = false, const char* defaultSceneName = "SC_Default");
473 void OpenProject(const char* path = nullptr);
474
475 // Drop Directory.Build.props + PolyphaseConfig.cmake at the project
476 // root recording the engine path. Lets addons under <project>/Packages
477 // build via Visual Studio / cmake without env-var setup. Called from
478 // OpenProject each time a project loads, so the recorded path stays in
479 // sync with whichever editor binary opened the project.
481
482 void OpenScene();
484 // Defer OpenScene so the progress modal renders before Scene::Instantiate
485 // (which builds the node tree) blocks the main thread on large scenes.
486 // Pass nullptr to trigger the OS file dialog inside the worker; pass a
487 // stub to open that scene directly (same as the non-Request OpenScene).
490 POLYPHASE_API void SaveScene(bool saveAs);
491 // Defer SaveScene/SaveSelectedAsset/ResaveAllAssets to end-of-frame so the
492 // progress modal can render before the (potentially slow) capture and
493 // serialization work blocks the main thread. The hotkey / menu /
494 // command path should prefer these wrappers; SaveScene() etc. remain
495 // available for callers that need synchronous semantics (e.g. the REST
496 // controller, where the response must include the result).
497 void RequestSaveScene(bool saveAs);
502 // Queue non-mesh asset imports for end-of-frame. Appends to any imports
503 // already pending so a batch (file dialog multi-select, drag-drop) runs
504 // under one progress modal. Use ImportAsset(path) directly only where a
505 // synchronous result is required (REST controller).
506 void RequestImportAssets(const std::vector<std::string>& paths);
507 // End-of-frame worker for RequestImportAssets. Called from EditorMain.cpp.
509 // Defer OpenProject so the progress modal renders before LoadProject's
510 // (potentially many-second) Purge / ReloadAddons / Discover sequence
511 // blocks the main thread. Pass empty/null path to trigger the OS folder
512 // picker inside the worker (same as direct OpenProject).
513 void RequestOpenProject(const char* path);
514 // File > Close Project — closes the current project at end-of-frame.
515 // Unloads every native addon DLL on the way out so addon Intermediate
516 // folders are no longer file-locked and the user can rebuild on demand.
518 // Tools > Addons > Recover from stuck addons — Tier-2 recovery.
519 void RequestAddonRecovery(const char* reason);
520 // Tools > Addons > Restart Editor (Clean Addon Rebuild) — Tier-3 recovery.
521 // Spawns a new editor process, then exits the current one (Job Object
522 // teardown reliably kills mspdbsrv); the new instance picks up
523 // --addon-recovery and wipes intermediates before opening the project.
524 void RequestEditorRestartForAddonRecovery(const char* reason);
525 // Synchronous Tier-2 / Tier-3 implementations. Called by the EditorMain
526 // deferred-dispatcher after the request flag is set; safe to call
527 // directly when no progress modal is in flight.
529 void RecoverFromStuckAddons(const char* reason);
530 void RestartEditorForAddonRecovery(const char* reason);
531 // sceneType: 0 = 2D Canvas root, 1 = 3D Node3D root. targetDir defaults to the
532 // editor's currently-selected asset directory. Returns the created Scene asset
533 // (already saved to disk) or nullptr on failure.
534 POLYPHASE_API Scene* CreateNewScene(const char* sceneName, int sceneType, bool createCamera, bool createSkybox = false, bool createDirectionalLight = false, bool createUICanvas = false, AssetDir* targetDir = nullptr);
537 void DeleteNode(Node* node);
538 void RunScript();
540 // POLYPHASE_API: the per-asset mesh importers, exposed so an addon can drive
541 // a conversion pipeline without going through ImportScene -- which ends in
542 // OpenEditScene and so requires a fully initialized editor.
543 POLYPHASE_API Asset* ImportAsset(const std::string& path, const std::string& overrideBaseName = "", const MeshImportOptions* meshOpts = nullptr);
544 POLYPHASE_API Asset* ImportAssetCombined(const std::string& path, const std::string& overrideBaseName = "", const MeshImportOptions* meshOpts = nullptr);
545
546 // Loose-file import: copies the user-picked file(s) into the current
547 // AssetDir verbatim (no .oct conversion) and registers them with the
548 // packager. Files survive packaging as-is; Lua/native code reads them
549 // via Stream::ReadFile / SYS_AcquireFileData. Used for .json, media,
550 // and arbitrary data files an addon or script wants to ship.
552 void ImportLooseFile(const std::string& sourcePath, AssetDir* targetDir);
555 void ImportCamera(const CameraImportOptions& options);
556 // Returns the created (or reimported) Scene asset, or nullptr on failure.
557 POLYPHASE_API Asset* ImportScene(const SceneImportOptions& options);
561
562 // Extract embedded animations from a SkeletalMesh asset into standalone
563 // SkeletalAnimationAsset files. BeginExtractSkeletalAnimations opens the
564 // selection modal; ExtractSkeletalAnimations runs the actual generation.
566 {
569 std::vector<uint32_t> mAnimationIndices; // empty = all
570 std::string mPrefix = "SA_";
571 bool mOverwriteExisting = false;
572 bool mUniqueNames = true;
574 };
578
579 // Import animations from an animation-only .fbx/.glb/.gltf/.dae file
580 // (or any model file the user picks — only the embedded clips are read).
582 {
583 std::string mSourcePath;
585 std::vector<uint32_t> mAnimationIndices; // empty = all
586 std::string mPrefix = "SA_";
587 bool mOverwriteExisting = false;
588 bool mUniqueNames = true;
589 };
590 void BeginImportAnimations(AssetDir* targetDir = nullptr);
593
594 // Bake a target-rig-compatible clip from a source SkeletalAnimationAsset
595 // and a pair of HumanoidAvatarAssets. The bake mode is the user-selected
596 // tier (name-only remap vs reference-pose-aware).
598 {
603 std::string mOutputName; // empty = derive from src clip
604 int32_t mMode = 0; // 0=NameRemap, 1=ReferencePose
605 bool mOverwriteExisting = false;
606 bool mUniqueNames = true;
607 };
608 void BeginRetargetAnimation(AssetStub* sourceClipStub);
609 // POLYPHASE_API: takes an explicit mTargetDir, so unlike most import actions
610 // it never reads EditorState::GetAssetDirectory() and is callable from a
611 // headless cook.
615 void BuildData(Platform platform, bool embedded);
625 void BuildData(const std::string& targetId, bool embedded);
637 static bool LaunchDesktopBuild(Platform platform, const std::string& outputPath);
639 bool IsBuildRunning() const;
648 bool DuplicateNodes(std::vector<Node*> nodes);
649 void AttachSelectedNodes(Node* newParent, int32_t boneIdx);
650 void AttachSelectedNodesToSocket(Node* newParent, const char* socketName);
651
652 // Project upgrade functions
655};
656
657#define DECLARE_ACTION_INTERFACE(Name) \
658 virtual void Execute() override; \
659 virtual void Reverse() override; \
660 virtual const char* GetName() { return #Name; }
661
662// Actions
663
665{
666public:
667 DECLARE_ACTION_INTERFACE(EditProperty)
668
670 void* owner,
671 PropertyOwnerType ownerType,
672 const std::string& propName,
673 uint32_t index,
674 Datum value);
675
676protected:
677
678 void GatherProps(std::vector<Property>& props);
679 Property* FindProp(std::vector<Property>& props, const std::string& name);
680
681 void* mOwner = nullptr;
684 uint32_t mIndex = 0;
686
689};
690
691// Multi-target counterpart to ActionEditProperty: applies the same value to
692// every target whose GatherProperties() yields a property of the same name
693// AND same DatumType as the source. Targets without that property (or with a
694// type mismatch) are silently skipped and not recorded for undo. One composite
695// action = one undo step. Used by the Properties panel when the user edits a
696// property with multiple Nodes selected in the Scene Hierarchy.
698{
699public:
700 DECLARE_ACTION_INTERFACE(EditProperties)
701
703 const std::vector<void*>& owners,
704 PropertyOwnerType ownerType,
705 const std::string& propName,
706 uint32_t index,
707 Datum value,
708 DatumType sourceType);
709
710protected:
711
712 void GatherPropsFor(void* owner, std::vector<Property>& props);
713
714 std::vector<void*> mOwners;
717 uint32_t mIndex = 0;
718 DatumType mSourceType = DatumType::Count;
720
721 std::vector<AssetRef> mReferencedAssets;
722 std::vector<Datum> mPreviousValues;
723 std::vector<bool> mApplied;
724};
725
727{
728public:
729 DECLARE_ACTION_INTERFACE(EditTransforms)
730
732 const std::vector<Node3D*>& nodes,
733 const std::vector<glm::mat4>& newTransforms);
734
735protected:
736 std::vector<Node3D*> mNodes;
737 std::vector<glm::mat4> mNewTransforms;
738 std::vector<glm::mat4> mPrevTransforms;
739};
740
742{
743public:
744 DECLARE_ACTION_INTERFACE(EditWidgetTransforms)
745
747 const std::vector<Widget*>& widgets,
748 const std::vector<WidgetTransformData>& newTransforms);
749
750protected:
751 std::vector<Widget*> mWidgets;
752 std::vector<WidgetTransformData> mNewTransforms;
753 std::vector<WidgetTransformData> mPrevTransforms;
754};
755
757{
758public:
759 DECLARE_ACTION_INTERFACE(SpawnNodes)
760 ActionSpawnNodes(const std::vector<TypeId>& types);
761 ActionSpawnNodes(const std::vector<const char*>& typeNames);
762 ActionSpawnNodes(const std::vector<SceneRef>& scenes);
763 ActionSpawnNodes(const std::vector<Node*>& srcNodes);
764
765 const std::vector<NodePtr>& GetNodes() const { return mNodes; }
766
767protected:
768
769 // Action inputs, only one should be filled.
770 std::vector<TypeId> mSrcTypes;
771 std::vector<const char*> mSrcTypeNames;
772 std::vector<SceneRef> mSrcScenes;
773 std::vector<NodePtr> mSrcNodes;
774
775 // Populated after first Execute()
776 std::vector<NodePtr> mNodes;
777
778 // Populated after first Reverse()
779 std::vector<NodePtr> mParents;
780};
781
783{
784public:
785 DECLARE_ACTION_INTERFACE(DeleteNodes)
786 ActionDeleteNodes(const std::vector<Node*>& nodes);
787protected:
788 std::vector<NodePtr> mNodes;
789 std::vector<NodePtr> mParents;
790 std::vector<int32_t> mChildIndices;
791 std::vector<int32_t> mBoneIndices;
792};
793
795{
796public:
797 DECLARE_ACTION_INTERFACE(AttachNode)
798 // socketName attaches to a named socket instead of a raw bone index. Passing
799 // it keeps the reparent and the socket assignment in a single undo step.
800 ActionAttachNode(Node* node, Node* newParent, int32_t childIndex, int32_t boneIndex, const char* socketName = nullptr);
801protected:
802 NodePtr mNode = nullptr;
803 NodePtr mNewParent = nullptr;
804 NodePtr mPrevParent = nullptr;
805 int32_t mChildIndex = -1;
806 int32_t mPrevChildIndex = -1;
807 int32_t mBoneIndex = -1;
808 int32_t mPrevBoneIndex = -1;
809 std::string mSocketName;
810 std::string mPrevSocketName;
811};
812
814{
815public:
816 DECLARE_ACTION_INTERFACE(SetRootNode)
818protected:
819 NodePtr mNewRoot = nullptr;
820 NodePtr mOldRoot = nullptr;
821 NodePtr mNewRootParent = nullptr;
822 int32_t mNewRootChildIndex = -1;
823};
824
826{
827public:
828 DECLARE_ACTION_INTERFACE(SetWorldRotation)
829 ActionSetWorldRotation(Node3D* node, glm::quat rot);
830protected:
831 Node3D* mNode = nullptr;
832 glm::quat mNewRotation;
833 glm::quat mPrevRotation;
834};
835
837{
838public:
839 DECLARE_ACTION_INTERFACE(SetWorldPosition)
840 ActionSetWorldPosition(Node3D* node, glm::vec3 pos);
841protected:
842 Node3D* mNode = nullptr;
843 glm::vec3 mNewPosition;
844 glm::vec3 mPrevPosition;
845};
846
848{
849public:
850 DECLARE_ACTION_INTERFACE(SetWorldScale)
851 ActionSetWorldScale(Node3D* node, glm::vec3 scale);
852protected:
853 Node3D* mNode = nullptr;
854 glm::vec3 mNewScale;
855 glm::vec3 mPrevScale;
856};
857
859{
860public:
863
864protected:
865
866 Node* mNode = nullptr;
868
869};
870
872{
873public:
876
877protected:
878
879 Node* mNode = nullptr;
881 std::vector<Property> mPrevProperties;
882};
883
885{
886 StaticMesh3D* mMesh3d = nullptr;
887 std::vector<uint32_t> mColors;
888 bool mBakedLight = false;
889};
890
892{
893public:
894 DECLARE_ACTION_INTERFACE(SetInstanceColors);
895 ActionSetInstanceColors(const std::vector<ActionSetInstanceColorsData>& data);
896
897protected:
898
899 std::vector<ActionSetInstanceColorsData> mData;
900 std::vector<ActionSetInstanceColorsData> mPrevData;
901};
902
904{
905public:
906 DECLARE_ACTION_INTERFACE(SetInstanceData);
907 ActionSetInstanceData(InstancedMesh3D* instMesh, int32_t startIndex, const std::vector<MeshInstanceData>& data);
908
909protected:
910 InstancedMesh3D* mInstMesh = nullptr;
911 int32_t mStartIndex = -1;
912
913 std::vector<MeshInstanceData> mData;
914 std::vector<MeshInstanceData> mPrevData;
915};
916
921{
922public:
923 DECLARE_ACTION_INTERFACE(ReplaceWithAsset);
924 ActionReplaceWithAsset(Asset* asset, const std::vector<Node*>& nodes);
925
926protected:
927
928 enum class ReplaceMode
929 {
931 Material,
932 Scene,
933 Invalid
934 };
935
937 ReplaceMode mMode = ReplaceMode::Invalid;
938
939 // For StaticMesh mode
940 std::vector<StaticMesh3D*> mMeshNodes;
941 std::vector<StaticMeshRef> mPrevMeshes;
942
943 // For Material mode
944 std::vector<Mesh3D*> mMatNodes;
945 std::vector<MaterialRef> mPrevMaterials;
946
947 // For Scene mode
955 std::vector<SceneReplaceEntry> mSceneEntries;
956};
957
962{
963public:
964 DECLARE_ACTION_INTERFACE(ReplaceWithInstancedMesh);
965 ActionReplaceWithInstancedMesh(const std::vector<Node*>& nodes, bool merge);
966
967protected:
968
970 {
971 std::vector<NodePtr> mOriginalNodes;
972 std::vector<NodePtr> mOriginalParents;
973 std::vector<int32_t> mOriginalChildIndices;
976 int32_t mInstancedChildIndex = -1;
977 };
978
979 std::vector<GroupEntry> mGroups;
980 bool mFirstExecute = true;
981};
982
987{
988public:
989 DECLARE_ACTION_INTERFACE(ReplaceWithStaticMesh);
990 ActionReplaceWithStaticMesh(const std::vector<Node*>& nodes);
991
992protected:
993
995 {
998 int32_t mOriginalChildIndex = -1;
999 std::vector<NodePtr> mCreatedNodes;
1000 };
1001
1002 std::vector<SplitEntry> mEntries;
1003 bool mFirstExecute = true;
1004};
1005
1010{
1011public:
1012 DECLARE_ACTION_INTERFACE(ParentSelectedWith);
1014 const std::vector<Node*>& nodes,
1015 TypeId newParentType,
1016 ArrayOrientation arrayOrientation = ArrayOrientation::Vertical);
1017
1018protected:
1019 std::vector<NodePtr> mNodes;
1020 std::vector<NodePtr> mPrevParents;
1021 std::vector<int32_t> mPrevChildIndices;
1022 std::vector<int32_t> mPrevBoneIndices;
1025 int32_t mCreatedParentChildIndex = -1;
1028 bool mFirstExecute = true;
1029};
1030
1038{
1039public:
1042
1043protected:
1047 int32_t mChildIndex = -1;
1048 std::vector<NodePtr> mMovedChildren;
1050 uint64_t mSavedUuid = 0;
1051 bool mFirstExecute = true;
1052};
1053
1054struct VoxelChange;
1055class Voxel3D;
1056
1058{
1059public:
1061 ActionSetVoxels(Voxel3D* voxel, const std::vector<VoxelChange>& changes);
1062
1063protected:
1064 Voxel3D* mVoxel = nullptr;
1065 std::vector<VoxelChange> mChanges;
1066};
1067
1068struct TerrainHeightChange;
1069class Terrain3D;
1070
1072{
1073public:
1074 DECLARE_ACTION_INTERFACE(SetTerrainHeights);
1075 ActionSetTerrainHeights(Terrain3D* terrain, const std::vector<TerrainHeightChange>& changes);
1076
1077protected:
1078 Terrain3D* mTerrain = nullptr;
1079 std::vector<TerrainHeightChange> mChanges;
1080};
1081
1082struct TilePaintChange;
1083class TileMap2D;
1084
1086{
1087public:
1089 ActionPaintTiles(TileMap2D* tileMapNode, const std::vector<TilePaintChange>& changes);
1090
1091protected:
1092 TileMap2D* mTarget = nullptr;
1093 std::vector<TilePaintChange> mChanges;
1094};
#define DECLARE_ACTION_INTERFACE(Name)
Definition ActionManager.h:657
ArrayOrientation
Definition ArrayWidget.h:11
DatumType
Definition Datum.h:29
Platform
Definition EngineTypes.h:32
PropertyOwnerType
Definition EngineTypes.h:159
uint32_t TypeId
Definition EngineTypes.h:75
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Definition ActionManager.h:795
Definition ActionManager.h:783
Definition ActionManager.h:698
Definition ActionManager.h:665
Datum mPreviousValue
Definition ActionManager.h:688
Property * FindProp(std::vector< Property > &props, const std::string &name)
Datum mValue
Definition ActionManager.h:685
void * mOwner
Definition ActionManager.h:681
void GatherProps(std::vector< Property > &props)
PropertyOwnerType mOwnerType
Definition ActionManager.h:682
std::string mPropertyName
Definition ActionManager.h:683
uint32_t mIndex
Definition ActionManager.h:684
AssetRef mReferencedAsset
Definition ActionManager.h:687
Definition ActionManager.h:727
Definition ActionManager.h:742
Definition ActionManager.h:223
ActionGroup(const char *name)
bool IsEmpty() const
Definition ActionManager.h:229
std::vector< Action * > & GetChildren()
Definition ActionManager.h:235
void Reverse() override
~ActionGroup() override
void Execute() override
const std::vector< Action * > & GetChildren() const
Definition ActionManager.h:236
const char * GetName() override
void Add(Action *a)
Definition ActionManager.h:244
void EXE_TimelineAddClip(Timeline *timeline, int32_t trackIndex, TypeId clipType, float startTime, float duration)
void WriteProjectLocalPolyphaseConfig()
std::string mBuildDisplayOutput
Definition ActionManager.h:420
bool mImportAnimOverwrite
Definition ActionManager.h:441
AssetRef mRetargetDstAvatar
Definition ActionManager.h:448
void RequestCloseProject()
void AttachSelectedNodes(Node *newParent, int32_t boneIdx)
bool mExtractSkelAnimOverwrite
Definition ActionManager.h:430
bool mShowRetargetModal
Definition ActionManager.h:453
void BeginActionGroup(const char *name)
POLYPHASE_API Asset * ImportAsset(const std::string &path, const std::string &overrideBaseName="", const MeshImportOptions *meshOpts=nullptr)
void RequestBakeOcclusion()
void BeginImportCamera()
bool PackPackagedContent(const std::string &packagedDir, const std::string &projectName, bool contentIsEmbedded)
Content Pak: fold shipped content into a single Content.pak.
bool mRetargetModalJustOpened
Definition ActionManager.h:454
void BeginReimportAssetWithNewFile(AssetStub *stub)
void DrawRetargetAnimationModal()
void EXE_DeleteNodes(const std::vector< Node * > &nodes)
bool mShowBuildModal
Definition ActionManager.h:419
std::string mImportAnimSourcePath
Definition ActionManager.h:436
AssetStub * mRetargetClipStub
Definition ActionManager.h:446
void EXE_ReplaceWithInstancedMesh(const std::vector< Node * > &nodes, bool merge)
Replace selected StaticMesh3D nodes with InstancedMesh3D nodes.
static void Create()
void EndActionGroup()
void EXE_EditPropertyOnSelection(void *owner, PropertyOwnerType ownerType, const std::string &name, uint32_t index, Datum newValue)
void BuildPhase1()
void ImportTinyLLMModel()
void RestartEditorForAddonRecovery(const char *reason)
void DeleteAssetDir(AssetDir *dir)
void UpgradeProject()
void FinalizeLocalBuild()
void ExecuteAction(Action *action)
POLYPHASE_API void SaveScene(bool saveAs)
void EXE_SetRootNode(Node *newRoot)
void SaveSelectedAsset()
void BeginImportAnimations(AssetDir *targetDir=nullptr)
std::vector< NodePtr > mExiledNodes
Definition ActionManager.h:410
Node * EXE_SpawnNode(TypeId srcType)
void EXE_ReplaceNodeType(Node *oldNode, TypeId newType)
Replace a node with a new node of a different type, preserving position in parent,...
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 PurgePluginActions(const std::string &pluginTag)
void EXE_UnlinkScene(Node *node)
POLYPHASE_API bool RetargetAnimation(const RetargetAnimationOptions &options)
void ResaveAllAssets()
void ImportCamera(const CameraImportOptions &options)
int32_t mRetargetMode
Definition ActionManager.h:450
void DrawBuildModal()
bool mShowImportAnimModal
Definition ActionManager.h:443
void RequestClearOcclusion()
void ResetUndoRedo()
void BeginImportScene()
void EXE_SetWorldPosition(Node3D *node, glm::vec3 pos)
bool mImportAnimUnique
Definition ActionManager.h:442
void AttachSelectedNodesToSocket(Node *newParent, const char *socketName)
bool mExtractSkelAnimRemoveEmbedded
Definition ActionManager.h:432
void EXE_DeleteNode(Node *node)
void RestoreExiledNode(NodePtr node)
void EXE_SetVoxels(class Voxel3D *voxel, const std::vector< struct VoxelChange > &changes)
char mRetargetOutputName[128]
Definition ActionManager.h:449
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 ImportLooseFile()
void CreateNewProject(const char *folderPath=nullptr, bool cpp=false, const char *defaultSceneName="SC_Default")
void OpenScene()
void EXE_TimelineAddTrack(Timeline *timeline, TypeId trackType)
void DrawExtractSkeletalAnimationsModal()
void RecoverFromStuckAddons(const char *reason)
void EXE_SetTerrainHeights(class Terrain3D *terrain, const std::vector< struct TerrainHeightChange > &changes)
static ActionManager * sInstance
Definition ActionManager.h:382
bool ImportAnimations(const ImportAnimationsOptions &options)
void BeginRetargetAnimation(AssetStub *sourceClipStub)
AssetDir * mImportAnimTargetDir
Definition ActionManager.h:437
void RequestImportAssets(const std::vector< std::string > &paths)
bool mRetargetUnique
Definition ActionManager.h:452
bool ExtractSkeletalAnimations(const ExtractSkeletalAnimationsOptions &options)
static POLYPHASE_API ActionManager * Get()
void ExileNode(NodePtr node)
AssetStub * mExtractSkelAnimSourceStub
Definition ActionManager.h:427
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()
char mExtractSkelAnimPrefix[32]
Definition ActionManager.h:429
std::vector< std::string > mImportAnimNames
Definition ActionManager.h:438
std::vector< uint8_t > mImportAnimSelections
Definition ActionManager.h:439
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)
POLYPHASE_API Asset * ImportAssetCombined(const std::string &path, const std::string &overrideBaseName="", const MeshImportOptions *meshOpts=nullptr)
bool mExtractSkelAnimUnique
Definition ActionManager.h:431
void BuildData(const std::string &targetId, bool embedded)
Run a build against a registered build target by id.
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()
bool mRetargetOverwrite
Definition ActionManager.h:451
void EXE_AttachNode(Node *node, Node *newParent, int32_t childIndex, int32_t boneIndex, const char *socketName=nullptr)
void EXE_SetInstanceColors(const std::vector< ActionSetInstanceColorsData > &data)
bool mBuildPending
Definition ActionManager.h:422
void CloseProject()
LocalBuildState & GetBuildState()
Definition ActionManager.h:640
POLYPHASE_API Scene * CreateNewScene(const char *sceneName, int sceneType, bool createCamera, bool createSkybox=false, bool createDirectionalLight=false, bool createUICanvas=false, AssetDir *targetDir=nullptr)
void RecaptureAndSaveAllScenes()
POLYPHASE_API Asset * ImportScene(const SceneImportOptions &options)
void ObfuscatePackagedContent(const std::string &packagedDir)
Static Build: obfuscate shipped content under the staging dir.
bool CheckProjectNeedsUpgrade()
void DeleteNode(Node *node)
ActionGroup * mOpenGroup
Definition ActionManager.h:414
void EXE_ReplaceSelectedWithAsset(Asset *asset, const std::vector< Node * > &nodes)
Replace selected nodes' mesh/material with an asset, or replace with scene instances.
static bool LaunchDesktopBuild(Platform platform, const std::string &outputPath)
Launch a packaged desktop (Windows/Linux) build directly.
POLYPHASE_API void OpenScene(Scene *scene)
Node * SpawnNode(TypeId nodeType, Node *parent)
bool mShowExtractSkelAnimModal
Definition ActionManager.h:433
Node * EXE_SpawnNode(const char *srcTypeName)
void ImportPendingAssets()
void ImportAsset()
void RequestSaveScene(bool saveAs)
void BeginExtractSkeletalAnimations(AssetStub *skeletalMeshStub)
void OpenProject(const char *path=nullptr)
void RequestSaveSelectedAsset()
void RequestOpenSceneFromDialog()
void ImportLooseFile(const std::string &sourcePath, AssetDir *targetDir)
bool RunPostPackage(Platform platform, const std::string &projectName, const std::string &projectDir, const std::string &packagedDir, const std::string &compiledBinaryDir)
bool IsBuildRunning() const
void BeginReimportScene(AssetStub *sceneStub)
char mImportAnimPrefix[32]
Definition ActionManager.h:440
Node * EXE_SpawnNode(Node *srcNode)
void EXE_ResetScene(Node *node)
bool mBuildAutoScroll
Definition ActionManager.h:421
void RequestOpenProject(const char *path)
LocalBuildState mBuildState
Definition ActionManager.h:418
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:408
void RequestAddonRecovery(const char *reason)
void BuildData(Platform platform, bool embedded)
void GenerateEmbeddedScriptFiles(std::vector< std::string > files, const char *headerPath, const char *sourcePath)
static void Destroy()
void DrawImportAnimationsModal()
AssetRef mRetargetSrcAvatar
Definition ActionManager.h:447
void DeleteAsset(AssetStub *stub)
void EXE_SetWorldScale(Node3D *node, glm::vec3 scale)
std::vector< Node * > EXE_SpawnNodes(const std::vector< Node * > &nodes)
void RequestEditorRestartForAddonRecovery(const char *reason)
void DeleteSelectedNodes()
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:409
std::vector< uint8_t > mExtractSkelAnimSelections
Definition ActionManager.h:428
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.
int mGroupDepth
Definition ActionManager.h:415
Definition ActionManager.h:1086
ActionPaintTiles(TileMap2D *tileMapNode, const std::vector< TilePaintChange > &changes)
std::vector< TilePaintChange > mChanges
Definition ActionManager.h:1093
DECLARE_ACTION_INTERFACE(PaintTiles)
Action to create a new parent node and reparent selected nodes under it.
Definition ActionManager.h:1010
ActionParentSelectedWith(const std::vector< Node * > &nodes, TypeId newParentType, ArrayOrientation arrayOrientation=ArrayOrientation::Vertical)
std::vector< int32_t > mPrevChildIndices
Definition ActionManager.h:1021
NodePtr mCreatedParent
Definition ActionManager.h:1023
TypeId mNewParentType
Definition ActionManager.h:1026
std::vector< NodePtr > mNodes
Definition ActionManager.h:1019
NodePtr mCreatedParentParent
Definition ActionManager.h:1024
std::vector< NodePtr > mPrevParents
Definition ActionManager.h:1020
DECLARE_ACTION_INTERFACE(ParentSelectedWith)
std::vector< int32_t > mPrevBoneIndices
Definition ActionManager.h:1022
Action to replace a node with a new node of a different type. The new node keeps the old node's slot ...
Definition ActionManager.h:1038
TypeId mNewType
Definition ActionManager.h:1049
NodePtr mParent
Definition ActionManager.h:1046
ActionReplaceNodeType(Node *oldNode, TypeId newType)
DECLARE_ACTION_INTERFACE(ReplaceNodeType)
NodePtr mOldNode
Definition ActionManager.h:1044
std::vector< NodePtr > mMovedChildren
Definition ActionManager.h:1048
NodePtr mNewNode
Definition ActionManager.h:1045
Action to replace selected nodes' mesh or material with an asset, or replace with scene instances.
Definition ActionManager.h:921
DECLARE_ACTION_INTERFACE(ReplaceWithAsset)
std::vector< Mesh3D * > mMatNodes
Definition ActionManager.h:944
std::vector< MaterialRef > mPrevMaterials
Definition ActionManager.h:945
std::vector< SceneReplaceEntry > mSceneEntries
Definition ActionManager.h:955
ReplaceMode
Definition ActionManager.h:929
AssetRef mAsset
Definition ActionManager.h:936
std::vector< StaticMesh3D * > mMeshNodes
Definition ActionManager.h:940
ActionReplaceWithAsset(Asset *asset, const std::vector< Node * > &nodes)
std::vector< StaticMeshRef > mPrevMeshes
Definition ActionManager.h:941
Action to merge selected StaticMesh3D nodes into InstancedMesh3D nodes grouped by mesh.
Definition ActionManager.h:962
std::vector< GroupEntry > mGroups
Definition ActionManager.h:979
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:987
DECLARE_ACTION_INTERFACE(ReplaceWithStaticMesh)
std::vector< SplitEntry > mEntries
Definition ActionManager.h:1002
ActionReplaceWithStaticMesh(const std::vector< Node * > &nodes)
Definition ActionManager.h:872
SceneRef mScene
Definition ActionManager.h:880
DECLARE_ACTION_INTERFACE(ResetScene)
ActionResetScene(Node *node)
std::vector< Property > mPrevProperties
Definition ActionManager.h:881
Definition ActionManager.h:892
DECLARE_ACTION_INTERFACE(SetInstanceColors)
std::vector< ActionSetInstanceColorsData > mPrevData
Definition ActionManager.h:900
std::vector< ActionSetInstanceColorsData > mData
Definition ActionManager.h:899
ActionSetInstanceColors(const std::vector< ActionSetInstanceColorsData > &data)
Definition ActionManager.h:904
std::vector< MeshInstanceData > mPrevData
Definition ActionManager.h:914
DECLARE_ACTION_INTERFACE(SetInstanceData)
std::vector< MeshInstanceData > mData
Definition ActionManager.h:913
ActionSetInstanceData(InstancedMesh3D *instMesh, int32_t startIndex, const std::vector< MeshInstanceData > &data)
Definition ActionManager.h:814
Definition ActionManager.h:1072
ActionSetTerrainHeights(Terrain3D *terrain, const std::vector< TerrainHeightChange > &changes)
DECLARE_ACTION_INTERFACE(SetTerrainHeights)
std::vector< TerrainHeightChange > mChanges
Definition ActionManager.h:1079
Definition ActionManager.h:1058
std::vector< VoxelChange > mChanges
Definition ActionManager.h:1065
DECLARE_ACTION_INTERFACE(SetVoxels)
ActionSetVoxels(Voxel3D *voxel, const std::vector< VoxelChange > &changes)
Definition ActionManager.h:837
Definition ActionManager.h:826
Definition ActionManager.h:848
Definition ActionManager.h:757
std::vector< NodePtr > mParents
Definition ActionManager.h:779
std::vector< TypeId > mSrcTypes
Definition ActionManager.h:770
std::vector< SceneRef > mSrcScenes
Definition ActionManager.h:772
std::vector< NodePtr > mNodes
Definition ActionManager.h:776
std::vector< NodePtr > mSrcNodes
Definition ActionManager.h:773
std::vector< const char * > mSrcTypeNames
Definition ActionManager.h:771
Definition ActionManager.h:859
ActionUnlinkScene(Node *node)
DECLARE_ACTION_INTERFACE(UnlinkScene)
SceneRef mScene
Definition ActionManager.h:867
Definition ActionManager.h:173
virtual void Execute()
virtual ~Action()
Definition ActionManager.h:175
virtual const char * GetName()=0
virtual void Reverse()
Definition AssetDir.h:13
Definition AssetRef.h:18
Definition Asset.h:125
Definition Datum.h:169
Definition InstancedMesh3d.h:17
Definition Material.h:48
Definition Mesh3d.h:13
Definition Node3d.h:14
Definition Node.h:67
Definition ActionManager.h:192
PluginAction(const char *name, DoFn doFn, UndoFn undoFn, FreeFn freeFn, void *userData)
void(*)(void *userData) UndoFn
Definition ActionManager.h:195
void Execute() override
~PluginAction() override
void(*)(void *userData) DoFn
Definition ActionManager.h:194
void SetPluginTag(const std::string &tag)
Definition ActionManager.h:206
const char * GetName() override
const std::string & GetPluginTag() const
Definition ActionManager.h:207
void Reverse() override
void(*)(void *userData) FreeFn
Definition ActionManager.h:196
Definition Property.h:14
Definition Scene.h:42
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:57
Definition SmartPointer.h:631
Definition ActionManager.h:390
std::string mLookupKey
Definition ActionManager.h:392
bool mEngineAsset
Definition ActionManager.h:393
std::string mAbsolutePath
Definition ActionManager.h:391
AssetStub * mSourceMeshStub
Definition ActionManager.h:567
AssetDir * mTargetDir
Definition ActionManager.h:568
std::string mPrefix
Definition ActionManager.h:570
bool mUniqueNames
Definition ActionManager.h:572
std::vector< uint32_t > mAnimationIndices
Definition ActionManager.h:569
bool mRemoveEmbeddedAfterExtract
Definition ActionManager.h:573
bool mOverwriteExisting
Definition ActionManager.h:571
Definition ActionManager.h:582
std::string mSourcePath
Definition ActionManager.h:583
bool mOverwriteExisting
Definition ActionManager.h:587
AssetDir * mTargetDir
Definition ActionManager.h:584
bool mUniqueNames
Definition ActionManager.h:588
std::vector< uint32_t > mAnimationIndices
Definition ActionManager.h:585
std::string mPrefix
Definition ActionManager.h:586
Definition ActionManager.h:598
AssetStub * mTargetAvatarStub
Definition ActionManager.h:601
bool mUniqueNames
Definition ActionManager.h:606
std::string mOutputName
Definition ActionManager.h:603
AssetStub * mSourceClipStub
Definition ActionManager.h:599
bool mOverwriteExisting
Definition ActionManager.h:605
AssetDir * mTargetDir
Definition ActionManager.h:602
int32_t mMode
Definition ActionManager.h:604
AssetStub * mSourceAvatarStub
Definition ActionManager.h:600
Definition ActionManager.h:949
NodePtr mSpawnedNode
Definition ActionManager.h:953
NodePtr mOriginal
Definition ActionManager.h:950
NodePtr mParent
Definition ActionManager.h:951
Definition ActionManager.h:970
NodePtr mInstancedNode
Definition ActionManager.h:974
std::vector< int32_t > mOriginalChildIndices
Definition ActionManager.h:973
std::vector< NodePtr > mOriginalNodes
Definition ActionManager.h:971
NodePtr mInstancedParent
Definition ActionManager.h:975
std::vector< NodePtr > mOriginalParents
Definition ActionManager.h:972
Definition ActionManager.h:995
NodePtr mOriginalParent
Definition ActionManager.h:997
std::vector< NodePtr > mCreatedNodes
Definition ActionManager.h:999
NodePtr mOriginalNode
Definition ActionManager.h:996
Definition ActionManager.h:885
std::vector< uint32_t > mColors
Definition ActionManager.h:887
Definition Asset.h:94
State for async local build operations.
Definition ActionManager.h:41
std::string mProjectName
Definition ActionManager.h:85
std::string mExtension
Definition ActionManager.h:87
bool mStaticContent
Obfuscate shipped .oct / .lua / AssetRegistry.txt in the package.
Definition ActionManager.h:77
std::string mStripCommand
Definition ActionManager.h:96
std::unordered_map< std::string, std::string > mTargetOptions
Definition ActionManager.h:68
std::atomic< int > mExitCode
Definition ActionManager.h:47
bool mUseSteam
Definition ActionManager.h:91
std::string mAndroidResolvedIconSource
Definition ActionManager.h:115
std::string mCompileCommand
Definition ActionManager.h:92
bool mForceRebuild
Definition ActionManager.h:105
Platform mPlatform
Definition ActionManager.h:54
bool mStandalone
Definition ActionManager.h:89
bool mForceCompile
Definition ActionManager.h:110
std::string mPackagedDir
Definition ActionManager.h:82
void Reset()
Definition ActionManager.h:117
int64_t mExeMTimeBeforeBuild
Definition ActionManager.h:88
std::atomic< bool > mCancelRequested
Definition ActionManager.h:44
std::string mBuildProjDir
Definition ActionManager.h:83
std::string mExeSrc
Definition ActionManager.h:86
bool mNeedCompile
Definition ActionManager.h:90
bool mRunOnDevice
Definition ActionManager.h:104
bool mContentPak
Pack shipped content into Content.pak. Requires mStaticContent.
Definition ActionManager.h:80
bool mOpenDirectoryOnFinish
Definition ActionManager.h:106
std::string mInjectedVcxprojPath
Definition ActionManager.h:100
std::string mProjectDir
Definition ActionManager.h:84
bool mOutputDirty
Definition ActionManager.h:51
std::string mPrebuiltExePath
Definition ActionManager.h:93
std::string mShaderCompileCommand
Definition ActionManager.h:95
std::string mOutput
Definition ActionManager.h:50
std::mutex mOutputMutex
Definition ActionManager.h:49
std::atomic< bool > mRunning
Definition ActionManager.h:43
std::string mTmpMakefile
Definition ActionManager.h:94
bool mRunAfterBuild
Definition ActionManager.h:103
std::atomic< bool > mComplete
Definition ActionManager.h:45
bool mEmbedded
Definition ActionManager.h:69
std::string mTargetId
Definition ActionManager.h:60
std::atomic< bool > mSuccess
Definition ActionManager.h:46
std::thread mBuildThread
Definition ActionManager.h:42
Definition InstancedMesh3d.h:6
Definition ActionManager.h:31
glm::vec2 mOffset
Definition ActionManager.h:32
glm::vec2 mSize
Definition ActionManager.h:33
float mRotation
Definition ActionManager.h:34