package com.shade.states.util; import org.newdawn.slick.Color; import org.newdawn.slick.GameContainer; import org.newdawn.slick.Graphics; import org.newdawn.slick.state.StateBasedGame; import com.shade.base.Animatable; public class Dimmer implements Animatable { private static final float ALPHA_INC = .05f; private Color color; private float targetAlpha; private int timer; private boolean reversed; private boolean running; public Dimmer(float target) { color = new Color(Color.black); color.a = 0; targetAlpha = target; } public void render(StateBasedGame game, Graphics g) { g.setColor(color); GameContainer c = game.getContainer(); g.fillRect(0, 0, c.getWidth(), c.getHeight()); g.setColor(Color.white); } public void update(StateBasedGame game, int delta) { if (!running) { return; } timer += delta; if (!reversed && color.a < targetAlpha && timer > 100) { color.a += ALPHA_INC; timer = 0; } if (reversed && color.a >= 0 && timer > 100) { color.a -= ALPHA_INC; timer = 0; } clamp(); } private void clamp() { if (!reversed && color.a > targetAlpha) { color.a = targetAlpha; } if (reversed && color.a < 0) { color. a = 0; } } public boolean finished() { return color.a == targetAlpha; } public void reverse() { reversed = true; } public void reset() { timer = 0; color.a = 0; reversed = false; } public void rewind() { reversed = !reversed; } public boolean reversed() { return reversed; } public void fastforward() { timer = 0; color.a = targetAlpha; reversed = true; } public void run() { running = true; } public void stop() { running = false; } public boolean isRunning() { return running; } }