146 lines
2.9 KiB
Java
146 lines
2.9 KiB
Java
package projectzombie.menu.gui;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import org.lwjgl.opengl.GL33;
|
|
|
|
import gl_engine.matrix.Matrix4;
|
|
import gl_engine.vec.Vec2d;
|
|
import gl_engine.vec.Vec4d;
|
|
import projectzombie.Main;
|
|
|
|
public class GUIContainerSlider implements GUIComponent, GUIContainer
|
|
{
|
|
private ArrayList<GUIComponent> components = new ArrayList<GUIComponent>();
|
|
private Vec2d pos;
|
|
private Vec2d size;
|
|
private double length;
|
|
private double scroll = 0;
|
|
|
|
public GUIContainerSlider(Vec2d pos, Vec2d size, double length) {
|
|
this.pos = pos;
|
|
this.size = size;
|
|
this.length = length;
|
|
}
|
|
|
|
public void setLength(double length) {
|
|
this.length = length;
|
|
}
|
|
|
|
@Override
|
|
public void add(GUIComponent c) {
|
|
components.add(c);
|
|
}
|
|
|
|
@Override
|
|
public void render(Matrix4 matrix, Vec2d mousePos, boolean canHover)
|
|
{
|
|
if(mousePos.y < pos.y || mousePos.y > pos.y + size.y) {
|
|
canHover = false;
|
|
}
|
|
|
|
matrix = Matrix4.multiply(matrix, Matrix4.translate(0, -scroll, 0));
|
|
mousePos = mousePos.add(new Vec2d(0, scroll));
|
|
|
|
GL33.glUniform1i(Main.window.glsl_do_discard_coords, 1);
|
|
GL33.glUniform4f(Main.window.glsl_discard_coords,
|
|
(float)pos.x, (float)pos.y, (float)(pos.x + size.x), (float)(pos.y + size.y));
|
|
|
|
for(GUIComponent c : components) {
|
|
c.render(matrix, mousePos, canHover);
|
|
}
|
|
|
|
GL33.glUniform1i(Main.window.glsl_do_discard_coords, 0);
|
|
}
|
|
|
|
@Override
|
|
public void update(Vec2d mousePos)
|
|
{
|
|
if(mousePos.y < pos.y || mousePos.y > pos.y + size.y) {
|
|
return;
|
|
}
|
|
|
|
mousePos = mousePos.add(new Vec2d(0, scroll));
|
|
|
|
for(GUIComponent c : components) {
|
|
c.update(mousePos);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean checkMouseHover(Vec2d pos) {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void onRightClick(Vec2d mousePos)
|
|
{
|
|
if(mousePos.y < pos.y || mousePos.y > pos.y + size.y) {
|
|
return;
|
|
}
|
|
|
|
mousePos = mousePos.add(new Vec2d(0, scroll));
|
|
|
|
for(GUIComponent c : components) {
|
|
if(c.checkMouseHover(mousePos)) {
|
|
c.onRightClick(mousePos);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onMouseClick(Vec2d mousePos)
|
|
{
|
|
if(mousePos.y < pos.y || mousePos.y > pos.y + size.y) {
|
|
return;
|
|
}
|
|
|
|
mousePos = mousePos.add(new Vec2d(0, scroll));
|
|
|
|
for(GUIComponent c : components) {
|
|
if(c.checkMouseHover(mousePos)) {
|
|
c.onMouseClick(mousePos);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onActivate() {
|
|
for(GUIComponent c : components) {
|
|
c.onActivate();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onBack() {
|
|
for(GUIComponent c : components) {
|
|
c.onBack();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onScroll(Vec2d mousePos, double amount)
|
|
{
|
|
// Only scroll if the mouse is hovering over the scroll area
|
|
if(
|
|
mousePos.x > pos.x && mousePos.x < pos.x + size.x &&
|
|
mousePos.y > pos.y && mousePos.y < pos.y + size.y)
|
|
{
|
|
scroll -= amount;
|
|
|
|
if(scroll < 0) {
|
|
scroll = 0;
|
|
}
|
|
|
|
if(scroll > length) {
|
|
scroll = length;
|
|
}
|
|
}
|
|
|
|
for(GUIComponent c : components) {
|
|
c.onScroll(mousePos, amount);
|
|
}
|
|
}
|
|
|
|
}
|