package vooga.scroller.level_editor;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import vooga.scroller.level_editor.level_state.DefaultState;
import vooga.scroller.level_editor.level_state.LevelState;
import vooga.scroller.level_editor.level_state.PausedState;
import vooga.scroller.level_management.SpriteManager;
import vooga.scroller.view.GameView;
/**
* Represents the manager for all the states in the level. This consists of active state
* and non active states. All states are referenced using an int stateID
*
* @author Scott Valentine
*
*/
public class LevelStateManager {
// What to do about these. Leve them for reference for other parts of the game
// the reason i used ID numbers to refer to states is to prevent other things from
// having access to the states themselves.
public static final int PAUSED_ID = 1;
public static final int DEFAULT_ID = 0;
private Map<Integer,LevelState> myLevelStates;
private Collection<LevelState> myCurrentStates;
private int myCurrentID;
public LevelStateManager(SpriteManager spriteManager) {
initLevelStates(spriteManager);
myCurrentID = DEFAULT_ID;
myCurrentStates = new ArrayList<LevelState>();
myCurrentStates.add(myLevelStates.get(myCurrentID));
}
private void initLevelStates (SpriteManager spriteManager) {
myLevelStates = new HashMap<Integer, LevelState>();
PausedState paused = new PausedState(spriteManager);
DefaultState normal = new DefaultState(spriteManager);
myLevelStates.put(PAUSED_ID, paused);
myLevelStates.put(DEFAULT_ID, normal);
}
public void removeState(int stateID) {
myCurrentStates.remove(myLevelStates.get(stateID));
}
public void addState(int stateID){
myCurrentStates.add(myLevelStates.get(stateID));
}
public void update (double elapsedTime, Dimension bounds, GameView gameView) {
for(LevelState state: myCurrentStates){
state.update(elapsedTime, bounds, gameView);
}
}
public void paint(Graphics2D pen){
for(LevelState state: myCurrentStates){
state.paint(pen);
}
}
/**
* Whether or not the specified state (from the stateID) is currently active.
* @param stateID
* @return
*/
public boolean isActive(int stateID) {
return myCurrentStates.contains(myLevelStates.get(stateID));
}
}