/* * ----------------------------------------------------------------------- * Copyright 2012 - Alistair Rutherford - www.netthreads.co.uk * ----------------------------------------------------------------------- * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package com.netthreads.libgdx.scene.transition; import aurelienribon.tweenengine.BaseTween; import aurelienribon.tweenengine.TweenCallback; import aurelienribon.tweenengine.TweenEquation; import com.badlogic.gdx.scenes.scene2d.Group; import com.netthreads.libgdx.director.AppInjector; import com.netthreads.libgdx.director.Director; import com.netthreads.libgdx.scene.Scene; /** * Base transition class. * * This class forms basis of scene transition. Draws the incoming and outgoing * scenes. Ensures scene contents positions are noted on entry and reset on * exit. Implements transition "complete" handler to set incoming scene as main * scene. * */ public class TransitionScene extends Scene implements TweenCallback { private boolean complete; private float inX; private float inY; private float outX; private float outY; private Scene inScene; private Scene outScene; private Group inSceneRoot; private Group outSceneRoot; private int durationMillis; private TweenEquation easeEquation; /** * The one and only director. */ private static Director director = AppInjector.getInjector().getInstance(Director.class);; /** * Enter handler makes a note of scene contents position. * */ @Override public void enter() { complete = false; // Make note of starting positions. We are going to have to reset these // back when we finish. inX = inSceneRoot.getX(); inY = inSceneRoot.getY(); outX = outSceneRoot.getX(); outY = outSceneRoot.getY(); } /** * Exit handler resets scene contents positions. * */ @Override public void exit() { complete = true; inSceneRoot.setX(inX); inSceneRoot.setY(inY); outSceneRoot.setX(outX); outSceneRoot.setY(outY); } /** * Draw both scenes as we animated contents. * */ @Override public void draw() { // Draw if (!complete) { outScene.draw(); } inScene.draw(); } /** * Keep the incoming and outgoing scene action pipelines running. * */ @Override public void act(float delta) { super.act(delta); // Move inSceneRoot.act(delta); outSceneRoot.act(delta); } /** * Default transition handlers sets inScen to centre-stage when transition * complete. */ @Override public void onEvent(int eventType, BaseTween<?> source) { switch (eventType) { case COMPLETE: director.setScene(inScene); break; default: break; } } /** * Transition complete. * * @return The transition complete handler. */ public boolean isComplete() { return complete; } public float getInX() { return inX; } public void setInX(float inX) { this.inX = inX; } public float getInY() { return inY; } public void setInY(float inY) { this.inY = inY; } public float getOutX() { return outX; } public void setOutX(float outX) { this.outX = outX; } public float getOutY() { return outY; } public void setOutY(float outY) { this.outY = outY; } public Scene getInScene() { return inScene; } public void setInScene(Scene inScene) { this.inScene = inScene; } public Scene getOutScene() { return outScene; } public void setOutScene(Scene outScene) { this.outScene = outScene; } public Group getInSceneRoot() { return inSceneRoot; } public void setInSceneRoot(Group inSceneRoot) { this.inSceneRoot = inSceneRoot; } public Group getOutSceneRoot() { return outSceneRoot; } public void setOutSceneRoot(Group outSceneRoot) { this.outSceneRoot = outSceneRoot; } public void setComplete(boolean complete) { this.complete = complete; } public int getDurationMillis() { return durationMillis; } public void setDurationMillis(int durationMillis) { this.durationMillis = durationMillis; } public TweenEquation getEaseEquation() { return easeEquation; } public void setEaseEquation(TweenEquation easeEquation) { this.easeEquation = easeEquation; } }