package vooga.scroller.level_editor.controllerSuite;
import java.util.HashMap;
import java.util.Map;
import vooga.scroller.level_editor.ILevelEditor;
import vooga.scroller.level_editor.StartPoint;
import vooga.scroller.level_editor.library.IBackgroundLibrary;
import vooga.scroller.level_editor.library.ISpriteLibrary;
import vooga.scroller.sprites.Sprite;
import vooga.scroller.sprites.interfaces.IDoor;
/**
* The tool manager is an utility class, performing part of the controller's
* responsibilities, specifically setting up the necessary tools components for the
* view and the model.
* @author Dagbedji Fagnisse, Danny Goodman
*
*/
public class ToolsManager {
private ISpriteLibrary mySpriteLib;
private IBackgroundLibrary myBackgroundLib;
private Map<Integer, Sprite> mySpriteMap;
private LETools myViewTools;
/**
* Generate the necessary tools based on the provided sprites and background library.
* @param l - sprites library
* @param bgLib - backgrounds library
*/
public ToolsManager (ISpriteLibrary l, IBackgroundLibrary bgLib) {
myBackgroundLib = bgLib;
mySpriteLib = l;
setTools();
}
private void setTools () {
int i = 1;
mySpriteMap = new HashMap<Integer, Sprite>();
myViewTools = new LETools();
myViewTools.addBackgrounds(myBackgroundLib.getBackgrounds());
Sprite sprite;
for (Class<? extends Sprite> c : mySpriteLib.getSpritesClasses()) {
try {
sprite = (Sprite) c.newInstance();
if (IDoor.class.isAssignableFrom(sprite.getClass())) {
setupTool(-i, sprite);
}
else {
setupTool(i, sprite);
}
}
catch (InstantiationException e) {
e.printStackTrace();
}
catch (IllegalAccessException e) {
e.printStackTrace();
}
i++;
}
sprite = new StartPoint();
setupTool(ILevelEditor.START_ID, sprite);
}
private void setupTool (int i, Sprite sprite) {
mySpriteMap.put(i, sprite);
myViewTools.addSpriteOption(sprite, i);
}
/**
* Get the tools necessary for the view
* @return
*/
public LETools getViewTools () {
return myViewTools;
}
/**
* Get the Integer-to-sprite mapping for the library provided.
* @return map of integer to Sprite
*/
public Map<Integer, Sprite> getSpriteMap () {
return mySpriteMap;
}
/**
* Name of the encapsulating class
* @return
*/
public String getSpriteLibPath () {
return mySpriteLib.getClass().getName();
}
}