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 components = new ArrayList(); 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); } } }