package vooga.scroller.level_management.splash_page;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.Point2D;
import java.util.List;
import util.Location;
import util.input.Input;
import util.input.InputClassTarget;
import util.input.InputMethodTarget;
import util.input.PositionObject;
import vooga.scroller.level_editor.Level;
import vooga.scroller.level_editor.exceptions.LevelEditorException;
import vooga.scroller.level_management.IInputListener;
import vooga.scroller.level_management.LevelManager;
import vooga.scroller.scrollingmanager.ScrollingManager;
import vooga.scroller.sprites.Sprite;
import vooga.scroller.sprites.interfaces.IDoor;
import vooga.scroller.sprites.superclasses.Player;
import vooga.scroller.util.IGameComponent;
import vooga.scroller.util.ISpriteView;
import vooga.scroller.util.Pixmap;
import vooga.scroller.view.GameView;
@InputClassTarget
public abstract class SplashPage implements IInputListener, IGameComponent{
// TODO: this string is the part of every Splash page and thus needs to be removed
public static final String CONTROLS_FILE_PATH = "vooga/scroller/marioGame/controls/SplashMapping";
// TODO: this class needs to be extendible and more general so developers can defined
// their own controls for the splash page.
private IDoor myDoor;
private ISpriteView myBackground;
private int myID;
private GameView myGameView;
private Player myPlayer;
//private Mouse myMouse;
private List<Sprite> mySprites;
// buttons
//private Button myButton;
public SplashPage (ISpriteView backgroundImage, int splashID, GameView gameView, ScrollingManager sm) {
myBackground = backgroundImage;
myID = splashID;
myGameView = gameView;
mySprites = getSprites();
}
/**
* Sets the next level to go to given ID.
*
* @param id of the next level to go.
*/
public void addDoor(IDoor door) {
myDoor = door;
}
@Override
public void addSprite(Sprite sprite){
mySprites.add(sprite);
}
@Override
public void update(double elapsedTime, Dimension bounds, GameView gameView) {
// Just leave the background image.
}
@Override
public void paint (Graphics2D pen) {
myBackground.paint(pen, new Location((double)myGameView.getWidth()/2,
(double)myGameView.getHeight()/2),
myGameView.getSize());
for(Sprite sp: mySprites) {
sp.paint(pen);
}
}
public abstract List<Sprite> getSprites();
@InputMethodTarget(name = "exit")
public void exit() {
System.exit(-1);
}
// @InputMethodTarget(name = "mouse")
// public void updateMouse(PositionObject posObj) {
// myMouse.setCenter(posObj.getPoint2D().getX(), posObj.getPoint2D().getY());
// }
//
// @InputMethodTarget(name = "click")
// public void mouseClick(PositionObject posObj) {
// if(myButton.intersects(posObj.getPoint2D())){
// nextLevel();
// }
// }
public abstract void addInputListeners (Input input);
public abstract void removeInputListeners(Input input);
public abstract String getInputFilePath ();
//return myControlLocation;
public IDoor getDoor() {
return myDoor;
}
@Override
public Player getPlayer () {
return myPlayer;
}
@Override
public void addPlayer (Player p) {
myPlayer = p;
}
@Override
public double getRightBoundary () {
return (double)myGameView.getWidth();
}
@Override
public Dimension getLevelBounds () {
return myGameView.getSize();
}
@Override
public double getLeftBoundary () {
return 0;
}
@Override
public double getUpperBoundary () {
return 0;
}
@Override
public double getLowerBoundary () {
return (double)myGameView.getHeight();
}
@Override
public Image getBackground () {
return myBackground.getImage();
}
}