package gameEngine.views;
import gameEngine.input.Input;
import gameEngine.input.MouseInput;
import java.util.ArrayList;
import java.util.List;
public class Button implements IUpdatable {
private Sprite buttonSprite;
private Text buttonText;
private List<Runnable> onClickListeners = new ArrayList<>();
private boolean isPressed = false;
private Color normalColor = new Color(1f, 1f, 1f, 1f);
private Color pressedColor = new Color(0.5f, 0.5f, 0.5f, 1f);
public Button(float x, float y, Sprite sprite, Text text) {
buttonSprite = sprite;
buttonSprite.setPosition(x, y);
buttonText = text;
}
public Button(float posX, float posY, float scaleX, float scaleY, String text){
this(posX, posY, new Sprite(Window.RESOURCE_PATH + "button.png") , new Text(posX + 5.25f, posY- 2.6f, text, 24));
buttonSprite.setScale(scaleX, scaleY);
}
public Button(float posX, float posY, float scaleX, float scaleY){
this(posX, posY, new Sprite(Window.RESOURCE_PATH + "button.png") , new Text(posX + 5.25f, posY - 2.6f, "", 24));
buttonSprite.setScale(scaleX, scaleY);
}
public Button(){
this(0,0, new Sprite(Window.RESOURCE_PATH + "button.png"), new Text(5.25f, -2.6f, "", 24));
}
public void update() {
buttonSprite.update();
buttonText.update();
float mouseX = MouseInput.getX();
float mouseY = MouseInput.getY();
if (Input.GetMouseButtonDown(0) && buttonSprite.isMouseOver(mouseX, mouseY)) {
isPressed = true;
buttonSprite.setColor(pressedColor);
}
if (Input.GetMouseButtonUp(0)) {
buttonSprite.setColor(normalColor);
if (isPressed && buttonSprite.isMouseOver(mouseX, mouseY)) {
for (Runnable listener : onClickListeners) {
listener.run();
}
}
isPressed = false;
}
}
public void addListener(Runnable listener) {
onClickListeners.add(listener);
}
public void clearListeners() {
onClickListeners.clear();
}
public void setNormalColor(Color normalColor) {
this.normalColor = normalColor;
}
public void setPressedColor(Color pressedColor) {
this.pressedColor = pressedColor;
}
public void setPosition(float x, float y) {
buttonSprite.setPosition(x,y);
}
public void setScale(float x, float y){
buttonSprite.setScale(x,y);
}
public void setButtonText(String text) { buttonText.setText(text);}
}