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 std::string mPackagedDir;
71 std::string mBuildProjDir;
72 std::string mProjectDir;
73 std::string mProjectName;
74 std::string mExeSrc;
75 std::string mExtension;
76 int64_t mExeMTimeBeforeBuild{0}; // stat mtime of mExeSrc before compile, used to detect silent link.exe failures
77 bool mStandalone{false};
78 bool mNeedCompile{true};
79 bool mUseSteam{false};
80 std::string mCompileCommand;
81 std::string mPrebuiltExePath;
82 std::string mTmpMakefile;
84 std::string mStripCommand;
85 // Path to a .vcxproj that was injected with addon sources/includes before the build.
86 // Restored from .vcxproj.orig after the build completes (success or failure) so the
87 // working tree doesn't accumulate uncommitted changes.
89
90 // Post-build flags
91 bool mRunAfterBuild{false};
92 bool mRunOnDevice{false};
93 bool mForceRebuild{false};
95 // Snapshot of mForceRebuild captured in BuildData before it's cleared, so BuildPhase1
96 // can still tell whether the user requested a force rebuild when it decides whether
97 // to reuse the prebuilt Polyphase.exe.
98 bool mForceCompile{false};
99
100 // Stashed by the Android branch: the icon source path resolved from
101 // mTargetOptions["android.iconSource"] (fallback EngineConfig::mIconPath).
102 // Read by the icon-generation step further down the same branch.
104
105 void Reset()
106 {
107 // Thread must be joined before calling Reset
108 mRunning.store(false);
109 mCancelRequested.store(false);
110 mComplete.store(false);
111 mSuccess.store(false);
112 mExitCode.store(0);
113 {
114 std::lock_guard<std::mutex> lock(mOutputMutex);
115 mOutput.clear();
116 mOutputDirty = false;
117 }
119 mTargetId.clear();
120 mTargetOptions.clear();
121 mEmbedded = false;
122 mPackagedDir.clear();
123 mBuildProjDir.clear();
124 mProjectDir.clear();
125 mProjectName.clear();
126 mExeSrc.clear();
127 mExtension.clear();
129 mStandalone = false;
130 mNeedCompile = true;
131 mUseSteam = false;
132 mCompileCommand.clear();
133 mPrebuiltExePath.clear();
134 mTmpMakefile.clear();
135 mShaderCompileCommand.clear();
136 mStripCommand.clear();
137 mInjectedVcxprojPath.clear();
138 mRunAfterBuild = false;
139 mRunOnDevice = false;
140 mForceRebuild = false;
141 mForceCompile = false;
144#if PLATFORM_LINUX
145 mProcessId = 0;
146#elif PLATFORM_WINDOWS
147 mProcessHandle = nullptr;
148#endif
149 }
150
151#if PLATFORM_LINUX
152 pid_t mProcessId{0};
153#elif PLATFORM_WINDOWS
154 void* mProcessHandle{nullptr};
155#endif
156};
157
159{
160public:
161 virtual ~Action() {}
162 virtual void Execute();
163 virtual void Reverse();
164 virtual const char* GetName() = 0;
165};
166
167// Plugin-driven actions — addons push these via the
168// PolyphaseEngineAPI::EditorAction_Push entry. The three callbacks carry
169// arbitrary userData (opaque to the engine); the optional freeFn cleans
170// it up when the action falls out of the history.
171//
172// mPluginTag identifies the owning addon DLL — used by NativeAddonManager
173// during UnloadNativeAddon to scrub any PluginAction whose function
174// pointers live inside the DLL that's about to be FreeLibrary'd. Without
175// this, undoing into a stale history after a hot-reload calls into freed
176// memory.
177class PluginAction : public Action
178{
179public:
180 using DoFn = void (*)(void* userData);
181 using UndoFn = void (*)(void* userData);
182 using FreeFn = void (*)(void* userData);
183
184 PluginAction(const char* name, DoFn doFn, UndoFn undoFn,
185 FreeFn freeFn, void* userData);
186 ~PluginAction() override;
187
188 void Execute() override;
189 void Reverse() override;
190 const char* GetName() override;
191
192 void SetPluginTag(const std::string& tag) { mPluginTag = tag; }
193 const std::string& GetPluginTag() const { return mPluginTag; }
194
195private:
196 std::string mName;
197 std::string mPluginTag;
198 DoFn mDoFn = nullptr;
199 UndoFn mUndoFn = nullptr;
200 FreeFn mFreeFn = nullptr;
201 void* mUserData = nullptr;
202};
203
204// Groups multiple actions into a single undo step. Used by plugin
205// EditorAction_BeginGroup / EditorAction_EndGroup so a continuous
206// paint-drag (which may push 60+ spawn actions per second) is one
207// Ctrl+Z.
208class ActionGroup : public Action
209{
210public:
211 explicit ActionGroup(const char* name);
212 ~ActionGroup() override;
213
214 void Add(Action* a); // takes ownership
215 bool IsEmpty() const { return mChildren.empty(); }
216
217 void Execute() override; // forward order
218 void Reverse() override; // reverse order
219 const char* GetName() override;
220
221 std::vector<Action*>& GetChildren() { return mChildren; }
222 const std::vector<Action*>& GetChildren() const { return mChildren; }
223
224private:
225 std::string mName;
226 std::vector<Action*> mChildren;
227};
228
230{
231public:
232
234
235 static void Create();
236 static void Destroy();
238
239 void Update();
240
242
243 Node* SpawnNode(TypeId nodeType, Node* parent);
244 Node* SpawnNode(TypeId nodeType, glm::vec3 position);
245
246 Node* SpawnBasicNode(const std::string& name, Node* parent, Asset* srcAsset = nullptr, bool setWorldPos = false, glm::vec3 worldPos = { 0.0f, 0.0f, 0.0f });
247
248 void ExecuteAction(Action* action);
249 void Undo();
250 void Redo();
251
252 // Plugin-action group helpers (used by EditorAction_BeginGroup /
253 // EditorAction_EndGroup). Nesting is supported — the outermost
254 // Begin starts the group; the matching End closes it and pushes
255 // a single ActionGroup onto the history.
256 void BeginActionGroup(const char* name);
258
259 // Walk mActionHistory + mActionFuture and drop any PluginAction
260 // (or ActionGroup containing one) whose mPluginTag matches `tag`.
261 // Called from NativeAddonManager::UnloadNativeAddon BEFORE the DLL
262 // is FreeLibrary'd, so the function pointers stored on the action
263 // are still valid when freeFn fires.
264 void PurgePluginActions(const std::string& pluginTag);
265
266 // Actions
267 void EXE_EditProperty(void* owner, PropertyOwnerType ownerType, const std::string& name, uint32_t index, Datum newValue);
268 void EXE_EditPropertyOnSelection(void* owner, PropertyOwnerType ownerType, const std::string& name, uint32_t index, Datum newValue);
269 void EXE_EditTransform(Node3D* node, const glm::mat4& transform);
270 void EXE_EditTransforms(const std::vector<Node3D*>& nodes, const std::vector<glm::mat4>& newTransforms);
271 void EXE_EditWidgetTransforms(const std::vector<Widget*>& widgets, const std::vector<WidgetTransformData>& newTransforms);
273 Node* EXE_SpawnNode(const char* srcTypeName);
276 void EXE_DeleteNode(Node* node);
277 std::vector<Node*> EXE_SpawnNodes(const std::vector<Node*>& nodes);
278 void EXE_DeleteNodes(const std::vector<Node*>& nodes);
279 void EXE_AttachNode(Node* node, Node* newParent, int32_t childIndex, int32_t boneIndex);
280 void EXE_SetRootNode(Node* newRoot);
281 void EXE_SetWorldRotation(Node3D* node, glm::quat rot);
282 void EXE_SetWorldPosition(Node3D* node, glm::vec3 pos);
283 void EXE_SetWorldScale(Node3D* node, glm::vec3 scale);
285 void EXE_ResetScene(Node* node);
286 void EXE_SetInstanceColors(const std::vector<ActionSetInstanceColorsData>& data);
287 void EXE_SetVoxels(class Voxel3D* voxel, const std::vector<struct VoxelChange>& changes);
288 void EXE_SetTerrainHeights(class Terrain3D* terrain, const std::vector<struct TerrainHeightChange>& changes);
289 void EXE_PaintTiles(class TileMap2D* tileMapNode, const std::vector<struct TilePaintChange>& changes);
290 void EXE_SetInstanceData(InstancedMesh3D* instMesh, int32_t startIndex, const std::vector<MeshInstanceData>& data);
291
297 void EXE_ReplaceSelectedWithAsset(Asset* asset, const std::vector<Node*>& nodes);
298
304 void EXE_ReplaceWithInstancedMesh(const std::vector<Node*>& nodes, bool merge);
305
310 void EXE_ReplaceWithStaticMesh(const std::vector<Node*>& nodes);
311
318 void EXE_ParentSelectedWith(const std::vector<Node*>& nodes, TypeId parentType,
320
321 // Timeline actions
322 void EXE_TimelineAddTrack(Timeline* timeline, TypeId trackType);
323 void EXE_TimelineRemoveTrack(Timeline* timeline, int32_t trackIndex);
324 void EXE_TimelineAddClip(Timeline* timeline, int32_t trackIndex, TypeId clipType, float startTime, float duration);
325 void EXE_TimelineRemoveClip(Timeline* timeline, int32_t trackIndex, int32_t clipIndex);
326 void EXE_TimelineMoveClip(Timeline* timeline, int32_t trackIndex, int32_t clipIndex, float oldStartTime, float newStartTime);
327 void EXE_TimelineBindTrack(Timeline* timeline, int32_t trackIndex, uint64_t oldUuid, uint64_t newUuid, const std::string& oldName, const std::string& newName);
328
332 void ExileNode(NodePtr node);
334 void GatherScriptFiles(const std::string& dir, std::vector<std::string>& outFiles);
335
336protected:
337
340
341 // Raw (non-.oct) file entry to embed into gEmbeddedRawAssets[].
342 // mLookupKey is the canonical VFS lookup path the runtime will use
343 // (projectDir-relative, forward slashes, e.g. "Assets/intro.mp4" or
344 // "Packages/videoplayer/Assets/test.mp4").
346 {
347 std::string mAbsolutePath;
348 std::string mLookupKey;
349 bool mEngineAsset = false;
350 };
351
353 std::vector<std::pair<AssetStub*, std::string> >& assets,
354 std::vector<EmbeddedRawAssetEntry>& rawAssets,
355 const char* headerPath,
356 const char* sourcePath);
357
359 std::vector<std::string> files,
360 const char* headerPath,
361 const char* sourcePath);
362
363
364 std::vector<Action*> mActionHistory;
365 std::vector<Action*> mActionFuture;
366 std::vector<NodePtr> mExiledNodes;
367
368 // Open plugin-action group; non-null between BeginActionGroup
369 // and the outermost matching EndActionGroup.
371 int mGroupDepth = 0;
372
373 // Non-blocking build state
375 bool mShowBuildModal = false;
377 bool mBuildAutoScroll = true;
378 bool mBuildPending = false;
379
380 // Extract-skeletal-animations modal state. Lives here because the modal
381 // body is drawn from the editor's per-frame loop via
382 // DrawExtractSkeletalAnimationsModal — same pattern as DrawBuildModal.
384 std::vector<uint8_t> mExtractSkelAnimSelections; // 1 byte per anim, 0/1
385 char mExtractSkelAnimPrefix[32] = "SA_";
390
391 // Import-animations modal state (animation-only fbx/glb).
394 std::vector<std::string> mImportAnimNames;
395 std::vector<uint8_t> mImportAnimSelections;
396 char mImportAnimPrefix[32] = "SA_";
398 bool mImportAnimUnique = true;
400
401 // Retarget-animation modal state.
405 char mRetargetOutputName[128] = "";
406 int32_t mRetargetMode = 0; // 0=NameRemap, 1=ReferencePose
407 bool mRetargetOverwrite = false;
408 bool mRetargetUnique = true;
409 bool mShowRetargetModal = false;
411
415 void AppendBuildOutput(const std::string& text);
417
418public:
419
420 // Actions
421 void CreateNewProject(const char* folderPath = nullptr, bool cpp = false, const char* defaultSceneName = "SC_Default");
422 void OpenProject(const char* path = nullptr);
423
424 // Drop Directory.Build.props + PolyphaseConfig.cmake at the project
425 // root recording the engine path. Lets addons under <project>/Packages
426 // build via Visual Studio / cmake without env-var setup. Called from
427 // OpenProject each time a project loads, so the recorded path stays in
428 // sync with whichever editor binary opened the project.
430
431 void OpenScene();
432 void OpenScene(Scene* scene);
433 // Defer OpenScene so the progress modal renders before Scene::Instantiate
434 // (which builds the node tree) blocks the main thread on large scenes.
435 // Pass nullptr to trigger the OS file dialog inside the worker; pass a
436 // stub to open that scene directly (same as the non-Request OpenScene).
439 void SaveScene(bool saveAs);
440 // Defer SaveScene/SaveSelectedAsset/ResaveAllAssets to end-of-frame so the
441 // progress modal can render before the (potentially slow) capture and
442 // serialization work blocks the main thread. The hotkey / menu /
443 // command path should prefer these wrappers; SaveScene() etc. remain
444 // available for callers that need synchronous semantics (e.g. the REST
445 // controller, where the response must include the result).
446 void RequestSaveScene(bool saveAs);
449 // Defer OpenProject so the progress modal renders before LoadProject's
450 // (potentially many-second) Purge / ReloadAddons / Discover sequence
451 // blocks the main thread. Pass empty/null path to trigger the OS folder
452 // picker inside the worker (same as direct OpenProject).
453 void RequestOpenProject(const char* path);
454 // File > Close Project — closes the current project at end-of-frame.
455 // Unloads every native addon DLL on the way out so addon Intermediate
456 // folders are no longer file-locked and the user can rebuild on demand.
458 // Tools > Addons > Recover from stuck addons — Tier-2 recovery.
459 void RequestAddonRecovery(const char* reason);
460 // Tools > Addons > Restart Editor (Clean Addon Rebuild) — Tier-3 recovery.
461 // Spawns a new editor process, then exits the current one (Job Object
462 // teardown reliably kills mspdbsrv); the new instance picks up
463 // --addon-recovery and wipes intermediates before opening the project.
464 void RequestEditorRestartForAddonRecovery(const char* reason);
465 // Synchronous Tier-2 / Tier-3 implementations. Called by the EditorMain
466 // deferred-dispatcher after the request flag is set; safe to call
467 // directly when no progress modal is in flight.
469 void RecoverFromStuckAddons(const char* reason);
470 void RestartEditorForAddonRecovery(const char* reason);
471 // sceneType: 0 = 2D Canvas root, 1 = 3D Node3D root. targetDir defaults to the
472 // editor's currently-selected asset directory. Returns the created Scene asset
473 // (already saved to disk) or nullptr on failure.
474 Scene* CreateNewScene(const char* sceneName, int sceneType, bool createCamera, bool createSkybox = false, bool createDirectionalLight = false, bool createUICanvas = false, AssetDir* targetDir = nullptr);
477 void DeleteNode(Node* node);
478 void RunScript();
480 Asset* ImportAsset(const std::string& path, const std::string& overrideBaseName = "", const MeshImportOptions* meshOpts = nullptr);
481 Asset* ImportAssetCombined(const std::string& path, const std::string& overrideBaseName = "", const MeshImportOptions* meshOpts = nullptr);
482
483 // Loose-file import: copies the user-picked file(s) into the current
484 // AssetDir verbatim (no .oct conversion) and registers them with the
485 // packager. Files survive packaging as-is; Lua/native code reads them
486 // via Stream::ReadFile / SYS_AcquireFileData. Used for .json, media,
487 // and arbitrary data files an addon or script wants to ship.
489 void ImportLooseFile(const std::string& sourcePath, AssetDir* targetDir);
492 void ImportCamera(const CameraImportOptions& options);
493 void ImportScene(const SceneImportOptions& options);
497
498 // Extract embedded animations from a SkeletalMesh asset into standalone
499 // SkeletalAnimationAsset files. BeginExtractSkeletalAnimations opens the
500 // selection modal; ExtractSkeletalAnimations runs the actual generation.
502 {
505 std::vector<uint32_t> mAnimationIndices; // empty = all
506 std::string mPrefix = "SA_";
507 bool mOverwriteExisting = false;
508 bool mUniqueNames = true;
510 };
514
515 // Import animations from an animation-only .fbx/.glb/.gltf/.dae file
516 // (or any model file the user picks — only the embedded clips are read).
518 {
519 std::string mSourcePath;
521 std::vector<uint32_t> mAnimationIndices; // empty = all
522 std::string mPrefix = "SA_";
523 bool mOverwriteExisting = false;
524 bool mUniqueNames = true;
525 };
526 void BeginImportAnimations(AssetDir* targetDir = nullptr);
529
530 // Bake a target-rig-compatible clip from a source SkeletalAnimationAsset
531 // and a pair of HumanoidAvatarAssets. The bake mode is the user-selected
532 // tier (name-only remap vs reference-pose-aware).
534 {
539 std::string mOutputName; // empty = derive from src clip
540 int32_t mMode = 0; // 0=NameRemap, 1=ReferencePose
541 bool mOverwriteExisting = false;
542 bool mUniqueNames = true;
543 };
544 void BeginRetargetAnimation(AssetStub* sourceClipStub);
548 void BuildData(Platform platform, bool embedded);
558 void BuildData(const std::string& targetId, bool embedded);
560 bool IsBuildRunning() const;
569 bool DuplicateNodes(std::vector<Node*> nodes);
570 void AttachSelectedNodes(Node* newParent, int32_t boneIdx);
571
572 // Project upgrade functions
575};
576
577#define DECLARE_ACTION_INTERFACE(Name) \
578 virtual void Execute() override; \
579 virtual void Reverse() override; \
580 virtual const char* GetName() { return #Name; }
581
582// Actions
583
585{
586public:
587 DECLARE_ACTION_INTERFACE(EditProperty)
588
590 void* owner,
591 PropertyOwnerType ownerType,
592 const std::string& propName,
593 uint32_t index,
594 Datum value);
595
596protected:
597
598 void GatherProps(std::vector<Property>& props);
599 Property* FindProp(std::vector<Property>& props, const std::string& name);
600
601 void* mOwner = nullptr;
604 uint32_t mIndex = 0;
606
609};
610
611// Multi-target counterpart to ActionEditProperty: applies the same value to
612// every target whose GatherProperties() yields a property of the same name
613// AND same DatumType as the source. Targets without that property (or with a
614// type mismatch) are silently skipped and not recorded for undo. One composite
615// action = one undo step. Used by the Properties panel when the user edits a
616// property with multiple Nodes selected in the Scene Hierarchy.
618{
619public:
620 DECLARE_ACTION_INTERFACE(EditProperties)
621
623 const std::vector<void*>& owners,
624 PropertyOwnerType ownerType,
625 const std::string& propName,
626 uint32_t index,
627 Datum value,
628 DatumType sourceType);
629
630protected:
631
632 void GatherPropsFor(void* owner, std::vector<Property>& props);
633
634 std::vector<void*> mOwners;
637 uint32_t mIndex = 0;
638 DatumType mSourceType = DatumType::Count;
640
641 std::vector<AssetRef> mReferencedAssets;
642 std::vector<Datum> mPreviousValues;
643 std::vector<bool> mApplied;
644};
645
647{
648public:
649 DECLARE_ACTION_INTERFACE(EditTransforms)
650
652 const std::vector<Node3D*>& nodes,
653 const std::vector<glm::mat4>& newTransforms);
654
655protected:
656 std::vector<Node3D*> mNodes;
657 std::vector<glm::mat4> mNewTransforms;
658 std::vector<glm::mat4> mPrevTransforms;
659};
660
662{
663public:
664 DECLARE_ACTION_INTERFACE(EditWidgetTransforms)
665
667 const std::vector<Widget*>& widgets,
668 const std::vector<WidgetTransformData>& newTransforms);
669
670protected:
671 std::vector<Widget*> mWidgets;
672 std::vector<WidgetTransformData> mNewTransforms;
673 std::vector<WidgetTransformData> mPrevTransforms;
674};
675
677{
678public:
679 DECLARE_ACTION_INTERFACE(SpawnNodes)
680 ActionSpawnNodes(const std::vector<TypeId>& types);
681 ActionSpawnNodes(const std::vector<const char*>& typeNames);
682 ActionSpawnNodes(const std::vector<SceneRef>& scenes);
683 ActionSpawnNodes(const std::vector<Node*>& srcNodes);
684
685 const std::vector<NodePtr>& GetNodes() const { return mNodes; }
686
687protected:
688
689 // Action inputs, only one should be filled.
690 std::vector<TypeId> mSrcTypes;
691 std::vector<const char*> mSrcTypeNames;
692 std::vector<SceneRef> mSrcScenes;
693 std::vector<NodePtr> mSrcNodes;
694
695 // Populated after first Execute()
696 std::vector<NodePtr> mNodes;
697
698 // Populated after first Reverse()
699 std::vector<NodePtr> mParents;
700};
701
703{
704public:
705 DECLARE_ACTION_INTERFACE(DeleteNodes)
706 ActionDeleteNodes(const std::vector<Node*>& nodes);
707protected:
708 std::vector<NodePtr> mNodes;
709 std::vector<NodePtr> mParents;
710 std::vector<int32_t> mChildIndices;
711 std::vector<int32_t> mBoneIndices;
712};
713
715{
716public:
717 DECLARE_ACTION_INTERFACE(AttachNode)
718 ActionAttachNode(Node* node, Node* newParent, int32_t childIndex, int32_t boneIndex);
719protected:
720 NodePtr mNode = nullptr;
721 NodePtr mNewParent = nullptr;
722 NodePtr mPrevParent = nullptr;
723 int32_t mChildIndex = -1;
724 int32_t mPrevChildIndex = -1;
725 int32_t mBoneIndex = -1;
726 int32_t mPrevBoneIndex = -1;
727};
728
730{
731public:
732 DECLARE_ACTION_INTERFACE(SetRootNode)
734protected:
735 NodePtr mNewRoot = nullptr;
736 NodePtr mOldRoot = nullptr;
737 NodePtr mNewRootParent = nullptr;
738 int32_t mNewRootChildIndex = -1;
739};
740
742{
743public:
744 DECLARE_ACTION_INTERFACE(SetWorldRotation)
745 ActionSetWorldRotation(Node3D* node, glm::quat rot);
746protected:
747 Node3D* mNode = nullptr;
748 glm::quat mNewRotation;
749 glm::quat mPrevRotation;
750};
751
753{
754public:
755 DECLARE_ACTION_INTERFACE(SetWorldPosition)
756 ActionSetWorldPosition(Node3D* node, glm::vec3 pos);
757protected:
758 Node3D* mNode = nullptr;
759 glm::vec3 mNewPosition;
760 glm::vec3 mPrevPosition;
761};
762
764{
765public:
766 DECLARE_ACTION_INTERFACE(SetWorldScale)
767 ActionSetWorldScale(Node3D* node, glm::vec3 scale);
768protected:
769 Node3D* mNode = nullptr;
770 glm::vec3 mNewScale;
771 glm::vec3 mPrevScale;
772};
773
775{
776public:
779
780protected:
781
782 Node* mNode = nullptr;
784
785};
786
788{
789public:
792
793protected:
794
795 Node* mNode = nullptr;
797 std::vector<Property> mPrevProperties;
798};
799
801{
802 StaticMesh3D* mMesh3d = nullptr;
803 std::vector<uint32_t> mColors;
804 bool mBakedLight = false;
805};
806
808{
809public:
810 DECLARE_ACTION_INTERFACE(SetInstanceColors);
811 ActionSetInstanceColors(const std::vector<ActionSetInstanceColorsData>& data);
812
813protected:
814
815 std::vector<ActionSetInstanceColorsData> mData;
816 std::vector<ActionSetInstanceColorsData> mPrevData;
817};
818
820{
821public:
822 DECLARE_ACTION_INTERFACE(SetInstanceData);
823 ActionSetInstanceData(InstancedMesh3D* instMesh, int32_t startIndex, const std::vector<MeshInstanceData>& data);
824
825protected:
826 InstancedMesh3D* mInstMesh = nullptr;
827 int32_t mStartIndex = -1;
828
829 std::vector<MeshInstanceData> mData;
830 std::vector<MeshInstanceData> mPrevData;
831};
832
837{
838public:
839 DECLARE_ACTION_INTERFACE(ReplaceWithAsset);
840 ActionReplaceWithAsset(Asset* asset, const std::vector<Node*>& nodes);
841
842protected:
843
844 enum class ReplaceMode
845 {
847 Material,
848 Scene,
849 Invalid
850 };
851
853 ReplaceMode mMode = ReplaceMode::Invalid;
854
855 // For StaticMesh mode
856 std::vector<StaticMesh3D*> mMeshNodes;
857 std::vector<StaticMeshRef> mPrevMeshes;
858
859 // For Material mode
860 std::vector<Mesh3D*> mMatNodes;
861 std::vector<MaterialRef> mPrevMaterials;
862
863 // For Scene mode
871 std::vector<SceneReplaceEntry> mSceneEntries;
872};
873
878{
879public:
880 DECLARE_ACTION_INTERFACE(ReplaceWithInstancedMesh);
881 ActionReplaceWithInstancedMesh(const std::vector<Node*>& nodes, bool merge);
882
883protected:
884
886 {
887 std::vector<NodePtr> mOriginalNodes;
888 std::vector<NodePtr> mOriginalParents;
889 std::vector<int32_t> mOriginalChildIndices;
892 int32_t mInstancedChildIndex = -1;
893 };
894
895 std::vector<GroupEntry> mGroups;
896 bool mFirstExecute = true;
897};
898
903{
904public:
905 DECLARE_ACTION_INTERFACE(ReplaceWithStaticMesh);
906 ActionReplaceWithStaticMesh(const std::vector<Node*>& nodes);
907
908protected:
909
911 {
914 int32_t mOriginalChildIndex = -1;
915 std::vector<NodePtr> mCreatedNodes;
916 };
917
918 std::vector<SplitEntry> mEntries;
919 bool mFirstExecute = true;
920};
921
926{
927public:
928 DECLARE_ACTION_INTERFACE(ParentSelectedWith);
930 const std::vector<Node*>& nodes,
931 TypeId newParentType,
933
934protected:
935 std::vector<NodePtr> mNodes;
936 std::vector<NodePtr> mPrevParents;
937 std::vector<int32_t> mPrevChildIndices;
938 std::vector<int32_t> mPrevBoneIndices;
941 int32_t mCreatedParentChildIndex = -1;
944 bool mFirstExecute = true;
945};
946
947struct VoxelChange;
948class Voxel3D;
949
951{
952public:
954 ActionSetVoxels(Voxel3D* voxel, const std::vector<VoxelChange>& changes);
955
956protected:
957 Voxel3D* mVoxel = nullptr;
958 std::vector<VoxelChange> mChanges;
959};
960
961struct TerrainHeightChange;
962class Terrain3D;
963
965{
966public:
967 DECLARE_ACTION_INTERFACE(SetTerrainHeights);
968 ActionSetTerrainHeights(Terrain3D* terrain, const std::vector<TerrainHeightChange>& changes);
969
970protected:
971 Terrain3D* mTerrain = nullptr;
972 std::vector<TerrainHeightChange> mChanges;
973};
974
975struct TilePaintChange;
976class TileMap2D;
977
979{
980public:
982 ActionPaintTiles(TileMap2D* tileMapNode, const std::vector<TilePaintChange>& changes);
983
984protected:
985 TileMap2D* mTarget = nullptr;
986 std::vector<TilePaintChange> mChanges;
987};
#define DECLARE_ACTION_INTERFACE(Name)
Definition ActionManager.h:577
ArrayOrientation
Definition ArrayWidget.h:11
DatumType
Definition Datum.h:29
Platform
Definition EngineTypes.h:31
PropertyOwnerType
Definition EngineTypes.h:155
uint32_t TypeId
Definition EngineTypes.h:71
Definition ActionManager.h:715
Definition ActionManager.h:703
Definition ActionManager.h:618
Definition ActionManager.h:585
Datum mPreviousValue
Definition ActionManager.h:608
Property * FindProp(std::vector< Property > &props, const std::string &name)
Datum mValue
Definition ActionManager.h:605
void * mOwner
Definition ActionManager.h:601
void GatherProps(std::vector< Property > &props)
PropertyOwnerType mOwnerType
Definition ActionManager.h:602
std::string mPropertyName
Definition ActionManager.h:603
uint32_t mIndex
Definition ActionManager.h:604
AssetRef mReferencedAsset
Definition ActionManager.h:607
Definition ActionManager.h:647
Definition ActionManager.h:662
Definition ActionManager.h:209
ActionGroup(const char *name)
bool IsEmpty() const
Definition ActionManager.h:215
std::vector< Action * > & GetChildren()
Definition ActionManager.h:221
void Reverse() override
~ActionGroup() override
void Execute() override
const std::vector< Action * > & GetChildren() const
Definition ActionManager.h:222
const char * GetName() override
void Add(Action *a)
Definition ActionManager.h:230
void EXE_TimelineAddClip(Timeline *timeline, int32_t trackIndex, TypeId clipType, float startTime, float duration)
void WriteProjectLocalPolyphaseConfig()
std::string mBuildDisplayOutput
Definition ActionManager.h:376
bool mImportAnimOverwrite
Definition ActionManager.h:397
AssetRef mRetargetDstAvatar
Definition ActionManager.h:404
void RequestCloseProject()
void AttachSelectedNodes(Node *newParent, int32_t boneIdx)
bool mExtractSkelAnimOverwrite
Definition ActionManager.h:386
bool mShowRetargetModal
Definition ActionManager.h:409
void BeginActionGroup(const char *name)
void BeginImportCamera()
bool mRetargetModalJustOpened
Definition ActionManager.h:410
void BeginReimportAssetWithNewFile(AssetStub *stub)
void DrawRetargetAnimationModal()
void EXE_DeleteNodes(const std::vector< Node * > &nodes)
bool mShowBuildModal
Definition ActionManager.h:375
std::string mImportAnimSourcePath
Definition ActionManager.h:392
AssetStub * mRetargetClipStub
Definition ActionManager.h:402
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)
void EXE_SetRootNode(Node *newRoot)
void ImportScene(const SceneImportOptions &options)
void SaveSelectedAsset()
void BeginImportAnimations(AssetDir *targetDir=nullptr)
std::vector< NodePtr > mExiledNodes
Definition ActionManager.h:366
Node * EXE_SpawnNode(TypeId srcType)
Scene * CreateNewScene(const char *sceneName, int sceneType, bool createCamera, bool createSkybox=false, bool createDirectionalLight=false, bool createUICanvas=false, AssetDir *targetDir=nullptr)
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:406
void DrawBuildModal()
bool mShowImportAnimModal
Definition ActionManager.h:399
void ResetUndoRedo()
void BeginImportScene()
void EXE_SetWorldPosition(Node3D *node, glm::vec3 pos)
bool mImportAnimUnique
Definition ActionManager.h:398
bool mExtractSkelAnimRemoveEmbedded
Definition ActionManager.h:388
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:405
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")
static ActionManager * Get()
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:338
bool ImportAnimations(const ImportAnimationsOptions &options)
void BeginRetargetAnimation(AssetStub *sourceClipStub)
AssetDir * mImportAnimTargetDir
Definition ActionManager.h:393
bool mRetargetUnique
Definition ActionManager.h:408
bool ExtractSkeletalAnimations(const ExtractSkeletalAnimationsOptions &options)
void ExileNode(NodePtr node)
AssetStub * mExtractSkelAnimSourceStub
Definition ActionManager.h:383
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:385
std::vector< std::string > mImportAnimNames
Definition ActionManager.h:394
std::vector< uint8_t > mImportAnimSelections
Definition ActionManager.h:395
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:387
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:407
void EXE_SetInstanceColors(const std::vector< ActionSetInstanceColorsData > &data)
bool mBuildPending
Definition ActionManager.h:378
void CloseProject()
LocalBuildState & GetBuildState()
Definition ActionManager.h:561
void RecaptureAndSaveAllScenes()
bool CheckProjectNeedsUpgrade()
void DeleteNode(Node *node)
ActionGroup * mOpenGroup
Definition ActionManager.h:370
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:389
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:396
Node * EXE_SpawnNode(Node *srcNode)
void EXE_ResetScene(Node *node)
bool mBuildAutoScroll
Definition ActionManager.h:377
void RequestOpenProject(const char *path)
Asset * ImportAssetCombined(const std::string &path, const std::string &overrideBaseName="", const MeshImportOptions *meshOpts=nullptr)
LocalBuildState mBuildState
Definition ActionManager.h:374
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:364
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:403
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 SaveScene(bool saveAs)
void BuildCompileThreadFunc()
void RunScript()
void EXE_EditProperty(void *owner, PropertyOwnerType ownerType, const std::string &name, uint32_t index, Datum newValue)
Node * SpawnNode(TypeId nodeType, glm::vec3 position)
std::vector< Action * > mActionFuture
Definition ActionManager.h:365
std::vector< uint8_t > mExtractSkelAnimSelections
Definition ActionManager.h:384
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:371
Definition ActionManager.h:979
ActionPaintTiles(TileMap2D *tileMapNode, const std::vector< TilePaintChange > &changes)
std::vector< TilePaintChange > mChanges
Definition ActionManager.h:986
DECLARE_ACTION_INTERFACE(PaintTiles)
Action to create a new parent node and reparent selected nodes under it.
Definition ActionManager.h:926
ActionParentSelectedWith(const std::vector< Node * > &nodes, TypeId newParentType, ArrayOrientation arrayOrientation=ArrayOrientation::Vertical)
std::vector< int32_t > mPrevChildIndices
Definition ActionManager.h:937
NodePtr mCreatedParent
Definition ActionManager.h:939
TypeId mNewParentType
Definition ActionManager.h:942
std::vector< NodePtr > mNodes
Definition ActionManager.h:935
NodePtr mCreatedParentParent
Definition ActionManager.h:940
std::vector< NodePtr > mPrevParents
Definition ActionManager.h:936
DECLARE_ACTION_INTERFACE(ParentSelectedWith)
std::vector< int32_t > mPrevBoneIndices
Definition ActionManager.h:938
Action to replace selected nodes' mesh or material with an asset, or replace with scene instances.
Definition ActionManager.h:837
DECLARE_ACTION_INTERFACE(ReplaceWithAsset)
std::vector< Mesh3D * > mMatNodes
Definition ActionManager.h:860
std::vector< MaterialRef > mPrevMaterials
Definition ActionManager.h:861
std::vector< SceneReplaceEntry > mSceneEntries
Definition ActionManager.h:871
ReplaceMode
Definition ActionManager.h:845
AssetRef mAsset
Definition ActionManager.h:852
std::vector< StaticMesh3D * > mMeshNodes
Definition ActionManager.h:856
ActionReplaceWithAsset(Asset *asset, const std::vector< Node * > &nodes)
std::vector< StaticMeshRef > mPrevMeshes
Definition ActionManager.h:857
Action to merge selected StaticMesh3D nodes into InstancedMesh3D nodes grouped by mesh.
Definition ActionManager.h:878
std::vector< GroupEntry > mGroups
Definition ActionManager.h:895
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:903
DECLARE_ACTION_INTERFACE(ReplaceWithStaticMesh)
std::vector< SplitEntry > mEntries
Definition ActionManager.h:918
ActionReplaceWithStaticMesh(const std::vector< Node * > &nodes)
Definition ActionManager.h:788
SceneRef mScene
Definition ActionManager.h:796
DECLARE_ACTION_INTERFACE(ResetScene)
ActionResetScene(Node *node)
std::vector< Property > mPrevProperties
Definition ActionManager.h:797
Definition ActionManager.h:808
DECLARE_ACTION_INTERFACE(SetInstanceColors)
std::vector< ActionSetInstanceColorsData > mPrevData
Definition ActionManager.h:816
std::vector< ActionSetInstanceColorsData > mData
Definition ActionManager.h:815
ActionSetInstanceColors(const std::vector< ActionSetInstanceColorsData > &data)
Definition ActionManager.h:820
std::vector< MeshInstanceData > mPrevData
Definition ActionManager.h:830
DECLARE_ACTION_INTERFACE(SetInstanceData)
std::vector< MeshInstanceData > mData
Definition ActionManager.h:829
ActionSetInstanceData(InstancedMesh3D *instMesh, int32_t startIndex, const std::vector< MeshInstanceData > &data)
Definition ActionManager.h:730
Definition ActionManager.h:965
ActionSetTerrainHeights(Terrain3D *terrain, const std::vector< TerrainHeightChange > &changes)
DECLARE_ACTION_INTERFACE(SetTerrainHeights)
std::vector< TerrainHeightChange > mChanges
Definition ActionManager.h:972
Definition ActionManager.h:951
std::vector< VoxelChange > mChanges
Definition ActionManager.h:958
DECLARE_ACTION_INTERFACE(SetVoxels)
ActionSetVoxels(Voxel3D *voxel, const std::vector< VoxelChange > &changes)
Definition ActionManager.h:753
Definition ActionManager.h:742
Definition ActionManager.h:764
Definition ActionManager.h:677
std::vector< NodePtr > mParents
Definition ActionManager.h:699
std::vector< TypeId > mSrcTypes
Definition ActionManager.h:690
std::vector< SceneRef > mSrcScenes
Definition ActionManager.h:692
std::vector< NodePtr > mNodes
Definition ActionManager.h:696
std::vector< NodePtr > mSrcNodes
Definition ActionManager.h:693
std::vector< const char * > mSrcTypeNames
Definition ActionManager.h:691
Definition ActionManager.h:775
ActionUnlinkScene(Node *node)
DECLARE_ACTION_INTERFACE(UnlinkScene)
SceneRef mScene
Definition ActionManager.h:783
Definition ActionManager.h:159
virtual void Execute()
virtual ~Action()
Definition ActionManager.h:161
virtual const char * GetName()=0
virtual void Reverse()
Definition AssetDir.h:11
Definition AssetRef.h:18
Definition Asset.h:119
Definition Datum.h:169
Definition InstancedMesh3d.h:13
Definition Material.h:48
Definition Mesh3d.h:13
Definition Node3d.h:14
Definition Node.h:67
Definition ActionManager.h:178
PluginAction(const char *name, DoFn doFn, UndoFn undoFn, FreeFn freeFn, void *userData)
void(*)(void *userData) UndoFn
Definition ActionManager.h:181
void Execute() override
~PluginAction() override
void(*)(void *userData) DoFn
Definition ActionManager.h:180
void SetPluginTag(const std::string &tag)
Definition ActionManager.h:192
const char * GetName() override
const std::string & GetPluginTag() const
Definition ActionManager.h:193
void Reverse() override
void(*)(void *userData) FreeFn
Definition ActionManager.h:182
Definition Property.h:14
Definition Scene.h:36
Definition StaticMesh3d.h:12
Definition StaticMesh.h:18
Definition Terrain3d.h:13
Definition TileMap2d.h:23
Definition Timeline.h:10
Definition Voxel3d.h:61
Definition Widget.h:53
Definition SmartPointer.h:631
Definition ActionManager.h:346
std::string mLookupKey
Definition ActionManager.h:348
bool mEngineAsset
Definition ActionManager.h:349
std::string mAbsolutePath
Definition ActionManager.h:347
AssetStub * mSourceMeshStub
Definition ActionManager.h:503
AssetDir * mTargetDir
Definition ActionManager.h:504
std::string mPrefix
Definition ActionManager.h:506
bool mUniqueNames
Definition ActionManager.h:508
std::vector< uint32_t > mAnimationIndices
Definition ActionManager.h:505
bool mRemoveEmbeddedAfterExtract
Definition ActionManager.h:509
bool mOverwriteExisting
Definition ActionManager.h:507
Definition ActionManager.h:518
std::string mSourcePath
Definition ActionManager.h:519
bool mOverwriteExisting
Definition ActionManager.h:523
AssetDir * mTargetDir
Definition ActionManager.h:520
bool mUniqueNames
Definition ActionManager.h:524
std::vector< uint32_t > mAnimationIndices
Definition ActionManager.h:521
std::string mPrefix
Definition ActionManager.h:522
Definition ActionManager.h:534
AssetStub * mTargetAvatarStub
Definition ActionManager.h:537
bool mUniqueNames
Definition ActionManager.h:542
std::string mOutputName
Definition ActionManager.h:539
AssetStub * mSourceClipStub
Definition ActionManager.h:535
bool mOverwriteExisting
Definition ActionManager.h:541
AssetDir * mTargetDir
Definition ActionManager.h:538
int32_t mMode
Definition ActionManager.h:540
AssetStub * mSourceAvatarStub
Definition ActionManager.h:536
Definition ActionManager.h:865
NodePtr mSpawnedNode
Definition ActionManager.h:869
NodePtr mOriginal
Definition ActionManager.h:866
NodePtr mParent
Definition ActionManager.h:867
Definition ActionManager.h:886
NodePtr mInstancedNode
Definition ActionManager.h:890
std::vector< int32_t > mOriginalChildIndices
Definition ActionManager.h:889
std::vector< NodePtr > mOriginalNodes
Definition ActionManager.h:887
NodePtr mInstancedParent
Definition ActionManager.h:891
std::vector< NodePtr > mOriginalParents
Definition ActionManager.h:888
Definition ActionManager.h:911
NodePtr mOriginalParent
Definition ActionManager.h:913
std::vector< NodePtr > mCreatedNodes
Definition ActionManager.h:915
NodePtr mOriginalNode
Definition ActionManager.h:912
Definition ActionManager.h:801
std::vector< uint32_t > mColors
Definition ActionManager.h:803
Definition Asset.h:88
State for async local build operations.
Definition ActionManager.h:41
std::string mProjectName
Definition ActionManager.h:73
std::string mExtension
Definition ActionManager.h:75
std::string mStripCommand
Definition ActionManager.h:84
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:79
std::string mAndroidResolvedIconSource
Definition ActionManager.h:103
std::string mCompileCommand
Definition ActionManager.h:80
bool mForceRebuild
Definition ActionManager.h:93
Platform mPlatform
Definition ActionManager.h:54
bool mStandalone
Definition ActionManager.h:77
bool mForceCompile
Definition ActionManager.h:98
std::string mPackagedDir
Definition ActionManager.h:70
void Reset()
Definition ActionManager.h:105
int64_t mExeMTimeBeforeBuild
Definition ActionManager.h:76
std::atomic< bool > mCancelRequested
Definition ActionManager.h:44
std::string mBuildProjDir
Definition ActionManager.h:71
std::string mExeSrc
Definition ActionManager.h:74
bool mNeedCompile
Definition ActionManager.h:78
bool mRunOnDevice
Definition ActionManager.h:92
bool mOpenDirectoryOnFinish
Definition ActionManager.h:94
std::string mInjectedVcxprojPath
Definition ActionManager.h:88
std::string mProjectDir
Definition ActionManager.h:72
bool mOutputDirty
Definition ActionManager.h:51
std::string mPrebuiltExePath
Definition ActionManager.h:81
std::string mShaderCompileCommand
Definition ActionManager.h:83
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:82
bool mRunAfterBuild
Definition ActionManager.h:91
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