dmuratshin 9 years ago
parent
commit
addd946b0c
5 changed files with 35 additions and 7 deletions
  1. 1 0
      src/flow/Scene.cpp
  2. 1 1
      src/flow/Scene.h
  3. 18 4
      src/flow/Transition.cpp
  4. 13 1
      src/flow/Transition.h
  5. 2 1
      src/flow/flow.cpp

+ 1 - 0
src/flow/Scene.cpp

@@ -104,6 +104,7 @@ namespace oxygine
         spTransition Scene::runTransition(Flow* f, spScene current, bool back)
         {
             _transitionDone = false;
+			current->_transitionDone = false;
             return back ? _runTransitionOut(f, current) : _runTransitionIn(f, current);
         }
 

+ 1 - 1
src/flow/Scene.h

@@ -125,6 +125,7 @@ namespace oxygine
             virtual spTransition _runTransitionOut(Flow*, spScene current);
 
             spActor _holder;
+			bool _transitionDone;
 
         private:
 
@@ -134,7 +135,6 @@ namespace oxygine
             bool _remove;
             bool _done;
             bool _inloop;
-            bool _transitionDone;
 
             void preShowing();
             void postShowing();

+ 18 - 4
src/flow/Transition.cpp

@@ -15,6 +15,13 @@ namespace oxygine
     namespace flow
     {
 
+		void Transition::assign(Scene* scene)
+		{
+			spTransition t = new Transition;
+			scene->setTransitionIn(t);
+			scene->setTransitionOut(t);
+		}
+
         Transition::Transition() : _done(false), _singleDirection(false), _flow(0)
         {
 
@@ -59,10 +66,17 @@ namespace oxygine
             }
         }
 
-        void Transition::_run(spScene current, spScene next, bool back)
-        {
-            _done = true;
-        }
+		void TransitionSimple::assign(Scene* scene)
+		{
+			spTransition t = new TransitionSimple;
+			scene->setTransitionIn(t);
+			scene->setTransitionOut(t);
+		}
+
+		void TransitionSimple::_run(spScene current, spScene next, bool back)
+		{
+			_done = true;
+		}
 
         void TransitionMove::assign(Scene* scene)
         {

+ 13 - 1
src/flow/Transition.h

@@ -17,12 +17,15 @@ namespace oxygine
         class Transition : public Object
         {
         public:
+
+			static void assign(Scene* scene);
+
             Transition();
 
             void run(Flow* f, spScene current, spScene next, bool back);
 
             virtual void _attach(spScene current, spScene next, bool back);
-            virtual void _run(spScene current, spScene next, bool back);
+			virtual void _run(spScene current, spScene next, bool back) {}
             virtual void _clear() {}
 
             void waitTween(spTween);
@@ -34,6 +37,15 @@ namespace oxygine
             bool _singleDirection;
         };
 
+		class TransitionSimple : public Transition
+		{
+		public:
+			static void assign(Scene* scene);
+
+		protected:
+			void _run(spScene current, spScene next, bool back) override;
+		};
+
         class TransitionMove : public Transition
         {
         public:

+ 2 - 1
src/flow/flow.cpp

@@ -257,7 +257,8 @@ namespace oxygine
 
             if (_transition)
             {
-                if (_current->_transitionDone || (_trans && _trans->_done))
+				//we don't know who controls transition, next, current, or Transition
+                if (_trans && _trans->_done || _next->_transitionDone || _current->_transitionDone)
                     phaseEnd();
 
                 return;