Browse Source

Implemented StaticSprite2D flipping diagonally (not tested)

pmatsula 8 years ago
parent
commit
7852abd881

+ 13 - 6
Source/Urho3D/Urho2D/StaticSprite2D.cpp

@@ -44,6 +44,7 @@ StaticSprite2D::StaticSprite2D(Context* context) :
     blendMode_(BLEND_ALPHA),
     blendMode_(BLEND_ALPHA),
     flipX_(false),
     flipX_(false),
     flipY_(false),
     flipY_(false),
+    swapXY_(false),
     color_(Color::WHITE),
     color_(Color::WHITE),
     useHotSpot_(false),
     useHotSpot_(false),
     useDrawRect_(false),
     useDrawRect_(false),
@@ -125,13 +126,14 @@ void StaticSprite2D::SetBlendMode(BlendMode blendMode)
     MarkNetworkUpdate();
     MarkNetworkUpdate();
 }
 }
 
 
-void StaticSprite2D::SetFlip(bool flipX, bool flipY)
+void StaticSprite2D::SetFlip(bool flipX, bool flipY, bool swapXY)
 {
 {
-    if (flipX == flipX_ && flipY == flipY_)
+    if (flipX == flipX_ && flipY == flipY_ && swapXY == swapXY_)
         return;
         return;
 
 
     flipX_ = flipX;
     flipX_ = flipX;
     flipY_ = flipY;
     flipY_ = flipY;
+    swapXY_ = swapXY;
     sourceBatchesDirty_ = true;
     sourceBatchesDirty_ = true;
 
 
     MarkNetworkUpdate();
     MarkNetworkUpdate();
@@ -139,12 +141,17 @@ void StaticSprite2D::SetFlip(bool flipX, bool flipY)
 
 
 void StaticSprite2D::SetFlipX(bool flipX)
 void StaticSprite2D::SetFlipX(bool flipX)
 {
 {
-    SetFlip(flipX, flipY_);
+    SetFlip(flipX, flipY_, swapXY_);
 }
 }
 
 
 void StaticSprite2D::SetFlipY(bool flipY)
 void StaticSprite2D::SetFlipY(bool flipY)
 {
 {
-    SetFlip(flipX_, flipY);
+    SetFlip(flipX_, flipY, swapXY_);
+}
+
+void StaticSprite2D::SetSwapXY(bool swapXY)
+{
+    SetFlip(flipX_, flipY_, swapXY);
 }
 }
 
 
 void StaticSprite2D::SetColor(const Color& color)
 void StaticSprite2D::SetColor(const Color& color)
@@ -323,9 +330,9 @@ void StaticSprite2D::UpdateSourceBatches()
     vertex2.position_ = worldTransform * Vector3(drawRect_.max_.x_, drawRect_.max_.y_, 0.0f);
     vertex2.position_ = worldTransform * Vector3(drawRect_.max_.x_, drawRect_.max_.y_, 0.0f);
     vertex3.position_ = worldTransform * Vector3(drawRect_.max_.x_, drawRect_.min_.y_, 0.0f);
     vertex3.position_ = worldTransform * Vector3(drawRect_.max_.x_, drawRect_.min_.y_, 0.0f);
 
 
-    vertex0.uv_ = textureRect_.min_;
+    vertex0.uv_ = swapXY_ ? textureRect_.max_ : textureRect_.min_;
     vertex1.uv_ = Vector2(textureRect_.min_.x_, textureRect_.max_.y_);
     vertex1.uv_ = Vector2(textureRect_.min_.x_, textureRect_.max_.y_);
-    vertex2.uv_ = textureRect_.max_;
+    vertex2.uv_ = swapXY_ ? textureRect_.min_ : textureRect_.max_;
     vertex3.uv_ = Vector2(textureRect_.max_.x_, textureRect_.min_.y_);
     vertex3.uv_ = Vector2(textureRect_.max_.x_, textureRect_.min_.y_);
 
 
     vertex0.color_ = vertex1.color_ = vertex2.color_ = vertex3.color_ = color_.ToUInt();
     vertex0.color_ = vertex1.color_ = vertex2.color_ = vertex3.color_ = color_.ToUInt();

+ 8 - 1
Source/Urho3D/Urho2D/StaticSprite2D.h

@@ -51,11 +51,13 @@ public:
     /// Set blend mode.
     /// Set blend mode.
     void SetBlendMode(BlendMode blendMode);
     void SetBlendMode(BlendMode blendMode);
     /// Set flip.
     /// Set flip.
-    void SetFlip(bool flipX, bool flipY);
+    void SetFlip(bool flipX, bool flipY, bool swapXY = false);
     /// Set flip X.
     /// Set flip X.
     void SetFlipX(bool flipX);
     void SetFlipX(bool flipX);
     /// Set flip Y.
     /// Set flip Y.
     void SetFlipY(bool flipY);
     void SetFlipY(bool flipY);
+    /// Set swap X and Y.
+    void SetSwapXY(bool swapXY);
     /// Set color.
     /// Set color.
     void SetColor(const Color& color);
     void SetColor(const Color& color);
     /// Set alpha.
     /// Set alpha.
@@ -89,6 +91,9 @@ public:
     /// Return flip Y.
     /// Return flip Y.
     bool GetFlipY() const { return flipY_; }
     bool GetFlipY() const { return flipY_; }
 
 
+    /// Return swap X and Y.
+    bool GetSwapXY() const { return swapXY_; }
+
     /// Return color.
     /// Return color.
     const Color& GetColor() const { return color_; }
     const Color& GetColor() const { return color_; }
 
 
@@ -143,6 +148,8 @@ protected:
     bool flipX_;
     bool flipX_;
     /// Flip Y.
     /// Flip Y.
     bool flipY_;
     bool flipY_;
+    /// Swap X and Y.
+    bool swapXY_;
     /// Color.
     /// Color.
     Color color_;
     Color color_;
     /// Use hot spot flag.
     /// Use hot spot flag.

+ 4 - 4
Source/Urho3D/Urho2D/TileMapDefs2D.h

@@ -141,8 +141,8 @@ public:
     bool GetFlipX() const { return gid_ & FLIP_HORIZONTAL; }
     bool GetFlipX() const { return gid_ & FLIP_HORIZONTAL; }
     /// Return flip Y.
     /// Return flip Y.
     bool GetFlipY() const { return gid_ & FLIP_VERTICAL; }
     bool GetFlipY() const { return gid_ & FLIP_VERTICAL; }
-    /// Return flip XY.
-    bool GetFlipXY() const { return gid_ & FLIP_DIAGONAL; }
+    /// Return swap X and Y.
+    bool GetSwapXY() const { return gid_ & FLIP_DIAGONAL; }
 
 
     /// Return sprite.
     /// Return sprite.
     Sprite2D* GetSprite() const;
     Sprite2D* GetSprite() const;
@@ -194,8 +194,8 @@ public:
     bool GetTileFlipX() const { return gid_ & FLIP_HORIZONTAL; }
     bool GetTileFlipX() const { return gid_ & FLIP_HORIZONTAL; }
     /// Return tile flip Y.
     /// Return tile flip Y.
     bool GetTileFlipY() const { return gid_ & FLIP_VERTICAL; }
     bool GetTileFlipY() const { return gid_ & FLIP_VERTICAL; }
-    /// Return tile flip XY.
-    bool GetTileFlipXY() const { return gid_ & FLIP_DIAGONAL; }
+    /// Return tile swap X and Y.
+    bool GetTileSwapXY() const { return gid_ & FLIP_DIAGONAL; }
 
 
     /// Return tile sprite.
     /// Return tile sprite.
     Sprite2D* GetTileSprite() const;
     Sprite2D* GetTileSprite() const;

+ 2 - 2
Source/Urho3D/Urho2D/TileMapLayer2D.cpp

@@ -360,7 +360,7 @@ void TileMapLayer2D::SetTileLayer(const TmxTileLayer2D* tileLayer)
 
 
             auto* staticSprite = tileNode->CreateComponent<StaticSprite2D>();
             auto* staticSprite = tileNode->CreateComponent<StaticSprite2D>();
             staticSprite->SetSprite(tile->GetSprite());
             staticSprite->SetSprite(tile->GetSprite());
-            staticSprite->SetFlip(tile->GetFlipX(), tile->GetFlipY());
+            staticSprite->SetFlip(tile->GetFlipX(), tile->GetFlipY(), tile->GetSwapXY());
             staticSprite->SetLayer(drawOrder_);
             staticSprite->SetLayer(drawOrder_);
             staticSprite->SetOrderInLayer(y * width + x);
             staticSprite->SetOrderInLayer(y * width + x);
 
 
@@ -389,7 +389,7 @@ void TileMapLayer2D::SetObjectGroup(const TmxObjectGroup2D* objectGroup)
         {
         {
             auto* staticSprite = objectNode->CreateComponent<StaticSprite2D>();
             auto* staticSprite = objectNode->CreateComponent<StaticSprite2D>();
             staticSprite->SetSprite(object->GetTileSprite());
             staticSprite->SetSprite(object->GetTileSprite());
-            staticSprite->SetFlip(object->GetTileFlipX(), object->GetTileFlipY());
+            staticSprite->SetFlip(object->GetTileFlipX(), object->GetTileFlipY(), object->GetTileSwapXY());
             staticSprite->SetLayer(drawOrder_);
             staticSprite->SetLayer(drawOrder_);
             staticSprite->SetOrderInLayer((int)((10.0f - object->GetPosition().y_) * 100));
             staticSprite->SetOrderInLayer((int)((10.0f - object->GetPosition().y_) * 100));