package vooga.fighter.controller.displayinformation; import java.util.List; import java.util.ArrayList; import vooga.fighter.controller.gameinformation.PlayerStatus; import vooga.fighter.controller.interfaces.ViewDataSource; import vooga.fighter.model.mode.LevelMode; import vooga.fighter.model.mode.Mode; import vooga.fighter.model.utils.Health; import vooga.fighter.util.HUDVariable; /** * Contains all information required by the view about game objects in a game loop. * List indices line up between lists (i.e. index 0 of all lists is player 1 information, * index 1 is player 2 info) * @author Matt Parides * @author Jerry Li * @author Jack Matteucci * @author Wayne You * */ public class GameLoopInfo extends DisplayLoopInfo implements ViewDataSource{ private List<String> myCharacterNames; private List<Health> myHealthStats; private List<Double> myScores; private List<PlayerStatus> myPlayerStats; private int myNumberPlayers; private LevelMode myLevelMode; @HUDVariable( name = "Player1", HUDElementClass = "PlayerScoreAndHealth" ) private PlayerStatus Player1Status; @HUDVariable( name = "Player2", HUDElementClass = "PlayerScoreAndHealth" ) private PlayerStatus Player2Status; @HUDVariable( name = "Player3", HUDElementClass = "PlayerScoreAndHealth" ) private PlayerStatus Player3Status; @HUDVariable( name = "Player4", HUDElementClass = "PlayerScoreAndHealth" ) private PlayerStatus Player4Status; /** * Constructs gameloopinfo with levelmode * @param mode */ public GameLoopInfo(LevelMode mode) { super(mode); myLevelMode = mode; myPlayerStats = new ArrayList<PlayerStatus>(); myHealthStats = new ArrayList<Health>(); myScores = new ArrayList<Double>(); myCharacterNames = new ArrayList<String>(); myNumberPlayers = mode.getCharacterObjects().size(); initializePlayers(); } /** * Returns mode */ @Override public Mode getMode() { return myLevelMode; } /** * Initialize player statuses to be displayed. * Because of how display is painted in view, method is a little messy. * Had to work with what we have. */ public void initializePlayers() { if (myNumberPlayers == 1) { Player1Status = new PlayerStatus(); myPlayerStats.add(Player1Status); } else if (myNumberPlayers == 2) { Player1Status = new PlayerStatus(); Player2Status = new PlayerStatus(); myPlayerStats.add(Player1Status); myPlayerStats.add(Player2Status); } else if (myNumberPlayers == 3) { Player1Status = new PlayerStatus(); Player2Status = new PlayerStatus(); Player3Status = new PlayerStatus(); myPlayerStats.add(Player1Status); myPlayerStats.add(Player2Status); myPlayerStats.add(Player3Status); } else if (myNumberPlayers == 4) { Player1Status = new PlayerStatus(); Player2Status = new PlayerStatus(); Player3Status = new PlayerStatus(); Player4Status = new PlayerStatus(); myPlayerStats.add(Player1Status); myPlayerStats.add(Player2Status); myPlayerStats.add(Player3Status); myPlayerStats.add(Player4Status); } addHUDElements(); } /** * Update stats and displays */ @Override public void update() { super.update(); updateStats(); setChanged(); notifyObservers(); } /** * update the stats by getting information from * mode */ public void updateStats() { LevelMode currentMode = (LevelMode) getMode(); myHealthStats = currentMode.getHealthStats(); for (int i = 0; i < myNumberPlayers; i++) { myPlayerStats.get(i).setHealth(myHealthStats.get(i)); } } /** * @return Health at list index */ public Health getHealth(int index) { return myHealthStats.get(index); } /** * Return double score at index * @param index index * @return */ public Double getScore(int index) { return myScores.get(index); } /** * Returns list of health * @return the myHealthStats */ public List<Health> getHealthStats() { return myHealthStats; } /** * Sets list of health * @param myHealthStats the myHealthStats to set */ public void setHealthStats(List<Health> healthStats) { myHealthStats = healthStats; } /** * Sets health at index * @param index index * @param heal health */ public void setHealthStat(int index, Health heal) { myHealthStats.set(index, heal); } /** * Sets scores * @param scores */ public void setScores(List<Double> scores) { myScores = scores; } /** * Set score at index * @param index index * @param score double score */ public void setScore(int index, double score) { myScores.set(index, score); } /** * Return double scores; * @return */ public List<Double> getScores() { return myScores; } }