package br.edu.ufcg.ccc.projeto2.warofkingdoms.management; import static br.edu.ufcg.ccc.projeto2.warofkingdoms.util.Constants.BARATHEON; import static br.edu.ufcg.ccc.projeto2.warofkingdoms.util.Constants.GREYJOY; import static br.edu.ufcg.ccc.projeto2.warofkingdoms.util.Constants.LANNISTER; import static br.edu.ufcg.ccc.projeto2.warofkingdoms.util.Constants.MARTELL; import static br.edu.ufcg.ccc.projeto2.warofkingdoms.util.Constants.STARK; import static br.edu.ufcg.ccc.projeto2.warofkingdoms.util.Constants.TYRELL; import java.util.HashMap; import java.util.List; import java.util.Map; import br.edu.ufcg.ccc.projeto2.warofkingdoms.entities.House; import br.edu.ufcg.ccc.projeto2.warofkingdoms.entities.Territory; import br.edu.ufcg.ccc.projeto2.warofkingdoms.ui.entities.HouseToken; import br.ufcg.edu.ccc.projeto2.R; public class HouseTokenManager { private static HouseTokenManager instance; private Map<House, HouseToken> houseTokens; private Map<Territory, House> startingHouseTerritories; private HouseTokenManager() { houseTokens = generateAllTokens(); } public synchronized static HouseTokenManager getInstance() { if (instance == null) { instance = new HouseTokenManager(); } return instance; } public void reset() { instance = null; } private Map<House, HouseToken> generateAllTokens() { Map<House, HouseToken> tokens = new HashMap<House, HouseToken>(); HouseToken starkToken = new HouseToken(R.drawable.token_stark, R.drawable.token_stark_castle); tokens.put(new House(STARK), starkToken); HouseToken lannisterToken = new HouseToken(R.drawable.token_lannister, R.drawable.token_lannister_castle); tokens.put(new House(LANNISTER), lannisterToken); HouseToken baratheonToken = new HouseToken(R.drawable.token_baratheon, R.drawable.token_baratheon_castle); tokens.put(new House(BARATHEON), baratheonToken); HouseToken tyrellToken = new HouseToken(R.drawable.token_tyrell, R.drawable.token_tyrell_castle); tokens.put(new House(TYRELL), tyrellToken); HouseToken martellToken = new HouseToken(R.drawable.token_martell, R.drawable.token_martell_castle); tokens.put(new House(MARTELL), martellToken); HouseToken greyjoyToken = new HouseToken(R.drawable.token_greyjoy, R.drawable.token_greyjoy_castle); tokens.put(new House(GREYJOY), greyjoyToken); return tokens; } public void setStartingHouseTerritories(List<Territory> territories) { startingHouseTerritories = new HashMap<Territory, House>(); for (Territory t : territories) { if (t.getOwner() != null) { startingHouseTerritories.put(t, t.getOwner()); } } } /** * Returns the token image representing the state of the provided territory. * This should only be called after the starting territories are set up, * i.e., call setStartingHouseTerritories before calling this method. The * provided territory should also be owned by a house. * * @param house * @param territory * @return */ public int getTokenImage(Territory territory) { if (territoryIsOwnedByFirstOwner(territory)) { return houseTokens.get(territory.getOwner()).getCastleToken(); } else { return houseTokens.get(territory.getOwner()).getFlagToken(); } } private boolean territoryIsOwnedByFirstOwner(Territory territory) { return territory.getOwner().equals( startingHouseTerritories.get(territory)); } public HouseToken getHouseToken(House house) { return houseTokens.get(house); } }