Browse Source

Refactor AnimatedSprite2D, make it derived from StaticSprite2D, Fix issue #547.

aster2013 11 years ago
parent
commit
8b8932fa7a

+ 1 - 20
Source/Engine/LuaScript/pkgs/Urho2D/AnimatedSprite2D.pkg

@@ -7,38 +7,19 @@ enum LoopMode2D
     LM_FORCE_CLAMPED
     LM_FORCE_CLAMPED
 };
 };
 
 
-class AnimatedSprite2D : Drawable
+class AnimatedSprite2D : StaticSprite2D
 {
 {
-    void SetLayer(int layer);
-    void SetOrderInLayer(int orderInLayer);
-    void SetBlendMode(BlendMode mode);
-    void SetFlip(bool flipX, bool flipY);
-    void SetFlipX(bool flipX);
-    void SetFlipY(bool flipY);
-    void SetColor(const Color& color);
     void SetSpeed(float speed);
     void SetSpeed(float speed);
     void SetAnimation(AnimationSet2D* animationSet, const String name, LoopMode2D loopMode = LM_DEFAULT);
     void SetAnimation(AnimationSet2D* animationSet, const String name, LoopMode2D loopMode = LM_DEFAULT);
     void SetAnimation(const String name, LoopMode2D loopMode = LM_DEFAULT);
     void SetAnimation(const String name, LoopMode2D loopMode = LM_DEFAULT);
     void SetAnimationSet(AnimationSet2D* animationSet);
     void SetAnimationSet(AnimationSet2D* animationSet);
     void SetLoopMode(LoopMode2D loopMode);
     void SetLoopMode(LoopMode2D loopMode);
 
 
-    int GetLayer() const;
-    int GetOrderInLayer() const;
-    BlendMode GetBlendMode() const;
-    bool GetFlipX() const;
-    bool GetFlipY() const;
-    const Color& GetColor() const;
     float GetSpeed() const;
     float GetSpeed() const;
     const String GetAnimation() const;
     const String GetAnimation() const;
     AnimationSet2D* GetAnimationSet() const;
     AnimationSet2D* GetAnimationSet() const;
     LoopMode2D GetLoopMode() const;
     LoopMode2D GetLoopMode() const;
 
 
-    tolua_property__get_set int layer;
-    tolua_property__get_set int orderInLayer;
-    tolua_property__get_set BlendMode blendMode;
-    tolua_property__get_set bool flipX;
-    tolua_property__get_set bool flipY;
-    tolua_property__get_set Color& color;
     tolua_property__get_set float speed;
     tolua_property__get_set float speed;
     tolua_property__get_set String animation;
     tolua_property__get_set String animation;
     tolua_property__get_set AnimationSet2D* animationSet;
     tolua_property__get_set AnimationSet2D* animationSet;

+ 1 - 14
Source/Engine/Script/Urho2DAPI.cpp

@@ -152,20 +152,7 @@ static void RegisterAnimatedSprite2D(asIScriptEngine* engine)
     engine->RegisterEnumValue("LoopMode2D", "LM_FORCE_LOOPED", LM_FORCE_LOOPED);
     engine->RegisterEnumValue("LoopMode2D", "LM_FORCE_LOOPED", LM_FORCE_LOOPED);
     engine->RegisterEnumValue("LoopMode2D", "LM_FORCE_CLAMPED", LM_FORCE_CLAMPED);
     engine->RegisterEnumValue("LoopMode2D", "LM_FORCE_CLAMPED", LM_FORCE_CLAMPED);
 
 
-    RegisterDrawable<AnimatedSprite2D>(engine, "AnimatedSprite2D");
-    engine->RegisterObjectMethod("AnimatedSprite2D", "void set_layer(int)", asMETHOD(AnimatedSprite2D, SetLayer), asCALL_THISCALL);
-    engine->RegisterObjectMethod("AnimatedSprite2D", "int get_layer() const", asMETHOD(AnimatedSprite2D, GetLayer), asCALL_THISCALL);
-    engine->RegisterObjectMethod("AnimatedSprite2D", "void set_orderInLayer(int)", asMETHOD(AnimatedSprite2D, SetOrderInLayer), asCALL_THISCALL);
-    engine->RegisterObjectMethod("AnimatedSprite2D", "int get_orderInLayer() const", asMETHOD(AnimatedSprite2D, GetOrderInLayer), asCALL_THISCALL);
-    engine->RegisterObjectMethod("AnimatedSprite2D", "void set_blendMode(BlendMode)", asMETHOD(AnimatedSprite2D, SetBlendMode), asCALL_THISCALL);
-    engine->RegisterObjectMethod("AnimatedSprite2D", "BlendMode get_blendMode() const", asMETHOD(AnimatedSprite2D, GetBlendMode), asCALL_THISCALL);
-    engine->RegisterObjectMethod("AnimatedSprite2D", "void SetFlip(bool, bool)", asMETHOD(AnimatedSprite2D, SetFlip), asCALL_THISCALL);
-    engine->RegisterObjectMethod("AnimatedSprite2D", "void set_flipX(bool)", asMETHOD(AnimatedSprite2D, SetFlipX), asCALL_THISCALL);
-    engine->RegisterObjectMethod("AnimatedSprite2D", "bool get_flipX() const", asMETHOD(AnimatedSprite2D, GetFlipX), asCALL_THISCALL);
-    engine->RegisterObjectMethod("AnimatedSprite2D", "void set_flipY(bool)", asMETHOD(AnimatedSprite2D, SetFlipY), asCALL_THISCALL);
-    engine->RegisterObjectMethod("AnimatedSprite2D", "bool get_flipY() const", asMETHOD(AnimatedSprite2D, GetFlipY), asCALL_THISCALL);
-    engine->RegisterObjectMethod("AnimatedSprite2D", "void set_color(const Color&in)", asMETHOD(AnimatedSprite2D, SetColor), asCALL_THISCALL);
-    engine->RegisterObjectMethod("AnimatedSprite2D", "const Color& get_color() const", asMETHOD(AnimatedSprite2D, GetColor), asCALL_THISCALL);
+    RegisterStaticSprite2D<AnimatedSprite2D>(engine, "AnimatedSprite2D");
     engine->RegisterObjectMethod("AnimatedSprite2D", "void set_speed(float)", asMETHOD(AnimatedSprite2D, SetSpeed), asCALL_THISCALL);
     engine->RegisterObjectMethod("AnimatedSprite2D", "void set_speed(float)", asMETHOD(AnimatedSprite2D, SetSpeed), asCALL_THISCALL);
     engine->RegisterObjectMethod("AnimatedSprite2D", "float get_speed() const", asMETHOD(AnimatedSprite2D, GetSpeed), asCALL_THISCALL);
     engine->RegisterObjectMethod("AnimatedSprite2D", "float get_speed() const", asMETHOD(AnimatedSprite2D, GetSpeed), asCALL_THISCALL);
     engine->RegisterObjectMethod("AnimatedSprite2D", "void SetAnimation(AnimationSet2D@+, const String&, LoopMode2D loopMode=LM_DEFAULT)", asMETHODPR(AnimatedSprite2D, SetAnimation, (AnimationSet2D*, const String&, LoopMode2D), void), asCALL_THISCALL);
     engine->RegisterObjectMethod("AnimatedSprite2D", "void SetAnimation(AnimationSet2D@+, const String&, LoopMode2D loopMode=LM_DEFAULT)", asMETHODPR(AnimatedSprite2D, SetAnimation, (AnimationSet2D*, const String&, LoopMode2D), void), asCALL_THISCALL);

+ 52 - 95
Source/Engine/Urho2D/AnimatedSprite2D.cpp

@@ -25,7 +25,6 @@
 #include "Animation2D.h"
 #include "Animation2D.h"
 #include "AnimationSet2D.h"
 #include "AnimationSet2D.h"
 #include "Context.h"
 #include "Context.h"
-#include "Drawable2D.h"
 #include "ResourceCache.h"
 #include "ResourceCache.h"
 #include "Scene.h"
 #include "Scene.h"
 #include "SceneEvents.h"
 #include "SceneEvents.h"
@@ -49,13 +48,7 @@ const char* loopModeNames[] =
 };
 };
 
 
 AnimatedSprite2D::AnimatedSprite2D(Context* context) :
 AnimatedSprite2D::AnimatedSprite2D(Context* context) :
-    Drawable(context, DRAWABLE_GEOMETRY),
-    layer_(0),
-    orderInLayer_(0),
-    blendMode_(BLEND_ALPHA),
-    flipX_(false),
-    flipY_(false),
-    color_(Color::WHITE),
+    StaticSprite2D(context),
     speed_(1.0f),
     speed_(1.0f),
     loopMode_(LM_DEFAULT),
     loopMode_(LM_DEFAULT),
     looped_(false),
     looped_(false),
@@ -70,22 +63,18 @@ AnimatedSprite2D::~AnimatedSprite2D()
 void AnimatedSprite2D::RegisterObject(Context* context)
 void AnimatedSprite2D::RegisterObject(Context* context)
 {
 {
     context->RegisterFactory<AnimatedSprite2D>(URHO2D_CATEGORY);
     context->RegisterFactory<AnimatedSprite2D>(URHO2D_CATEGORY);
-    ACCESSOR_ATTRIBUTE("Layer", GetLayer, SetLayer, int, 0, AM_DEFAULT);
-    ACCESSOR_ATTRIBUTE("Order in Layer", GetOrderInLayer, SetOrderInLayer, int, 0, AM_DEFAULT);
-    ENUM_ACCESSOR_ATTRIBUTE("Blend Mode", GetBlendMode, SetBlendMode, BlendMode, blendModeNames, BLEND_ALPHA, AM_DEFAULT);
-    ACCESSOR_ATTRIBUTE("Flip X", GetFlipX, SetFlipX, bool, false, AM_DEFAULT);
-    ACCESSOR_ATTRIBUTE("Flip Y", GetFlipY, SetFlipY, bool, false, AM_DEFAULT);
-    ACCESSOR_ATTRIBUTE("Color", GetColor, SetColor, Color, Color::WHITE, AM_DEFAULT);
+
+    COPY_BASE_ATTRIBUTES(StaticSprite2D);
+    REMOVE_ATTRIBUTE("Sprite");
     ACCESSOR_ATTRIBUTE("Speed", GetSpeed, SetSpeed, float, 1.0f, AM_DEFAULT);
     ACCESSOR_ATTRIBUTE("Speed", GetSpeed, SetSpeed, float, 1.0f, AM_DEFAULT);
     MIXED_ACCESSOR_ATTRIBUTE("Animation Set", GetAnimationSetAttr, SetAnimationSetAttr, ResourceRef, ResourceRef(AnimatedSprite2D::GetTypeStatic()), AM_DEFAULT);
     MIXED_ACCESSOR_ATTRIBUTE("Animation Set", GetAnimationSetAttr, SetAnimationSetAttr, ResourceRef, ResourceRef(AnimatedSprite2D::GetTypeStatic()), AM_DEFAULT);
     ACCESSOR_ATTRIBUTE("Animation", GetAnimation, SetAnimationAttr, String, String::EMPTY, AM_DEFAULT);
     ACCESSOR_ATTRIBUTE("Animation", GetAnimation, SetAnimationAttr, String, String::EMPTY, AM_DEFAULT);
     ENUM_ACCESSOR_ATTRIBUTE("Loop Mode", GetLoopMode, SetLoopMode, LoopMode2D, loopModeNames, LM_DEFAULT, AM_DEFAULT);
     ENUM_ACCESSOR_ATTRIBUTE("Loop Mode", GetLoopMode, SetLoopMode, LoopMode2D, loopModeNames, LM_DEFAULT, AM_DEFAULT);
-    COPY_BASE_ATTRIBUTES(Drawable);
 }
 }
 
 
 void AnimatedSprite2D::OnSetEnabled()
 void AnimatedSprite2D::OnSetEnabled()
 {
 {
-    Drawable::OnSetEnabled();
+    StaticSprite2D::OnSetEnabled();
 
 
     Scene* scene = GetScene();
     Scene* scene = GetScene();
     if (scene)
     if (scene)
@@ -97,84 +86,6 @@ void AnimatedSprite2D::OnSetEnabled()
     }
     }
 }
 }
 
 
-void AnimatedSprite2D::SetLayer(int layer)
-{
-    if (layer == layer_)
-        return;
-
-    layer_ = layer;
-
-    for (unsigned i = 0; i < timelineNodes_.Size(); ++i)
-    {
-        if (!timelineNodes_[i])
-            continue;
-
-        StaticSprite2D* staticSprite = timelineNodes_[i]->GetComponent<StaticSprite2D>();
-        staticSprite->SetLayer(layer_);
-    }
-}
-
-void AnimatedSprite2D::SetOrderInLayer(int orderInLayer)
-{
-    orderInLayer_ = orderInLayer;
-}
-
-void AnimatedSprite2D::SetBlendMode(BlendMode blendMode)
-{
-    if (blendMode == blendMode_)
-        return;
-
-    blendMode_ = blendMode;
-
-    for (unsigned i = 0; i < timelineNodes_.Size(); ++i)
-    {
-        if (!timelineNodes_[i])
-            continue;
-
-        StaticSprite2D* staticSprite = timelineNodes_[i]->GetComponent<StaticSprite2D>();
-        staticSprite->SetBlendMode(blendMode_);
-    }
-}
-
-void AnimatedSprite2D::SetFlip(bool flipX, bool flipY)
-{
-    if (flipX == flipX_ && flipY == flipY_)
-        return;
-
-    flipX_ = flipX;
-    flipY_ = flipY;
-
-    for (unsigned i = 0; i < timelineNodes_.Size(); ++i)
-    {
-        if (!timelineNodes_[i])
-            continue;
-
-        StaticSprite2D* staticSprite = timelineNodes_[i]->GetComponent<StaticSprite2D>();
-        staticSprite->SetFlip(flipX_, flipY_);
-    }
-
-    // For editor paused mode
-    UpdateAnimation(0.0f);
-
-    MarkNetworkUpdate();
-}
-
-void AnimatedSprite2D::SetFlipX(bool flipX)
-{
-    SetFlip(flipX, flipY_);
-}
-
-void AnimatedSprite2D::SetFlipY(bool flipY)
-{
-    SetFlip(flipX_, flipY);
-}
-
-void AnimatedSprite2D::SetColor(const Color& color)
-{
-    color_ = color;
-    MarkNetworkUpdate();
-}
-
 void AnimatedSprite2D::SetSpeed(float speed)
 void AnimatedSprite2D::SetSpeed(float speed)
 {
 {
     speed_ = speed;
     speed_ = speed;
@@ -252,7 +163,7 @@ ResourceRef AnimatedSprite2D::GetAnimationSetAttr() const
 
 
 void AnimatedSprite2D::OnNodeSet(Node* node)
 void AnimatedSprite2D::OnNodeSet(Node* node)
 {
 {
-    Drawable::OnNodeSet(node);
+    StaticSprite2D::OnNodeSet(node);
 
 
     if (node)
     if (node)
     {
     {
@@ -296,6 +207,50 @@ void AnimatedSprite2D::OnWorldBoundingBoxUpdate()
     boundingBox_ = worldBoundingBox_.Transformed(node_->GetWorldTransform().Inverse());
     boundingBox_ = worldBoundingBox_.Transformed(node_->GetWorldTransform().Inverse());
 }
 }
 
 
+void AnimatedSprite2D::OnLayerChanged()
+{
+    for (unsigned i = 0; i < timelineNodes_.Size(); ++i)
+    {
+        if (!timelineNodes_[i])
+            continue;
+
+        StaticSprite2D* staticSprite = timelineNodes_[i]->GetComponent<StaticSprite2D>();
+        staticSprite->SetLayer(layer_);
+    }
+}
+
+void AnimatedSprite2D::OnBlendModeChanged()
+{
+    for (unsigned i = 0; i < timelineNodes_.Size(); ++i)
+    {
+        if (!timelineNodes_[i])
+            continue;
+
+        StaticSprite2D* staticSprite = timelineNodes_[i]->GetComponent<StaticSprite2D>();
+        staticSprite->SetBlendMode(blendMode_);
+    }
+}
+
+void AnimatedSprite2D::OnFlipChanged()
+{
+    for (unsigned i = 0; i < timelineNodes_.Size(); ++i)
+    {
+        if (!timelineNodes_[i])
+            continue;
+
+        StaticSprite2D* staticSprite = timelineNodes_[i]->GetComponent<StaticSprite2D>();
+        staticSprite->SetFlip(flipX_, flipY_);
+    }
+
+    // For editor paused mode
+    UpdateAnimation(0.0f);
+}
+
+void AnimatedSprite2D::UpdateVertices()
+{
+    verticesDirty_ = false;
+}
+
 void AnimatedSprite2D::SetAnimation(Animation2D* animation, LoopMode2D loopMode)
 void AnimatedSprite2D::SetAnimation(Animation2D* animation, LoopMode2D loopMode)
 {
 {
     if (animation == animation_)
     if (animation == animation_)
@@ -350,6 +305,8 @@ void AnimatedSprite2D::SetAnimation(Animation2D* animation, LoopMode2D loopMode)
         {
         {
             // Create new timeline node
             // Create new timeline node
             timelineNode = rootNode_->CreateChild(timeline.name_, LOCAL);
             timelineNode = rootNode_->CreateChild(timeline.name_, LOCAL);
+            timelineNode->SetTemporary(true);
+
             // Create StaticSprite2D component
             // Create StaticSprite2D component
             if (timeline.type_ == OT_SPRITE)
             if (timeline.type_ == OT_SPRITE)
                 staticSprite = timelineNode->CreateComponent<StaticSprite2D>();
                 staticSprite = timelineNode->CreateComponent<StaticSprite2D>();

+ 11 - 41
Source/Engine/Urho2D/AnimatedSprite2D.h

@@ -23,7 +23,7 @@
 #pragma once
 #pragma once
 
 
 #include "Animation2D.h"
 #include "Animation2D.h"
-#include "Drawable.h"
+#include "StaticSprite2D.h"
 
 
 /// Loop mode.
 /// Loop mode.
 enum LoopMode2D
 enum LoopMode2D
@@ -42,7 +42,7 @@ namespace Urho3D
 class AnimationSet2D;
 class AnimationSet2D;
 
 
 /// Spriter animation component.
 /// Spriter animation component.
-class URHO3D_API AnimatedSprite2D : public Drawable
+class URHO3D_API AnimatedSprite2D : public StaticSprite2D
 {
 {
     OBJECT(AnimatedSprite2D);
     OBJECT(AnimatedSprite2D);
 
 
@@ -57,20 +57,6 @@ public:
     /// Handle enabled/disabled state change.
     /// Handle enabled/disabled state change.
     virtual void OnSetEnabled();
     virtual void OnSetEnabled();
 
 
-    /// Set layer.
-    void SetLayer(int layer);
-    /// Set order in layer.
-    void SetOrderInLayer(int orderInLayer);
-    /// Set blend mode.
-    void SetBlendMode(BlendMode mode);
-    /// Set flip.
-    void SetFlip(bool flipX, bool flipY);
-    /// Set flip X.
-    void SetFlipX(bool flipX);
-    /// Set flip Y.
-    void SetFlipY(bool flipY);
-    /// Set color.
-    void SetColor(const Color& color);
     /// Set speed.
     /// Set speed.
     void SetSpeed(float speed);
     void SetSpeed(float speed);
     /// Set animation by animation set, name and loop mode.
     /// Set animation by animation set, name and loop mode.
@@ -82,18 +68,6 @@ public:
     /// Set loop mode.
     /// Set loop mode.
     void SetLoopMode(LoopMode2D loopMode);
     void SetLoopMode(LoopMode2D loopMode);
 
 
-    /// Return layer.
-    int GetLayer() const { return layer_; }
-    /// Return order in layer.
-    int GetOrderInLayer() const { return orderInLayer_; }
-    /// Return blend mode.
-    BlendMode GetBlendMode() const { return blendMode_; }
-    /// Return flip X.
-    bool GetFlipX() const { return flipX_; }
-    /// Return flip Y.
-    bool GetFlipY() const { return flipY_; }
-    /// Return color.
-    const Color& GetColor() const { return color_; }
     /// Return speed.
     /// Return speed.
     float GetSpeed() const { return speed_; }
     float GetSpeed() const { return speed_; }
     /// Return animation name.
     /// Return animation name.
@@ -117,27 +91,23 @@ protected:
     virtual void OnNodeSet(Node* node);
     virtual void OnNodeSet(Node* node);
     /// Recalculate the world-space bounding box.
     /// Recalculate the world-space bounding box.
     virtual void OnWorldBoundingBoxUpdate();
     virtual void OnWorldBoundingBoxUpdate();
+    /// Handle layer changed.
+    virtual void OnLayerChanged();
+    /// Handle blend mode changed.
+    virtual void OnBlendModeChanged();
+    /// Handle update vertices.
+    virtual void UpdateVertices();
+    /// Handle flip changed.
+    virtual void OnFlipChanged();
     /// Set animation.
     /// Set animation.
     void SetAnimation(Animation2D* animation, LoopMode2D loopMode);
     void SetAnimation(Animation2D* animation, LoopMode2D loopMode);
     /// Update animation.
     /// Update animation.
     void UpdateAnimation(float timeStep);
     void UpdateAnimation(float timeStep);
-    /// Calculate timeline world world transform.
+    /// Calculate time line world world transform.
     void CalculateTimelineWorldTransform(unsigned index);
     void CalculateTimelineWorldTransform(unsigned index);
     /// Handle scene post update.
     /// Handle scene post update.
     void HandleScenePostUpdate(StringHash eventType, VariantMap& eventData);
     void HandleScenePostUpdate(StringHash eventType, VariantMap& eventData);
 
 
-    /// Layer.
-    int layer_;
-    /// Order in layer.
-    int orderInLayer_;
-    /// Blend mode.
-    BlendMode blendMode_;
-    /// Flip X.
-    bool flipX_;
-    /// Flip Y.
-    bool flipY_;
-    /// Color.
-    Color color_;
     /// Speed.
     /// Speed.
     float speed_;
     float speed_;
     /// Animation set.
     /// Animation set.

+ 15 - 0
Source/Engine/Urho2D/Drawable2D.cpp

@@ -66,6 +66,8 @@ void Drawable2D::SetLayer(int layer)
 
 
     layer_ = layer;
     layer_ = layer;
 
 
+    OnLayerChanged();
+
     MarkNetworkUpdate();
     MarkNetworkUpdate();
 }
 }
 
 
@@ -75,6 +77,8 @@ void Drawable2D::SetOrderInLayer(int orderInLayer)
         return;
         return;
 
 
     orderInLayer_ = orderInLayer;
     orderInLayer_ = orderInLayer;
+    
+    OnLayerChanged();
 
 
     MarkNetworkUpdate();
     MarkNetworkUpdate();
 }
 }
@@ -90,6 +94,7 @@ void Drawable2D::SetTexture(Texture2D* texture)
     material_ = 0;
     material_ = 0;
     
     
     OnMarkedDirty(node_);
     OnMarkedDirty(node_);
+
     MarkNetworkUpdate();
     MarkNetworkUpdate();
 }
 }
 
 
@@ -101,6 +106,8 @@ void Drawable2D::SetBlendMode(BlendMode blendMode)
     blendMode_ = blendMode;
     blendMode_ = blendMode;
     material_ = 0;
     material_ = 0;
 
 
+    OnBlendModeChanged();
+
     MarkNetworkUpdate();
     MarkNetworkUpdate();
 }
 }
 
 
@@ -160,4 +167,12 @@ void Drawable2D::OnMarkedDirty(Node* node)
     verticesDirty_ = true;
     verticesDirty_ = true;
 }
 }
 
 
+void Drawable2D::OnLayerChanged()
+{
+}
+
+void Drawable2D::OnBlendModeChanged()
+{
+}
+
 }
 }

+ 5 - 0
Source/Engine/Urho2D/Drawable2D.h

@@ -99,8 +99,13 @@ protected:
     virtual void OnNodeSet(Node* node);
     virtual void OnNodeSet(Node* node);
     /// Handle node transform being dirtied.
     /// Handle node transform being dirtied.
     virtual void OnMarkedDirty(Node* node);
     virtual void OnMarkedDirty(Node* node);
+    /// Handle layer changed.
+    virtual void OnLayerChanged();
+    /// Handle blend mode changed.
+    virtual void OnBlendModeChanged();
     /// Update vertices.
     /// Update vertices.
     virtual void UpdateVertices() = 0;
     virtual void UpdateVertices() = 0;
+    
 
 
     /// Layer.
     /// Layer.
     int layer_;
     int layer_;

+ 1 - 1
Source/Engine/Urho2D/Renderer2D.cpp

@@ -139,7 +139,7 @@ void Renderer2D::UpdateGeometry(const FrameInfo& frame)
         {
         {
             for (unsigned d = 0; d < drawables_.Size(); ++d)
             for (unsigned d = 0; d < drawables_.Size(); ++d)
             {
             {
-                if (!drawables_[d]->GetVisibility())
+                if (!drawables_[d]->GetVisibility() || drawables_[d]->GetVertices().Empty())
                     continue;
                     continue;
 
 
                 const Vector<Vertex2D>& vertices = drawables_[d]->GetVertices();
                 const Vector<Vertex2D>& vertices = drawables_[d]->GetVertices();

+ 8 - 0
Source/Engine/Urho2D/StaticSprite2D.cpp

@@ -81,6 +81,9 @@ void StaticSprite2D::SetFlip(bool flipX, bool flipY)
     flipX_ = flipX;
     flipX_ = flipX;
     flipY_ = flipY;
     flipY_ = flipY;
     verticesDirty_ = true;
     verticesDirty_ = true;
+
+    OnFlipChanged();
+
     MarkNetworkUpdate();
     MarkNetworkUpdate();
 }
 }
 
 
@@ -272,4 +275,9 @@ void StaticSprite2D::UpdateVertices()
     verticesDirty_ = false;
     verticesDirty_ = false;
 }
 }
 
 
+void StaticSprite2D::OnFlipChanged()
+{
+
+}
+
 }
 }

+ 2 - 0
Source/Engine/Urho2D/StaticSprite2D.h

@@ -80,6 +80,8 @@ protected:
     virtual void OnWorldBoundingBoxUpdate();
     virtual void OnWorldBoundingBoxUpdate();
     /// Update vertices.
     /// Update vertices.
     virtual void UpdateVertices();
     virtual void UpdateVertices();
+    /// Handle flip changed.
+    virtual void OnFlipChanged();
 
 
     /// Sprite.
     /// Sprite.
     SharedPtr<Sprite2D> sprite_;
     SharedPtr<Sprite2D> sprite_;