Java tutorial
/* * This file is part of Matter Overdrive * Copyright (c) 2015., Simeon Radivoev, All rights reserved. * * Matter Overdrive is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Matter Overdrive is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Matter Overdrive. If not, see <http://www.gnu.org/licenses>. */ package matteroverdrive.gui.element; import matteroverdrive.container.IButtonHandler; import matteroverdrive.gui.GuiElementList; import matteroverdrive.gui.MOGuiBase; import matteroverdrive.gui.events.ITextHandler; import org.lwjgl.opengl.GL11; import java.util.ArrayList; import java.util.List; /** * Created by Simeon on 4/3/2015. */ public class ElementBaseGroup extends MOElementBase implements IButtonHandler, GuiElementList, ITextHandler { protected ArrayList<MOElementBase> elements = new ArrayList<MOElementBase>(); public ElementBaseGroup(MOGuiBase gui, int posX, int posY) { super(gui, posX, posY); } public ElementBaseGroup(MOGuiBase gui, int posX, int posY, int width, int height) { super(gui, posX, posY, width, height); } @Override public void init() { elements.clear(); } protected MOElementBase getElementAtPosition(int mX, int mY) { for (int i = getElements().size(); i-- > 0;) { MOElementBase element = getElements().get(i); if (mY >= 0 && mY <= sizeY && mX >= 0 && mX <= sizeX && element.intersectsWith(mX, mY) && element.isVisible()) { return element; } } return null; } public void addTooltip(List<String> var1, int mouseX, int mouseY) { mouseX -= posX; mouseY -= posY; for (int i = getElements().size(); i-- > 0;) { MOElementBase element = getElements().get(i); if (mouseY >= 0 && mouseY <= sizeY && mouseX >= 0 && mouseX <= sizeX && element.intersectsWith(mouseX, mouseY) && element.isVisible()) { element.addTooltip(var1, mouseX, mouseY); } } } @Override public void drawBackground(int mouseX, int mouseY, float gameTicks) { mouseX -= posX; mouseY -= posY; GL11.glPushMatrix(); GL11.glTranslatef(this.posX, this.posY, 0); GL11.glColor3f(1, 1, 1); for (int i = getElements().size(); i-- > 0;) { MOElementBase c = getElements().get(i); if (c.isVisible()) c.drawBackground(mouseX, mouseY, gameTicks); } GL11.glPopMatrix(); } @Override public void drawForeground(int mouseX, int mouseY) { mouseX -= posX; mouseY -= posY; GL11.glPushMatrix(); GL11.glTranslatef(this.posX, this.posY, 0); GL11.glColor3f(1, 1, 1); for (int i = getElements().size(); i-- > 0;) { MOElementBase c = getElements().get(i); if (c.isVisible()) c.drawForeground(mouseX, mouseY); } GL11.glPopMatrix(); } @Override public void update(int mouseX, int mouseY) { mouseX -= posX; mouseY -= posY; for (int i = elements.size(); i-- > 0;) { getElements().get(i).update(mouseX, mouseY); } update(); } @Override public void updateInfo() { for (int i = elements.size(); i-- > 0;) { MOElementBase element = elements.get(i); element.updateInfo(); } } @Override public boolean onMousePressed(int mouseX, int mouseY, int mouseButton) { mouseX -= posX; mouseY -= posY; for (int i = getElements().size(); i-- > 0;) { MOElementBase c = getElements().get(i); if (!c.isVisible() || !c.isEnabled() || !c.intersectsWith(mouseX, mouseY)) { continue; } if (c.onMousePressed(mouseX, mouseY, mouseButton)) { return true; } } return false; } @Override public void onMouseReleased(int mouseX, int mouseY) { mouseX -= posX; mouseY -= posY; for (int i = getElements().size(); i-- > 0;) { MOElementBase c = getElements().get(i); if (!c.isVisible() || !c.isEnabled()) { continue; } c.onMouseReleased(mouseX, mouseY); } } @Override public boolean onMouseWheel(int mouseX, int mouseY, int movement) { mouseX -= posX; mouseY -= posY; for (int i = getElements().size(); i-- > 0;) { MOElementBase c = getElements().get(i); if (!c.isVisible() || !c.isEnabled() || !c.intersectsWith(mouseX, mouseY)) { continue; } if (c.onMouseWheel(mouseX, mouseY, movement)) { return true; } } return false; } @Override public boolean onKeyTyped(char characterTyped, int keyPressed) { for (int i = getElements().size(); i-- > 0;) { MOElementBase c = getElements().get(i); if (!c.isVisible() || !c.isEnabled()) { continue; } if (c.onKeyTyped(characterTyped, keyPressed)) { return true; } } return false; } public MOElementBase setGroupVisible(boolean visible) { super.setVisible(visible); return this; } @Override public void handleElementButtonClick(MOElementBase element, String buttonName, int mouseButton) { } public List<MOElementBase> getElements() { return elements; } public MOElementBase addElementAt(int i, MOElementBase element) { element.parent = this; elements.add(i, element); return element; } public MOElementBase addElement(MOElementBase element) { if (element == null) return null; element.parent = this; elements.add(element); return element; } @Override public void textChanged(String elementName, String text, boolean typed) { } }