Kaynağa Gözat

tween to script. not completed

dmuratshin 9 yıl önce
ebeveyn
işleme
25d257dac2

+ 15 - 13
oxygine/src/Actor.cpp

@@ -242,7 +242,7 @@ namespace oxygine
             stream << " rot=" << getRotation() / MATH_PI * 360.0f << "";
 
         int tweensCount = 0;
-        spTween t = _tweens._first;
+        spScript t = _tweens._first;
         while (t)
         {
             t = t->getNextSibling();
@@ -977,10 +977,10 @@ namespace oxygine
 
     void Actor::internalUpdate(const UpdateState& us)
     {
-        spTween tween = _tweens._first;
+        spScript tween = _tweens._first;
         while (tween)
         {
-            spTween tweenNext = tween->getNextSibling();
+            spScript tweenNext = tween->getNextSibling();
 
             if (tween->getParentList())
                 tween->update(*this, us);
@@ -1164,7 +1164,7 @@ namespace oxygine
             return 0;
 
         tween->start(*this);
-        _tweens.append(tween);
+        _tweens.append(spScript(tween.get()));
 
         return tween;
     }
@@ -1182,11 +1182,11 @@ namespace oxygine
 
     spTween Actor::getTween(const std::string& name, error_policy ep)
     {
-        spTween tween = _tweens._first;
+        spScript tween = _tweens._first;
         while (tween)
         {
             if (tween->isName(name))
-                return tween;
+                return safeSpCast<Tween>(tween);
             tween = tween->getNextSibling();
         }
 
@@ -1203,36 +1203,38 @@ namespace oxygine
         if (v->getParentList() == &_tweens)
         {
             v->setClient(0);
-            _tweens.remove(v);
+            _tweens.remove(spScript(v.get()));
         }
     }
 
     void Actor::removeTweens(bool callComplete)
     {
-        spTween t = _tweens._first;
+        spScript t = _tweens._first;
         while (t)
         {
-            spTween c = t;
+            spScript c = t;
             t = t->getNextSibling();
 
             if (callComplete)
                 c->complete();
             else
-                removeTween(c);
+            {
+                _tweens.remove(c);
+            }
         }
     }
 
     void Actor::removeTweensByName(const std::string& name)
     {
-        spTween t = _tweens._first;
+        spScript t = _tweens._first;
         while (t)
         {
-            spTween c = t;
+            spScript c = t;
             t = t->getNextSibling();
 
             if (c->isName(name))
             {
-                removeTween(c);
+                _tweens.remove(c);
             }
         }
     }

+ 3 - 3
oxygine/src/Actor.h

@@ -112,9 +112,9 @@ namespace oxygine
         /**search tween by name*/
         spTween             getTween(const std::string& name, error_policy ep = ep_show_error);
         /**returns first tween in actor*/
-        spTween             getFirstTween() const {return _tweens._first;}
+        spTween             getFirstTween() const {return safeSpCast<Tween>(_tweens._first);}
         /**returns last tween in actor*/
-        spTween             getLastTween() const {return _tweens._last;}
+        spTween             getLastTween() const { return safeSpCast<Tween>(_tweens._last); }
 
         const Vector2&      getAnchor() const {return _anchor;}
         float               getAnchorX() const {return _anchor.x;}
@@ -395,7 +395,7 @@ namespace oxygine
         spClock _clock;
         Actor* _parent;
 
-        typedef intrusive_list<spTween> tweens;
+        typedef intrusive_list<spScript> tweens;
         tweens _tweens;
 
         children _children;

+ 21 - 4
oxygine/src/Tween.h

@@ -40,9 +40,28 @@ namespace oxygine
 
     DECLARE_SMART(Tween, spTween);
 
-    class Tween : public EventDispatcher, public intrusive_list_item<spTween>
+    DECLARE_SMART(Script, spScript);
+
+    class Script : public EventDispatcher, public intrusive_list_item<spScript>
+    {
+
+        typedef intrusive_list_item<spScript> intr_list;
+    public:
+
+        spScript&    getNextSibling() { return intr_list::getNextSibling(); }
+        spScript&    getPrevSibling() { return intr_list::getPrevSibling(); }
+
+
+        virtual void update(Actor& actor, const UpdateState& us) = 0;
+        virtual bool        isDone() const = 0;
+        virtual void complete(timeMS deltaTime = TWEEN_COMPLETE_DT) = 0;
+        virtual void start(Actor&) = 0;
+        virtual void reset() = 0;
+
+    };
+
+    class Tween : public Script
     {
-        typedef intrusive_list_item<spTween> intr_list;
     public:
         enum EASE
         {
@@ -114,8 +133,6 @@ namespace oxygine
         Actor*      getClient() const { return _client; }
         float       getPercent() const { return _percent; }
         spObject    getDataObject() const { return _data; }
-        spTween&    getNextSibling() { return intr_list::getNextSibling(); }
-        spTween&    getPrevSibling() { return intr_list::getPrevSibling(); }
 
         bool        isStarted() const { return _status != status_not_started; }
         bool        isDone() const { return _status == status_remove; }

+ 3 - 3
oxygine/src/TweenQueue.cpp

@@ -60,7 +60,7 @@ namespace oxygine
             return 0;
 
 
-        _tweens.append(t);
+        _tweens.append(spScript(t.get()));
         return t;
     }
 
@@ -95,7 +95,7 @@ namespace oxygine
 
         if (_current)
         {
-            spTween next = _current->getNextSibling();
+            spScript next = _current->getNextSibling();
             _current->update(actor, us);
             if (_current->isDone())
             {
@@ -118,7 +118,7 @@ namespace oxygine
             }
             else
             {
-                spTween next = _tweens._first;
+                spScript next = _tweens._first;
                 while (next)
                 {
                     next->reset();

+ 2 - 2
oxygine/src/TweenQueue.h

@@ -46,9 +46,9 @@ namespace oxygine
         void _start(Actor& actor);
         void _update(Actor& actor, const UpdateState& us);
 
-        typedef intrusive_list<spTween> tweens;
+        typedef intrusive_list<spScript> tweens;
         tweens _tweens;
-        spTween _current;
+        spScript _current;
         int _loopsDone;
     };