Browse Source

Serializing model animation import settings

Josh Engebretson 10 years ago
parent
commit
26079d35f2

+ 3 - 1
Script/AtomicEditor/ui/inspector/ArrayEditWidget.ts

@@ -19,7 +19,7 @@ class ArrayEditWidget extends Atomic.UILayout {
 
         this.gravity = Atomic.UI_GRAVITY_ALL;
 
-        var countEdit = InspectorUtils.createAttrEditField(title, this);
+        var countEdit = this.countEdit = InspectorUtils.createAttrEditField(title, this);
 
         InspectorUtils.createSeparator(this);
 
@@ -72,6 +72,8 @@ class ArrayEditWidget extends Atomic.UILayout {
 
     }
 
+    countEdit:Atomic.UIEditField;
+
     onCountChanged: (count:number) => void;
 
     countRestore: string;

+ 62 - 11
Script/AtomicEditor/ui/inspector/ModelInspector.ts

@@ -24,6 +24,20 @@ class ModelInspector extends InspectorWidget {
 
         this.importer.importAnimations = this.importAnimationBox.value ? true : false;
 
+        for (var i = 0; i < this.importer.animationCount; i++) {
+
+          var info = this.importer.getAnimationInfo(i);
+
+          var nameEdit = this.nameEdits[i];
+          var startEdit = this.startEdits[i];
+          var endEdit = this.endEdits[i];
+
+          info.name = nameEdit.text;
+          info.startTime = Number(startEdit.text);
+          info.endTime = Number(endEdit.text);
+
+        }
+
         this.importer.import(this.asset.guid);
         this.asset.save();
 
@@ -69,28 +83,61 @@ class ModelInspector extends InspectorWidget {
 
         animationLayout.addChild(animLayout);
 
+        this.createAnimationEntries();
+
         // apply button
         rootLayout.addChild(this.createApplyButton());
 
     }
 
-    onAnimationCountChanged(count:number) {
+    createAnimationEntries() {
+
+        var layout = this.animationInfoLayout;
+        layout.deleteAllChildren();
+
+        var count = this.importer.animationCount;
+
+        this.importAnimationArray.countEdit.text = count.toString();
+
+        this.nameEdits = [];
+        this.startEdits = [];
+        this.endEdits = [];
 
-      var layout = this.animationInfoLayout;
-      layout.deleteAllChildren();
+        for (var i = 0; i < count; i++) {
 
-      for (var i = 0; i < count; i++) {
+            var animInfo = this.importer.getAnimationInfo(i);
 
-        var name = InspectorUtils.createAttrName("Animation " + i.toString() + ":");
-        layout.addChild(name);
+            var name = InspectorUtils.createAttrName("Animation " + i.toString() + ":");
+            layout.addChild(name);
 
-        InspectorUtils.createAttrEditField("Name", layout);
-        InspectorUtils.createAttrEditField("Start", layout);
-        InspectorUtils.createAttrEditField("End", layout);
+            var nameEdit = InspectorUtils.createAttrEditField("Name", layout);
+            nameEdit.text = animInfo.name;
 
-        InspectorUtils.createSeparator(layout);
+            var startEdit = InspectorUtils.createAttrEditField("Start", layout);
+            startEdit.text = animInfo.startTime.toString();
 
-      }
+            var endEdit = InspectorUtils.createAttrEditField("End", layout);
+            endEdit.text = animInfo.endTime.toString();
+
+            this.nameEdits.push(nameEdit);
+            this.startEdits.push(startEdit);
+            this.endEdits.push(endEdit);
+
+            InspectorUtils.createSeparator(layout);
+
+        }
+
+    }
+
+    onAnimationCountChanged(count: number) {
+
+        if (this.importer.animationCount == count) {
+            return;
+        }
+
+        this.importer.animationCount = count;
+
+        this.createAnimationEntries();
 
     }
 
@@ -102,6 +149,10 @@ class ModelInspector extends InspectorWidget {
     importAnimationArray: ArrayEditWidget;
     animationInfoLayout: Atomic.UILayout;
 
+    nameEdits: Atomic.UIEditField[];
+    startEdits: Atomic.UIEditField[];
+    endEdits: Atomic.UIEditField[];
+
     asset: ToolCore.Asset;
     importer: ToolCore.ModelImporter;
 

+ 4 - 0
Script/TypeScript/ToolCore.d.ts

@@ -313,6 +313,7 @@ declare module ToolCore {
 
       scale: number;
       importAnimations: boolean;
+      animationCount: number;
 
       // Construct.
       constructor(asset: Asset);
@@ -322,6 +323,9 @@ declare module ToolCore {
       setScale(scale: number): void;
       getImportAnimations(): boolean;
       setImportAnimations(importAnimations: boolean): void;
+      getAnimationCount(): number;
+      setAnimationCount(count: number): void;
+      getAnimationInfo(index: number): AnimationImportInfo;
       import(guid: string): boolean;
 
    }

+ 23 - 0
Source/ToolCore/Assets/ModelImporter.cpp

@@ -213,6 +213,29 @@ bool ModelImporter::Import(const String& guid)
     return true;
 }
 
+unsigned ModelImporter::GetAnimationCount()
+{
+    return animationInfo_.Size();
+}
+
+void ModelImporter::SetAnimationCount(unsigned count)
+{
+    if (animationInfo_.Size() >= count)
+    {
+        animationInfo_.Resize(count);
+    }
+    else
+    {
+        for (unsigned i = animationInfo_.Size(); i < count; i++)
+        {
+            SharedPtr<AnimationImportInfo> info(new AnimationImportInfo(context_));
+            animationInfo_.Push(info);
+        }
+
+    }
+
+}
+
 bool ModelImporter::LoadSettingsInternal()
 {
     if (!AssetImporter::LoadSettingsInternal())

+ 5 - 0
Source/ToolCore/Assets/ModelImporter.h

@@ -59,6 +59,11 @@ public:
     bool GetImportAnimations() { return importAnimations_; }
     void SetImportAnimations(bool importAnimations) { importAnimations_ = importAnimations; }
 
+    unsigned GetAnimationCount();
+    void SetAnimationCount(unsigned count);
+
+    AnimationImportInfo* GetAnimationInfo(unsigned index) { return animationInfo_[index]; }
+
     bool Import(const String& guid);
 
 protected: