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
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
159 mProcessId = 0;
160#elif PLATFORM_WINDOWS
161 mProcessHandle = nullptr;
162#endif
163 }
164
165#if PLATFORM_LINUX
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);
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
460
461public:
462
463 // Public so the build-context WriteOutputLine trampoline can forward a
464 // target's PostPackage progress into the PackagingWindow log.
465 void AppendBuildOutput(const std::string& text);
466
467 // Actions
468 void CreateNewProject(const char* folderPath = nullptr, bool cpp = false, const char* defaultSceneName = "SC_Default");
469 void OpenProject(const char* path = nullptr);
470
471 // Drop Directory.Build.props + PolyphaseConfig.cmake at the project
472 // root recording the engine path. Lets addons under <project>/Packages
473 // build via Visual Studio / cmake without env-var setup. Called from
474 // OpenProject each time a project loads, so the recorded path stays in
475 // sync with whichever editor binary opened the project.
477
478 void OpenScene();
479 void OpenScene(Scene* scene);
480 // Defer OpenScene so the progress modal renders before Scene::Instantiate
481 // (which builds the node tree) blocks the main thread on large scenes.
482 // Pass nullptr to trigger the OS file dialog inside the worker; pass a
483 // stub to open that scene directly (same as the non-Request OpenScene).
486 POLYPHASE_API void SaveScene(bool saveAs);
487 // Defer SaveScene/SaveSelectedAsset/ResaveAllAssets to end-of-frame so the
488 // progress modal can render before the (potentially slow) capture and
489 // serialization work blocks the main thread. The hotkey / menu /
490 // command path should prefer these wrappers; SaveScene() etc. remain
491 // available for callers that need synchronous semantics (e.g. the REST
492 // controller, where the response must include the result).
493 void RequestSaveScene(bool saveAs);
496 // Defer OpenProject so the progress modal renders before LoadProject's
497 // (potentially many-second) Purge / ReloadAddons / Discover sequence
498 // blocks the main thread. Pass empty/null path to trigger the OS folder
499 // picker inside the worker (same as direct OpenProject).
500 void RequestOpenProject(const char* path);
501 // File > Close Project — closes the current project at end-of-frame.
502 // Unloads every native addon DLL on the way out so addon Intermediate
503 // folders are no longer file-locked and the user can rebuild on demand.
505 // Tools > Addons > Recover from stuck addons — Tier-2 recovery.
506 void RequestAddonRecovery(const char* reason);
507 // Tools > Addons > Restart Editor (Clean Addon Rebuild) — Tier-3 recovery.
508 // Spawns a new editor process, then exits the current one (Job Object
509 // teardown reliably kills mspdbsrv); the new instance picks up
510 // --addon-recovery and wipes intermediates before opening the project.
511 void RequestEditorRestartForAddonRecovery(const char* reason);
512 // Synchronous Tier-2 / Tier-3 implementations. Called by the EditorMain
513 // deferred-dispatcher after the request flag is set; safe to call
514 // directly when no progress modal is in flight.
516 void RecoverFromStuckAddons(const char* reason);
517 void RestartEditorForAddonRecovery(const char* reason);
518 // sceneType: 0 = 2D Canvas root, 1 = 3D Node3D root. targetDir defaults to the
519 // editor's currently-selected asset directory. Returns the created Scene asset
520 // (already saved to disk) or nullptr on failure.
521 POLYPHASE_API Scene* CreateNewScene(const char* sceneName, int sceneType, bool createCamera, bool createSkybox = false, bool createDirectionalLight = false, bool createUICanvas = false, AssetDir* targetDir = nullptr);
524 void DeleteNode(Node* node);
525 void RunScript();
527 Asset* ImportAsset(const std::string& path, const std::string& overrideBaseName = "", const MeshImportOptions* meshOpts = nullptr);
528 Asset* ImportAssetCombined(const std::string& path, const std::string& overrideBaseName = "", const MeshImportOptions* meshOpts = nullptr);
529
530 // Loose-file import: copies the user-picked file(s) into the current
531 // AssetDir verbatim (no .oct conversion) and registers them with the
532 // packager. Files survive packaging as-is; Lua/native code reads them
533 // via Stream::ReadFile / SYS_AcquireFileData. Used for .json, media,
534 // and arbitrary data files an addon or script wants to ship.
536 void ImportLooseFile(const std::string& sourcePath, AssetDir* targetDir);
539 void ImportCamera(const CameraImportOptions& options);
540 // Returns the created (or reimported) Scene asset, or nullptr on failure.
541 POLYPHASE_API Asset* ImportScene(const SceneImportOptions& options);
545
546 // Extract embedded animations from a SkeletalMesh asset into standalone
547 // SkeletalAnimationAsset files. BeginExtractSkeletalAnimations opens the
548 // selection modal; ExtractSkeletalAnimations runs the actual generation.
550 {
553 std::vector<uint32_t> mAnimationIndices; // empty = all
554 std::string mPrefix = "SA_";
555 bool mOverwriteExisting = false;
556 bool mUniqueNames = true;
558 };
562
563 // Import animations from an animation-only .fbx/.glb/.gltf/.dae file
564 // (or any model file the user picks — only the embedded clips are read).
566 {
567 std::string mSourcePath;
569 std::vector<uint32_t> mAnimationIndices; // empty = all
570 std::string mPrefix = "SA_";
571 bool mOverwriteExisting = false;
572 bool mUniqueNames = true;
573 };
574 void BeginImportAnimations(AssetDir* targetDir = nullptr);
577
578 // Bake a target-rig-compatible clip from a source SkeletalAnimationAsset
579 // and a pair of HumanoidAvatarAssets. The bake mode is the user-selected
580 // tier (name-only remap vs reference-pose-aware).
582 {
587 std::string mOutputName; // empty = derive from src clip
588 int32_t mMode = 0; // 0=NameRemap, 1=ReferencePose
589 bool mOverwriteExisting = false;
590 bool mUniqueNames = true;
591 };
592 void BeginRetargetAnimation(AssetStub* sourceClipStub);
596 void BuildData(Platform platform, bool embedded);
606 void BuildData(const std::string& targetId, bool embedded);
608 bool IsBuildRunning() const;
617 bool DuplicateNodes(std::vector<Node*> nodes);
618 void AttachSelectedNodes(Node* newParent, int32_t boneIdx);
619
620 // Project upgrade functions
623};
624
625#define DECLARE_ACTION_INTERFACE(Name) \
626 virtual void Execute() override; \
627 virtual void Reverse() override; \
628 virtual const char* GetName() { return #Name; }
629
630// Actions
631
633{
634public:
635 DECLARE_ACTION_INTERFACE(EditProperty)
636
638 void* owner,
639 PropertyOwnerType ownerType,
640 const std::string& propName,
641 uint32_t index,
642 Datum value);
643
644protected:
645
646 void GatherProps(std::vector<Property>& props);
647 Property* FindProp(std::vector<Property>& props, const std::string& name);
648
649 void* mOwner = nullptr;
652 uint32_t mIndex = 0;
654
657};
658
659// Multi-target counterpart to ActionEditProperty: applies the same value to
660// every target whose GatherProperties() yields a property of the same name
661// AND same DatumType as the source. Targets without that property (or with a
662// type mismatch) are silently skipped and not recorded for undo. One composite
663// action = one undo step. Used by the Properties panel when the user edits a
664// property with multiple Nodes selected in the Scene Hierarchy.
666{
667public:
668 DECLARE_ACTION_INTERFACE(EditProperties)
669
671 const std::vector<void*>& owners,
672 PropertyOwnerType ownerType,
673 const std::string& propName,
674 uint32_t index,
675 Datum value,
676 DatumType sourceType);
677
678protected:
679
680 void GatherPropsFor(void* owner, std::vector<Property>& props);
681
682 std::vector<void*> mOwners;
685 uint32_t mIndex = 0;
686 DatumType mSourceType = DatumType::Count;
688
689 std::vector<AssetRef> mReferencedAssets;
690 std::vector<Datum> mPreviousValues;
691 std::vector<bool> mApplied;
692};
693
695{
696public:
697 DECLARE_ACTION_INTERFACE(EditTransforms)
698
700 const std::vector<Node3D*>& nodes,
701 const std::vector<glm::mat4>& newTransforms);
702
703protected:
704 std::vector<Node3D*> mNodes;
705 std::vector<glm::mat4> mNewTransforms;
706 std::vector<glm::mat4> mPrevTransforms;
707};
708
710{
711public:
712 DECLARE_ACTION_INTERFACE(EditWidgetTransforms)
713
715 const std::vector<Widget*>& widgets,
716 const std::vector<WidgetTransformData>& newTransforms);
717
718protected:
719 std::vector<Widget*> mWidgets;
720 std::vector<WidgetTransformData> mNewTransforms;
721 std::vector<WidgetTransformData> mPrevTransforms;
722};
723
725{
726public:
727 DECLARE_ACTION_INTERFACE(SpawnNodes)
728 ActionSpawnNodes(const std::vector<TypeId>& types);
729 ActionSpawnNodes(const std::vector<const char*>& typeNames);
730 ActionSpawnNodes(const std::vector<SceneRef>& scenes);
731 ActionSpawnNodes(const std::vector<Node*>& srcNodes);
732
733 const std::vector<NodePtr>& GetNodes() const { return mNodes; }
734
735protected:
736
737 // Action inputs, only one should be filled.
738 std::vector<TypeId> mSrcTypes;
739 std::vector<const char*> mSrcTypeNames;
740 std::vector<SceneRef> mSrcScenes;
741 std::vector<NodePtr> mSrcNodes;
742
743 // Populated after first Execute()
744 std::vector<NodePtr> mNodes;
745
746 // Populated after first Reverse()
747 std::vector<NodePtr> mParents;
748};
749
751{
752public:
753 DECLARE_ACTION_INTERFACE(DeleteNodes)
754 ActionDeleteNodes(const std::vector<Node*>& nodes);
755protected:
756 std::vector<NodePtr> mNodes;
757 std::vector<NodePtr> mParents;
758 std::vector<int32_t> mChildIndices;
759 std::vector<int32_t> mBoneIndices;
760};
761
763{
764public:
765 DECLARE_ACTION_INTERFACE(AttachNode)
766 ActionAttachNode(Node* node, Node* newParent, int32_t childIndex, int32_t boneIndex);
767protected:
768 NodePtr mNode = nullptr;
769 NodePtr mNewParent = nullptr;
770 NodePtr mPrevParent = nullptr;
771 int32_t mChildIndex = -1;
772 int32_t mPrevChildIndex = -1;
773 int32_t mBoneIndex = -1;
774 int32_t mPrevBoneIndex = -1;
775};
776
778{
779public:
780 DECLARE_ACTION_INTERFACE(SetRootNode)
782protected:
783 NodePtr mNewRoot = nullptr;
784 NodePtr mOldRoot = nullptr;
785 NodePtr mNewRootParent = nullptr;
786 int32_t mNewRootChildIndex = -1;
787};
788
790{
791public:
792 DECLARE_ACTION_INTERFACE(SetWorldRotation)
793 ActionSetWorldRotation(Node3D* node, glm::quat rot);
794protected:
795 Node3D* mNode = nullptr;
796 glm::quat mNewRotation;
797 glm::quat mPrevRotation;
798};
799
801{
802public:
803 DECLARE_ACTION_INTERFACE(SetWorldPosition)
804 ActionSetWorldPosition(Node3D* node, glm::vec3 pos);
805protected:
806 Node3D* mNode = nullptr;
807 glm::vec3 mNewPosition;
808 glm::vec3 mPrevPosition;
809};
810
812{
813public:
814 DECLARE_ACTION_INTERFACE(SetWorldScale)
815 ActionSetWorldScale(Node3D* node, glm::vec3 scale);
816protected:
817 Node3D* mNode = nullptr;
818 glm::vec3 mNewScale;
819 glm::vec3 mPrevScale;
820};
821
823{
824public:
827
828protected:
829
830 Node* mNode = nullptr;
832
833};
834
836{
837public:
840
841protected:
842
843 Node* mNode = nullptr;
845 std::vector<Property> mPrevProperties;
846};
847
849{
850 StaticMesh3D* mMesh3d = nullptr;
851 std::vector<uint32_t> mColors;
852 bool mBakedLight = false;
853};
854
856{
857public:
858 DECLARE_ACTION_INTERFACE(SetInstanceColors);
859 ActionSetInstanceColors(const std::vector<ActionSetInstanceColorsData>& data);
860
861protected:
862
863 std::vector<ActionSetInstanceColorsData> mData;
864 std::vector<ActionSetInstanceColorsData> mPrevData;
865};
866
868{
869public:
870 DECLARE_ACTION_INTERFACE(SetInstanceData);
871 ActionSetInstanceData(InstancedMesh3D* instMesh, int32_t startIndex, const std::vector<MeshInstanceData>& data);
872
873protected:
874 InstancedMesh3D* mInstMesh = nullptr;
875 int32_t mStartIndex = -1;
876
877 std::vector<MeshInstanceData> mData;
878 std::vector<MeshInstanceData> mPrevData;
879};
880
885{
886public:
887 DECLARE_ACTION_INTERFACE(ReplaceWithAsset);
888 ActionReplaceWithAsset(Asset* asset, const std::vector<Node*>& nodes);
889
890protected:
891
892 enum class ReplaceMode
893 {
895 Material,
896 Scene,
897 Invalid
898 };
899
901 ReplaceMode mMode = ReplaceMode::Invalid;
902
903 // For StaticMesh mode
904 std::vector<StaticMesh3D*> mMeshNodes;
905 std::vector<StaticMeshRef> mPrevMeshes;
906
907 // For Material mode
908 std::vector<Mesh3D*> mMatNodes;
909 std::vector<MaterialRef> mPrevMaterials;
910
911 // For Scene mode
919 std::vector<SceneReplaceEntry> mSceneEntries;
920};
921
926{
927public:
928 DECLARE_ACTION_INTERFACE(ReplaceWithInstancedMesh);
929 ActionReplaceWithInstancedMesh(const std::vector<Node*>& nodes, bool merge);
930
931protected:
932
934 {
935 std::vector<NodePtr> mOriginalNodes;
936 std::vector<NodePtr> mOriginalParents;
937 std::vector<int32_t> mOriginalChildIndices;
940 int32_t mInstancedChildIndex = -1;
941 };
942
943 std::vector<GroupEntry> mGroups;
944 bool mFirstExecute = true;
945};
946
951{
952public:
953 DECLARE_ACTION_INTERFACE(ReplaceWithStaticMesh);
954 ActionReplaceWithStaticMesh(const std::vector<Node*>& nodes);
955
956protected:
957
959 {
962 int32_t mOriginalChildIndex = -1;
963 std::vector<NodePtr> mCreatedNodes;
964 };
965
966 std::vector<SplitEntry> mEntries;
967 bool mFirstExecute = true;
968};
969
974{
975public:
976 DECLARE_ACTION_INTERFACE(ParentSelectedWith);
978 const std::vector<Node*>& nodes,
979 TypeId newParentType,
981
982protected:
983 std::vector<NodePtr> mNodes;
984 std::vector<NodePtr> mPrevParents;
985 std::vector<int32_t> mPrevChildIndices;
986 std::vector<int32_t> mPrevBoneIndices;
989 int32_t mCreatedParentChildIndex = -1;
992 bool mFirstExecute = true;
993};
994
1002{
1003public:
1006
1007protected:
1011 int32_t mChildIndex = -1;
1012 std::vector<NodePtr> mMovedChildren;
1014 uint64_t mSavedUuid = 0;
1015 bool mFirstExecute = true;
1016};
1017
1018struct VoxelChange;
1019class Voxel3D;
1020
1022{
1023public:
1025 ActionSetVoxels(Voxel3D* voxel, const std::vector<VoxelChange>& changes);
1026
1027protected:
1028 Voxel3D* mVoxel = nullptr;
1029 std::vector<VoxelChange> mChanges;
1030};
1031
1032struct TerrainHeightChange;
1033class Terrain3D;
1034
1036{
1037public:
1038 DECLARE_ACTION_INTERFACE(SetTerrainHeights);
1039 ActionSetTerrainHeights(Terrain3D* terrain, const std::vector<TerrainHeightChange>& changes);
1040
1041protected:
1042 Terrain3D* mTerrain = nullptr;
1043 std::vector<TerrainHeightChange> mChanges;
1044};
1045
1046struct TilePaintChange;
1047class TileMap2D;
1048
1050{
1051public:
1053 ActionPaintTiles(TileMap2D* tileMapNode, const std::vector<TilePaintChange>& changes);
1054
1055protected:
1056 TileMap2D* mTarget = nullptr;
1057 std::vector<TilePaintChange> mChanges;
1058};
#define DECLARE_ACTION_INTERFACE(Name)
Definition ActionManager.h:625
ArrayOrientation
Definition ArrayWidget.h:11
DatumType
Definition Datum.h:29
Platform
Definition EngineTypes.h:32
PropertyOwnerType
Definition EngineTypes.h:156
uint32_t TypeId
Definition EngineTypes.h:72
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Definition ActionManager.h:763
Definition ActionManager.h:751
Definition ActionManager.h:666
Definition ActionManager.h:633
Datum mPreviousValue
Definition ActionManager.h:656
Property * FindProp(std::vector< Property > &props, const std::string &name)
Datum mValue
Definition ActionManager.h:653
void * mOwner
Definition ActionManager.h:649
void GatherProps(std::vector< Property > &props)
PropertyOwnerType mOwnerType
Definition ActionManager.h:650
std::string mPropertyName
Definition ActionManager.h:651
uint32_t mIndex
Definition ActionManager.h:652
AssetRef mReferencedAsset
Definition ActionManager.h:655
Definition ActionManager.h:695
Definition ActionManager.h:710
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)
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)
void ResaveAllAssets()
void OpenScene(Scene *scene)
void ImportCamera(const CameraImportOptions &options)
int32_t mRetargetMode
Definition ActionManager.h:450
void DrawBuildModal()
bool mShowImportAnimModal
Definition ActionManager.h:443
void ResetUndoRedo()
void BeginImportScene()
void EXE_SetWorldPosition(Node3D *node, glm::vec3 pos)
bool mImportAnimUnique
Definition ActionManager.h:442
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
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)
Asset * ImportAsset(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_SetInstanceColors(const std::vector< ActionSetInstanceColorsData > &data)
bool mBuildPending
Definition ActionManager.h:422
void CloseProject()
LocalBuildState & GetBuildState()
Definition ActionManager.h:609
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.
Node * SpawnNode(TypeId nodeType, Node *parent)
bool mShowExtractSkelAnimModal
Definition ActionManager.h:433
Node * EXE_SpawnNode(const char *srcTypeName)
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 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)
Asset * ImportAssetCombined(const std::string &path, const std::string &overrideBaseName="", const MeshImportOptions *meshOpts=nullptr)
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)
void EXE_AttachNode(Node *node, Node *newParent, int32_t childIndex, int32_t boneIndex)
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.
bool RetargetAnimation(const RetargetAnimationOptions &options)
int mGroupDepth
Definition ActionManager.h:415
Definition ActionManager.h:1050
ActionPaintTiles(TileMap2D *tileMapNode, const std::vector< TilePaintChange > &changes)
std::vector< TilePaintChange > mChanges
Definition ActionManager.h:1057
DECLARE_ACTION_INTERFACE(PaintTiles)
Action to create a new parent node and reparent selected nodes under it.
Definition ActionManager.h:974
ActionParentSelectedWith(const std::vector< Node * > &nodes, TypeId newParentType, ArrayOrientation arrayOrientation=ArrayOrientation::Vertical)
std::vector< int32_t > mPrevChildIndices
Definition ActionManager.h:985
NodePtr mCreatedParent
Definition ActionManager.h:987
TypeId mNewParentType
Definition ActionManager.h:990
std::vector< NodePtr > mNodes
Definition ActionManager.h:983
NodePtr mCreatedParentParent
Definition ActionManager.h:988
std::vector< NodePtr > mPrevParents
Definition ActionManager.h:984
DECLARE_ACTION_INTERFACE(ParentSelectedWith)
std::vector< int32_t > mPrevBoneIndices
Definition ActionManager.h:986
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:1002
TypeId mNewType
Definition ActionManager.h:1013
NodePtr mParent
Definition ActionManager.h:1010
ActionReplaceNodeType(Node *oldNode, TypeId newType)
DECLARE_ACTION_INTERFACE(ReplaceNodeType)
NodePtr mOldNode
Definition ActionManager.h:1008
std::vector< NodePtr > mMovedChildren
Definition ActionManager.h:1012
NodePtr mNewNode
Definition ActionManager.h:1009
Action to replace selected nodes' mesh or material with an asset, or replace with scene instances.
Definition ActionManager.h:885
DECLARE_ACTION_INTERFACE(ReplaceWithAsset)
std::vector< Mesh3D * > mMatNodes
Definition ActionManager.h:908
std::vector< MaterialRef > mPrevMaterials
Definition ActionManager.h:909
std::vector< SceneReplaceEntry > mSceneEntries
Definition ActionManager.h:919
ReplaceMode
Definition ActionManager.h:893
AssetRef mAsset
Definition ActionManager.h:900
std::vector< StaticMesh3D * > mMeshNodes
Definition ActionManager.h:904
ActionReplaceWithAsset(Asset *asset, const std::vector< Node * > &nodes)
std::vector< StaticMeshRef > mPrevMeshes
Definition ActionManager.h:905
Action to merge selected StaticMesh3D nodes into InstancedMesh3D nodes grouped by mesh.
Definition ActionManager.h:926
std::vector< GroupEntry > mGroups
Definition ActionManager.h:943
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:951
DECLARE_ACTION_INTERFACE(ReplaceWithStaticMesh)
std::vector< SplitEntry > mEntries
Definition ActionManager.h:966
ActionReplaceWithStaticMesh(const std::vector< Node * > &nodes)
Definition ActionManager.h:836
SceneRef mScene
Definition ActionManager.h:844
DECLARE_ACTION_INTERFACE(ResetScene)
ActionResetScene(Node *node)
std::vector< Property > mPrevProperties
Definition ActionManager.h:845
Definition ActionManager.h:856
DECLARE_ACTION_INTERFACE(SetInstanceColors)
std::vector< ActionSetInstanceColorsData > mPrevData
Definition ActionManager.h:864
std::vector< ActionSetInstanceColorsData > mData
Definition ActionManager.h:863
ActionSetInstanceColors(const std::vector< ActionSetInstanceColorsData > &data)
Definition ActionManager.h:868
std::vector< MeshInstanceData > mPrevData
Definition ActionManager.h:878
DECLARE_ACTION_INTERFACE(SetInstanceData)
std::vector< MeshInstanceData > mData
Definition ActionManager.h:877
ActionSetInstanceData(InstancedMesh3D *instMesh, int32_t startIndex, const std::vector< MeshInstanceData > &data)
Definition ActionManager.h:778
Definition ActionManager.h:1036
ActionSetTerrainHeights(Terrain3D *terrain, const std::vector< TerrainHeightChange > &changes)
DECLARE_ACTION_INTERFACE(SetTerrainHeights)
std::vector< TerrainHeightChange > mChanges
Definition ActionManager.h:1043
Definition ActionManager.h:1022
std::vector< VoxelChange > mChanges
Definition ActionManager.h:1029
DECLARE_ACTION_INTERFACE(SetVoxels)
ActionSetVoxels(Voxel3D *voxel, const std::vector< VoxelChange > &changes)
Definition ActionManager.h:801
Definition ActionManager.h:790
Definition ActionManager.h:812
Definition ActionManager.h:725
std::vector< NodePtr > mParents
Definition ActionManager.h:747
std::vector< TypeId > mSrcTypes
Definition ActionManager.h:738
std::vector< SceneRef > mSrcScenes
Definition ActionManager.h:740
std::vector< NodePtr > mNodes
Definition ActionManager.h:744
std::vector< NodePtr > mSrcNodes
Definition ActionManager.h:741
std::vector< const char * > mSrcTypeNames
Definition ActionManager.h:739
Definition ActionManager.h:823
ActionUnlinkScene(Node *node)
DECLARE_ACTION_INTERFACE(UnlinkScene)
SceneRef mScene
Definition ActionManager.h:831
Definition ActionManager.h:173
virtual void Execute()
virtual ~Action()
Definition ActionManager.h:175
virtual const char * GetName()=0
virtual void Reverse()
Definition AssetDir.h:11
Definition AssetRef.h:18
Definition Asset.h:120
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: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: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:551
AssetDir * mTargetDir
Definition ActionManager.h:552
std::string mPrefix
Definition ActionManager.h:554
bool mUniqueNames
Definition ActionManager.h:556
std::vector< uint32_t > mAnimationIndices
Definition ActionManager.h:553
bool mRemoveEmbeddedAfterExtract
Definition ActionManager.h:557
bool mOverwriteExisting
Definition ActionManager.h:555
Definition ActionManager.h:566
std::string mSourcePath
Definition ActionManager.h:567
bool mOverwriteExisting
Definition ActionManager.h:571
AssetDir * mTargetDir
Definition ActionManager.h:568
bool mUniqueNames
Definition ActionManager.h:572
std::vector< uint32_t > mAnimationIndices
Definition ActionManager.h:569
std::string mPrefix
Definition ActionManager.h:570
Definition ActionManager.h:582
AssetStub * mTargetAvatarStub
Definition ActionManager.h:585
bool mUniqueNames
Definition ActionManager.h:590
std::string mOutputName
Definition ActionManager.h:587
AssetStub * mSourceClipStub
Definition ActionManager.h:583
bool mOverwriteExisting
Definition ActionManager.h:589
AssetDir * mTargetDir
Definition ActionManager.h:586
int32_t mMode
Definition ActionManager.h:588
AssetStub * mSourceAvatarStub
Definition ActionManager.h:584
Definition ActionManager.h:913
NodePtr mSpawnedNode
Definition ActionManager.h:917
NodePtr mOriginal
Definition ActionManager.h:914
NodePtr mParent
Definition ActionManager.h:915
Definition ActionManager.h:934
NodePtr mInstancedNode
Definition ActionManager.h:938
std::vector< int32_t > mOriginalChildIndices
Definition ActionManager.h:937
std::vector< NodePtr > mOriginalNodes
Definition ActionManager.h:935
NodePtr mInstancedParent
Definition ActionManager.h:939
std::vector< NodePtr > mOriginalParents
Definition ActionManager.h:936
Definition ActionManager.h:959
NodePtr mOriginalParent
Definition ActionManager.h:961
std::vector< NodePtr > mCreatedNodes
Definition ActionManager.h:963
NodePtr mOriginalNode
Definition ActionManager.h:960
Definition ActionManager.h:849
std::vector< uint32_t > mColors
Definition ActionManager.h:851
Definition Asset.h:89
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