package org.newdawn.slick.state.transition;
import org.newdawn.slick.Color;
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 causes the previous state to rotate and scale down into
* the new state.
*
* This is an enter transition
*
* @author kevin
*/
public class RotateTransition implements Transition {
/** The previous state */
private GameState prev;
/** The current angle of rotation */
private float ang;
/** True if the state has finished */
private boolean finish;
/** The current scale */
private float scale = 1;
/** The background applied under the previous state if any */
private Color background;
/**
* Create a new transition
*/
public RotateTransition() {
}
/**
* Create a new transition
*
* @param background The background colour to draw under the previous state
*/
public RotateTransition(Color background) {
this.background = background;
}
/**
* @see org.newdawn.slick.state.transition.Transition#init(org.newdawn.slick.state.GameState, org.newdawn.slick.state.GameState)
*/
public void init(GameState firstState, GameState secondState) {
prev = secondState;
}
/**
* @see org.newdawn.slick.state.transition.Transition#isComplete()
*/
public boolean isComplete() {
return finish;
}
/**
* @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 {
g.translate(container.getWidth()/2, container.getHeight()/2);
g.scale(scale,scale);
g.rotate(0, 0, ang);
g.translate(-container.getWidth()/2, -container.getHeight()/2);
if (background != null) {
Color c = g.getColor();
g.setColor(background);
g.fillRect(0,0,container.getWidth(),container.getHeight());
g.setColor(c);
}
prev.render(container, game, g);
g.translate(container.getWidth()/2, container.getHeight()/2);
g.rotate(0, 0, -ang);
g.scale(1/scale,1/scale);
g.translate(-container.getWidth()/2, -container.getHeight()/2);
}
/**
* @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 {
}
/**
* @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 {
ang += delta * 0.5f;
if (ang > 500) {
finish = true;
}
scale -= delta * 0.001f;
if (scale < 0) {
scale = 0;
}
}
}