package org.newdawn.slick.state.transition;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.GameState;
import org.newdawn.slick.state.StateBasedGame;
/**
* A transition that will combine two states into one effect. The first state is
* the one we're transitioning from. The second state is specified in the constructor.
*
* By default one state will simply be rendered over the other. Subclass this transition
* overriding the preRenderFirstState and preRenderSecondState to setup the rendering
* for each state (alpha or what ever). Note that it's also possible to use the
* postRenderSecondState method to clean up your OpenGL setup.
*
* So these methods are called like so:
*
* preRenderFirstState()
* = the first state is rendered
* preRenderSecondState()
* = the second state is rendered
* postRenderSecondState()
*
* @author kevin
*/
public abstract class CrossStateTransition implements Transition {
/** The second state to cross with */
private GameState secondState;
/**
* Create a cross state transitions
*
* @param secondState The secondary state with combining with the
* source state.
*/
public CrossStateTransition(GameState secondState) {
this.secondState = secondState;
}
/**
* @see org.newdawn.slick.state.transition.Transition#isComplete()
*/
public abstract boolean isComplete();
/**
* @see org.newdawn.slick.state.transition.Transition#postRender(org.newdawn.slick.state.StateBasedGame, org.newdawn.slick.GameContainer, org.newdawn.slick.Graphics)
*/
public void postRender(StateBasedGame game, GameContainer container, Graphics g) throws SlickException {
preRenderSecondState(game, container, g);
secondState.render(container, game, g);
postRenderSecondState(game, container, g);
}
/**
* @see org.newdawn.slick.state.transition.Transition#preRender(org.newdawn.slick.state.StateBasedGame, org.newdawn.slick.GameContainer, org.newdawn.slick.Graphics)
*/
public void preRender(StateBasedGame game, GameContainer container, Graphics g) throws SlickException {
preRenderFirstState(game, container, g);
}
/**
* @see org.newdawn.slick.state.transition.Transition#update(org.newdawn.slick.state.StateBasedGame, org.newdawn.slick.GameContainer, int)
*/
public void update(StateBasedGame game, GameContainer container, int delta) throws SlickException {
}
/**
* Notification that the transition is about to render the first state is the cross
* transition.
*
* @param game The game being rendered
* @param container The container holding the game
* @param g The graphic context used to render
* @throws SlickException Indicates a failure to setup the rendering state - throw for anything that goes wrong
*/
public void preRenderFirstState(StateBasedGame game, GameContainer container, Graphics g) throws SlickException {
}
/**
* Notification that the transition is about to render the second state is the cross
* transition.
*
* @param game The game being rendered
* @param container The container holding the game
* @param g The graphic context used to render
* @throws SlickException Indicates a failure to setup the rendering state - throw for anything that goes wrong
*/
public void preRenderSecondState(StateBasedGame game, GameContainer container, Graphics g) throws SlickException {
}
/**
* Notification that the transition is has just rendered the second state is the cross
* transition.
*
* @param game The game being rendered
* @param container The container holding the game
* @param g The graphic context used to render
* @throws SlickException Indicates a failure to setup the rendering state - throw for anything that goes wrong
*/
public void postRenderSecondState(StateBasedGame game, GameContainer container, Graphics g) throws SlickException {
}
}