package vooga.rts.gui;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.Observable;
import vooga.rts.IGameLoop;
import vooga.rts.resourcemanager.ResourceManager;
import util.Location;
import vooga.rts.util.Scale;
public abstract class Button extends Observable implements IGameLoop {
private BufferedImage myImage;
protected Dimension mySize;
protected Location myPos;
protected boolean isFocused;
protected static final int S_X = (int) Window.D_X;
protected static final int S_Y = (int) Window.D_Y;
/*
* TODO: Add onFocus behavior for each button.
*/
public Button (String image, Dimension size, Location pos) {
if (image != null) {
myImage =
ResourceManager.getInstance().<BufferedImage> getFile(image,
BufferedImage.class);
}
mySize = size;
myPos = pos;
isFocused = false;
}
public void setImage (BufferedImage i) {
myImage = i;
}
@Override
public abstract void update (double elapsedTime);
@Override
public void paint (Graphics2D pen) {
if (myImage != null) {
pen.drawImage(myImage, (int) myPos.x, (int) myPos.y, mySize.width, mySize.height, null);
}
}
public abstract void processClick ();
public abstract void processHover ();
public boolean checkWithinBounds (int x, int y) {
return (x > Scale.scaleX(myPos.x) && y > Scale.scaleY(myPos.y) &&
x < (Scale.scaleX(myPos.x) + Scale.scaleX(mySize.width)) && y < (Scale
.scaleY(myPos.y) + Scale.scaleY(mySize.height)));
}
public boolean checkWithinBounds (Location l) {
return checkWithinBounds((int) l.getX(), (int) l.getY());
}
public Dimension getSize () {
return mySize;
}
public void setSize (Dimension s) {
mySize = s;
}
public Location getPos () {
return myPos;
}
public void setPos (Location l) {
myPos = l;
}
public void setFocused (boolean b) {
isFocused = b;
}
}