dmuratshin 9 years ago
parent
commit
de9fa66fc6
3 changed files with 33 additions and 1 deletions
  1. 30 0
      oxygine/src/Actor.cpp
  2. 2 0
      oxygine/src/Actor.h
  3. 1 1
      oxygine/src/PostProcess.cpp

+ 30 - 0
oxygine/src/Actor.cpp

@@ -1436,6 +1436,36 @@ namespace oxygine
     }
     }
 
 
 
 
+    void decompose(const Transform& t, Vector2& pos, float& angle, Vector2& scale)
+    {
+        scale.x = sqrtf(t.a * t.a + t.c * t.c);
+        scale.y = sqrtf(t.b * t.b + t.d * t.d);
+
+        angle = -atan2(t.c, t.a);
+        float an = angle / MATH_PI * 180;
+        pos.x = t.x;
+        pos.y = t.y;
+    }
+
+    void    reattachActor(spActor actor, spActor newParent, spActor root)
+    {
+        Transform t1 = actor->computeGlobalTransform(root.get());
+        Transform t2 = newParent->computeGlobalTransform(root.get());
+        t2.invert();
+        Transform r = t1 * t2;
+
+        Vector2 pos;
+        Vector2 scale;
+        float angle;
+
+        decompose(r, pos, angle, scale);
+        actor->attachTo(newParent);
+        actor->setPosition(pos);
+        actor->setRotation(angle);
+        actor->setScale(scale);
+    }
+
+
     RectF getActorTransformedDestRect(Actor* actor, const Transform& tr)
     RectF getActorTransformedDestRect(Actor* actor, const Transform& tr)
     {
     {
         RectF rect = actor->getDestRect();
         RectF rect = actor->getDestRect();

+ 2 - 0
oxygine/src/Actor.h

@@ -423,6 +423,8 @@ namespace oxygine
     RectF getActorTransformedDestRect(Actor* actor, const Transform& tr);
     RectF getActorTransformedDestRect(Actor* actor, const Transform& tr);
 
 
     void    changeParentAndSavePosition(spActor mutualParent, spActor actor, spActor newParent);
     void    changeParentAndSavePosition(spActor mutualParent, spActor actor, spActor newParent);
+    /**changes actor parent but with the same position on the screen*/
+    void    reattachActor(spActor actor, spActor newParent, spActor root = 0);
 
 
 
 
     /** A TweenDummy class
     /** A TweenDummy class

+ 1 - 1
oxygine/src/PostProcess.cpp

@@ -350,7 +350,7 @@ namespace oxygine
         _transform = actor->computeGlobalTransform().inverted();
         _transform = actor->computeGlobalTransform().inverted();
 
 
 
 
-
+        Material::setCurrent(0);
 
 
         IVideoDriver* driver = IVideoDriver::instance;
         IVideoDriver* driver = IVideoDriver::instance;