ProjectZombie/src/projectzombie/menu/gui/GUI.java

125 lines
2.3 KiB
Java

package projectzombie.menu.gui;
import java.util.ArrayList;
import projectzombie.util.math.vec.Vec2d;
public class GUI implements GUIContainer
{
private ArrayList<GUIComponent> components = new ArrayList<GUIComponent>();
private Vec2d mousePos = new Vec2d(0, 0);
public GUISelectable selected;
private static boolean move_last = false;
public void setSelected(GUISelectable selected) {
if(this.selected != null) {
this.selected.setSelected(false);
}
this.selected = selected;
if(this.selected != null) {
this.selected.setSelected(true);
}
}
@Override
public void render(Vec2d mousePos) {
for(GUIComponent c : components) {
c.render(mousePos);
}
}
public void render() {
this.render(mousePos);
}
@Override
public void add(GUIComponent c) {
components.add(c);
}
public void updateMousePos(Vec2d pos) {
this.mousePos = pos;
}
public void onMove(boolean status, double angle)
{
if(this.selected == null) {
return;
}
if(status) {
if(!move_last) {
move_last = true;
this.selected.setSelected(false);
GUISelectable selected = null;
// Up / North
if(angle > 315 || angle <= 45) {
selected = this.selected.getNeighbour(GUISelectableDirection.UP);
}
// Right / East
if(angle > 45 && angle <= 135) {
selected = this.selected.getNeighbour(GUISelectableDirection.RIGHT);
}
// Down / South
if(angle > 135 && angle <= 225) {
selected = this.selected.getNeighbour(GUISelectableDirection.DOWN);
}
// Left / West
if(angle > 225 && angle <= 315) {
selected = this.selected.getNeighbour(GUISelectableDirection.LEFT);
}
if(selected != null) {
this.selected = selected;
}
this.selected.setSelected(true);
}
}
else if(move_last) {
move_last = false;
}
}
@Override
public boolean checkMouseHover(Vec2d pos) {
return false;
}
@Override
public void onMouseClick(Vec2d pos) {
for(GUIComponent c : components) {
if(c.checkMouseHover(mousePos)) {
c.onMouseClick(mousePos);
}
}
}
public void onMouseClick() {
this.onMouseClick(mousePos);
}
@Override
public void onBack() {
for(GUIComponent c : components) {
c.onBack();
}
}
@Override
public void onActivate() {
for(GUIComponent c : components) {
c.onActivate();
}
}
}