package vooga.scroller.level_editor.controllerSuite; import java.awt.Image; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import vooga.scroller.extra_resources.sprite_interfaces.ICollectible; import vooga.scroller.extra_resources.sprite_interfaces.IEnemy; import vooga.scroller.extra_resources.sprite_interfaces.IPlatform; import vooga.scroller.level_editor.LevelEditing; import vooga.scroller.level_editor.StartPoint; import vooga.scroller.level_editor.commands.CommandConstants; import vooga.scroller.sprites.Sprite; import vooga.scroller.sprites.interfaces.IDoor; import vooga.scroller.util.IBackgroundView; import vooga.scroller.util.mvc.vcFramework.Tools; /** * Toolbox specific to a level Editor. * This object contains all the necessary information to generate GUI items * specific to a LevelEditor * * @author Dagbedji Fagnisse * */ public class LETools extends Tools<LevelEditing> { private static final int PLATFORMS = 0; private static final int ENEMIES = 1; private static final int COLLECTIBLES = 2; private static final int SPECIALPOINTS = 3; private static final int OTHERS = 4; private static final String BACKGROUND_CMD = CommandConstants.CHANGE_BACKGROUND; private static final String EDITABLE_DEPENDENTS_TITLE = LevelEditing.EDITABLE_DEPENDENTS_TITLE; private static final String EDITABLE_INDEPENDENTS_TITLE = LevelEditing.EDITABLE_INDEPENDENTS_TITLE; private List<Map<Image, String>> mySpritesOptions; private Map<String, Map<Image, String>> myOtherOptions; /** * Initialize state of this LETools. */ public LETools () { mySpritesOptions = new ArrayList<Map<Image, String>>(); Map<Image, String> platforms = new HashMap<Image, String>(); Map<Image, String> enemies = new HashMap<Image, String>(); Map<Image, String> collectibles = new HashMap<Image, String>(); Map<Image, String> specialpoints = new HashMap<Image, String>(); Map<Image, String> others = new HashMap<Image, String>(); mySpritesOptions.add(PLATFORMS, platforms); mySpritesOptions.add(ENEMIES, enemies); mySpritesOptions.add(COLLECTIBLES, collectibles); mySpritesOptions.add(SPECIALPOINTS, specialpoints); mySpritesOptions.add(OTHERS, others); Map<Image, String> backgrounds = new HashMap<Image, String>(); myOtherOptions = new HashMap<String, Map<Image, String>>(); myOtherOptions.put(BACKGROUND_CMD, backgrounds); } private Image getImg (Sprite s) { return s.getDefaultImg(); } /** * Add a Sprite option, and organize the sprites based off their behavior. * This particular implementation is (manually) coupled with the interfaces * available in the interfaces package. * * @param s - sample sprite * @param spriteID - id for communication with the model */ public void addSpriteOption (Sprite s, int spriteID) { if (s instanceof IPlatform) { mySpritesOptions.get(PLATFORMS).put(getImg(s), spriteID + ""); } else if (s instanceof IEnemy) { mySpritesOptions.get(ENEMIES).put(getImg(s), spriteID + ""); } else if (s instanceof ICollectible) { mySpritesOptions.get(COLLECTIBLES).put(getImg(s), spriteID + ""); } else if (s instanceof StartPoint || s instanceof IDoor) { mySpritesOptions.get(SPECIALPOINTS).put(getImg(s), spriteID + ""); } else { mySpritesOptions.get(OTHERS).put(getImg(s), spriteID + ""); } } /** * * @return */ public List<Map<Image, String>> getAllSprites () { return mySpritesOptions; } /** * Get the available backgrounds * @return */ public Map<Image, String> getBackgrounds () { return myOtherOptions.get(BACKGROUND_CMD); } /** * Add backgrounds to the tools * @param backgrounds - backgrounds to add */ public void addBackgrounds (Map<Integer, IBackgroundView> backgrounds) { for (Integer key : backgrounds.keySet()) { myOtherOptions.get(BACKGROUND_CMD).put( backgrounds.get(key).getImage(), "" + key); } } @Override public List<Map<Image, String>> getEditableDependents () { return getAllSprites(); } @Override public Map<String, Map<Image, String>> getEditableIndependents () { return myOtherOptions; } @Override public String getEditableDependentsTitle () { return EDITABLE_DEPENDENTS_TITLE; } @Override public String getEditableIndependentsTitle () { return EDITABLE_INDEPENDENTS_TITLE; } }