Jelajahi Sumber

Animation2D: add save function, rename member functions.

aster2013 11 tahun lalu
induk
melakukan
6527d78c96

+ 3 - 3
Source/Engine/LuaScript/pkgs/Urho2D/Animation2D.pkg

@@ -4,9 +4,9 @@ class Animation2D : public Resource
 {
     float GetTotalTime() const;
     unsigned GetNumFrames() const;
-    Sprite2D* GetFrameByTime(float time) const;
-    Sprite2D* GetFrameByIndex(unsigned index) const;
-
+    Sprite2D* GetFrameSprite(unsigned index) const;
+    Sprite2D* GetFrameSpriteByTime(float time) const;
+    
     tolua_readonly tolua_property__get_set float totalTime;
     tolua_readonly tolua_property__get_set unsigned numFrames;
 };

+ 2 - 0
Source/Engine/Script/Urho2DAPI.cpp

@@ -104,6 +104,8 @@ static void RegisterAnimation2D(asIScriptEngine* engine)
     RegisterResource<Animation2D>(engine, "Animation2D");
     engine->RegisterObjectMethod("Animation2D", "float get_totalTime() const", asMETHOD(Animation2D, GetTotalTime), asCALL_THISCALL);
     engine->RegisterObjectMethod("Animation2D", "uint get_numFrames() const", asMETHOD(Animation2D, GetNumFrames), asCALL_THISCALL);
+    engine->RegisterObjectMethod("Animation2D", "Sprite@+ GetFrameSprite(uint) const", asMETHOD(Animation2D, GetFrameSprite), asCALL_THISCALL);
+    engine->RegisterObjectMethod("Animation2D", "Sprite@+ GetFrameSpriteByTime(float) const", asMETHOD(Animation2D, GetFrameSpriteByTime), asCALL_THISCALL);
 }
 
 static void RegisterAnimatedSprite2D(asIScriptEngine* engine)

+ 2 - 2
Source/Engine/Urho2D/AnimatedSprite2D.cpp

@@ -107,7 +107,7 @@ void AnimatedSprite2D::SetAnimation(Animation2D* animation)
 
     if (animation_)
     {
-        SetSprite(animation_->GetFrameByIndex(0));
+        SetSprite(animation_->GetFrameSprite(0));
         animationTotalTime_ = animation_->GetTotalTime();
     }
 }
@@ -159,7 +159,7 @@ void AnimatedSprite2D::HandleScenePostUpdate(StringHash eventType, VariantMap& e
         break;
     }
 
-    Sprite2D* sprite = animation_->GetFrameByTime(time);
+    Sprite2D* sprite = animation_->GetFrameSpriteByTime(time);
     if (GetSprite() != sprite)
         SetSprite(sprite);
 

+ 28 - 10
Source/Engine/Urho2D/Animation2D.cpp

@@ -119,7 +119,25 @@ bool Animation2D::Load(Deserializer& source)
 
 bool Animation2D::Save(Serializer& dest) const
 {
-    return false;
+    XMLFile xmlFile(context_);
+    XMLElement rootElem = xmlFile.CreateRoot("Animation");
+    
+    float endTime = 0.0f;
+    for (unsigned i = 0; i < frameSprites_.Size(); ++i)
+    {
+        XMLElement frameElem = rootElem.CreateChild("Frame");
+        frameElem.SetFloat("duration", frameEndTimes_[i] - endTime);
+        endTime = frameEndTimes_[i];
+
+        Sprite2D* sprite = frameSprites_[i];
+        SpriteSheet2D* spriteSheet = sprite->GetSpriteSheet();
+        if (!spriteSheet)
+            frameElem.SetString("sprite", sprite->GetName());
+        else
+            frameElem.SetString("sprite", spriteSheet->GetName() + "@" + sprite->GetName());
+    }
+
+    return xmlFile.Save(dest);
 }
 
 float Animation2D::GetTotalTime() const
@@ -132,7 +150,15 @@ unsigned Animation2D::GetNumFrames() const
     return frameSprites_.Size();
 }
 
-Sprite2D* Animation2D::GetFrameByTime(float time) const
+Sprite2D* Animation2D::GetFrameSprite(unsigned index) const
+{
+    if (index < frameSprites_.Size())
+        return frameSprites_[index];
+
+    return 0;
+}
+
+Sprite2D* Animation2D::GetFrameSpriteByTime(float time) const
 {
     if (time < 0.0f)
         return 0;
@@ -146,12 +172,4 @@ Sprite2D* Animation2D::GetFrameByTime(float time) const
     return 0;
 }
 
-Sprite2D* Animation2D::GetFrameByIndex(unsigned index) const
-{
-    if (index < frameSprites_.Size())
-        return frameSprites_[index];
-
-    return 0;
-}
-
 }

+ 7 - 7
Source/Engine/Urho2D/Animation2D.h

@@ -46,16 +46,16 @@ public:
     virtual bool Load(Deserializer& source);
     /// Save resource. Return true if successful.
     virtual bool Save(Serializer& dest) const;
-    
+
     /// Return total time.
     float GetTotalTime() const;
-    /// Return num key frame.
+    /// Return number of frames.
     unsigned GetNumFrames() const;
-    /// Return frame by time.
-    Sprite2D* GetFrameByTime(float time) const;
-    /// Return frame by index.
-    Sprite2D* GetFrameByIndex(unsigned index) const;
-    
+    /// Return Frame sprite.
+    Sprite2D* GetFrameSprite(unsigned index) const;
+    /// Return frame sprite by time.
+    Sprite2D* GetFrameSpriteByTime(float time) const;
+
 private:
     /// Frame end times.
     PODVector<float> frameEndTimes_;