package speiger.src.coreengine.rendering.gui.components; import java.util.Collection; import java.util.function.Consumer; import org.lwjgl.opengl.GL11; import speiger.src.collections.ints.collections.IntCollection; import speiger.src.coreengine.math.value.IValue; import speiger.src.coreengine.math.value.LiniarValue; import speiger.src.coreengine.rendering.gui.GuiComponent; import speiger.src.coreengine.rendering.gui.base.IButtonComponent; import speiger.src.coreengine.rendering.gui.components.list.SelectionEntry; import speiger.src.coreengine.rendering.gui.helper.Align; import speiger.src.coreengine.rendering.gui.helper.box.IGuiBox; import speiger.src.coreengine.rendering.gui.helper.constrains.ComponentConstrains; import speiger.src.coreengine.rendering.gui.helper.constrains.Constraints; import speiger.src.coreengine.rendering.gui.helper.constrains.ParentConstrain; import speiger.src.coreengine.rendering.gui.renderer.UIRenderer; import speiger.src.coreengine.rendering.gui.renderer.buffer.RenderBuffer; import speiger.src.coreengine.rendering.tesselation.Tesselator; import speiger.src.coreengine.rendering.tesselation.VertexType; public class SelectionComponent extends GuiComponent implements IButtonComponent, Consumer { public static final int FLAG_ANIMATE = 1 << 20; ListComponent list = new ListComponent().bounds(0F, 120F).setManualRenderer(true).setIgnoreBounds(true).cast(); TextComponent text = new TextComponent().align(Align.LEFT_TOP, Align.CENTER).setTextScale(0.85F).setManualRenderer(true).cast(); RenderBuffer buffer; int color; boolean isOpen = false; int selectedIndex = -1; int defaultIndex = -1; IValue animation = null; public SelectionComponent(int color) { super(0F, 0F, 0F, 0F); this.color = color; text.setText("Select Index"); list.setColor(color); } public SelectionComponent(int color, Collection collection) { super(0F, 0F, 0F, 0F); this.color = color; text.setText("Select Index"); list.setColor(color); addEntries(collection); } public SelectionComponent(float x, float y, float width, float height, int color) { super(x, y, width, height); this.color = color; text.setText("Select Index"); list.setColor(color); } public SelectionComponent(float x, float y, float width, float height, int color, Collection collection) { super(x, y, width, height); this.color = color; text.setText("Select Index"); list.setColor(color); addEntries(collection); } @Override public void init() { list.setEntryHeight(getGui().getFont().height()).addUserActionListener(this); addChild(text, Constraints.getParentConstrains(21F, 0F, 10.5F, 0F)); addChild(list, new ComponentConstrains(new ParentConstrain(), new ParentConstrain().invert(), new ParentConstrain(), null)); addCloseListener(buffer = getRenderer().createBuffer()); createArrow(); } public final SelectionComponent setAnimating(boolean value) { setFlag(FLAG_ANIMATE, value); return this; } public final boolean isAnimating() { return isFlagSet(FLAG_ANIMATE); } @Override protected void updateState() { list.setVisible(isOpen); } public TextComponent getText() { return text; } public ListComponent getList() { return list; } public SelectionComponent addEntry(String s) { list.add(new SelectionEntry(s)); return this; } public SelectionComponent addEntries(Collection collection) { for(String s : collection) { list.add(new SelectionEntry(s)); } return this; } public SelectionComponent updateEntry(int index, String newName) { list.get(index).setText(newName); if(index == selectedIndex) { updateSelection(); } return this; } public SelectionComponent removeEntry(String s) { for(int i = 0,m=list.size();i