dmuratshin 9 years ago
parent
commit
fe36fcfd6c
3 changed files with 23 additions and 2 deletions
  1. 1 0
      oxygine/src/Actor.cpp
  2. 20 2
      oxygine/src/Sprite.cpp
  3. 2 0
      oxygine/src/Sprite.h

+ 1 - 0
oxygine/src/Actor.cpp

@@ -59,6 +59,7 @@ namespace oxygine
         _alpha = src._alpha;
         _alpha = src._alpha;
 
 
         _pressedOvered = 0;
         _pressedOvered = 0;
+        _material = 0;
 
 
         _transform = src._transform;
         _transform = src._transform;
         _transformInvert = src._transformInvert;
         _transformInvert = src._transformInvert;

+ 20 - 2
oxygine/src/Sprite.cpp

@@ -167,6 +167,12 @@ namespace oxygine
         setAnimFrame(rs, column, row);
         setAnimFrame(rs, column, row);
     }
     }
 
 
+    void Sprite::setLocalScale(const Vector2 &s)
+    {
+        _localScale = s;
+        _setSize(_frame.getSize().mult(_localScale));
+    }
+
     void Sprite::setResAnim(const ResAnim* resanim, int col, int row)
     void Sprite::setResAnim(const ResAnim* resanim, int col, int row)
     {
     {
         setAnimFrame(resanim, col, row);
         setAnimFrame(resanim, col, row);
@@ -228,12 +234,24 @@ namespace oxygine
     {
     {
         Actor::sizeChanged(size);
         Actor::sizeChanged(size);
         const Vector2& sz = _frame.getSize();
         const Vector2& sz = _frame.getSize();
-        _localScale.x = size.x / sz.x;
-        _localScale.y = size.y / sz.y;
+        if (sz.x != 0)
+            _localScale.x = size.x / sz.x;
+        else
+            _localScale.x = 1.0f;
+
+        if (sz.y != 0)
+            _localScale.y = size.y / sz.y;
+        else
+            _localScale.y = 1.0f;
     }
     }
 
 
     RectF Sprite::getDestRect() const
     RectF Sprite::getDestRect() const
     {
     {
+        if (!_frame.getDiffuse().base)
+        {
+            return Actor::getDestRect();
+        }
+
         RectF r = _frame.getDestRect();
         RectF r = _frame.getDestRect();
         r.pos = r.pos.mult(_localScale);
         r.pos = r.pos.mult(_localScale);
         r.size = r.size.mult(_localScale);
         r.size = r.size.mult(_localScale);

+ 2 - 0
oxygine/src/Sprite.h

@@ -28,6 +28,7 @@ namespace oxygine
         const ResAnim*          getResAnim() const {return _frame.getResAnim();}
         const ResAnim*          getResAnim() const {return _frame.getResAnim();}
         int                     getColumn() const {return _frame.getColumn();}
         int                     getColumn() const {return _frame.getColumn();}
         int                     getRow() const {return _frame.getRow();}
         int                     getRow() const {return _frame.getRow();}
+        const Vector2&          getLocalScale() const { return _localScale; }
 
 
         /**load/unload atlas automatically or not*/
         /**load/unload atlas automatically or not*/
         void                    setManageResAnim(bool manage);
         void                    setManageResAnim(bool manage);
@@ -39,6 +40,7 @@ namespace oxygine
         void                    setRow(int row);
         void                    setRow(int row);
         void                    setColumn(int column);
         void                    setColumn(int column);
         void                    setColumnRow(int column, int row);
         void                    setColumnRow(int column, int row);
+        void                    setLocalScale(const Vector2 &s);
 
 
         bool                    isOn(const Vector2& localPosition);
         bool                    isOn(const Vector2& localPosition);