/*
* 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.Reference;
import matteroverdrive.container.IButtonHandler;
import matteroverdrive.data.ScaleTexture;
import matteroverdrive.gui.MOGuiBase;
import net.minecraft.client.Minecraft;
import net.minecraft.util.MathHelper;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.input.Keyboard;
/**
* Created by Simeon on 5/3/2015.
*/
public class ElementIntegerField extends ElementBaseGroup implements IButtonHandler
{
IButtonHandler buttonHandler;
MOElementButtonScaled incBtn;
MOElementButtonScaled decBtn;
ScaleTexture numberBG;
int number;
int min;
int max;
private String label;
private int labelColor = 0xffffff;
public ElementIntegerField(MOGuiBase gui,IButtonHandler buttonHandler, int posX, int posY, int height,int min,int max)
{
this(gui,buttonHandler,posX,posY,32+ Minecraft.getMinecraft().fontRenderer.getStringWidth(Integer.toString(max))+10,height,min,max);
}
public ElementIntegerField(MOGuiBase gui,IButtonHandler buttonHandler, int posX, int posY, int width, int height,int min,int max) {
super(gui, posX, posY, width, height);
this.buttonHandler = buttonHandler;
numberBG = new ScaleTexture(new ResourceLocation(Reference.PATH_ELEMENTS + "field_over.png"), 30, 18).setOffsets(5, 5, 5, 5);
incBtn = new MOElementButtonScaled(gui,this,0,0,"Inc",16,height);
incBtn.setNormalTexture(new ScaleTexture(new ResourceLocation(Reference.PATH_ELEMENTS + "button_normal_left.png"),10,18).setOffsets(5,2,5,5));
incBtn.setOverTexture(null);
incBtn.setText("+");
decBtn = new MOElementButtonScaled(gui,this,width - 16,0,"Dec",16,height);
decBtn.setNormalTexture(new ScaleTexture(new ResourceLocation(Reference.PATH_ELEMENTS + "button_normal_right.png"), 10, 18).setOffsets(2, 5, 5, 5));
decBtn.setOverTexture(null);
decBtn.setText("-");
this.min = min;
this.max = max;
}
public ElementIntegerField(MOGuiBase gui,IButtonHandler buttonHandler, int posX, int posY, int width, int height)
{
this(gui,buttonHandler, posX, posY, width, height, Integer.MIN_VALUE, Integer.MAX_VALUE);
}
@Override
public void init()
{
super.init();
addElement(incBtn);
addElement(decBtn);
}
public ElementIntegerField(MOGuiBase gui,IButtonHandler buttonHandler, int posX, int posY) {
this(gui,buttonHandler, posX, posY, 120, 18, Integer.MIN_VALUE, Integer.MAX_VALUE);
}
public int getNumber()
{
return MathHelper.clamp_int(number, min, max);
}
public void setNumber(int number)
{
this.number = MathHelper.clamp_int(number,min,max);
}
@Override
public void handleElementButtonClick(MOElementBase element,String buttonName, int mouseButton)
{
if (buttonName == "Inc")
{
int value = 1;
if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT))
value = 64;
else if (Keyboard.isKeyDown(Keyboard.KEY_LCONTROL))
value = 16;
setNumber(getNumber()+value);
buttonHandler.handleElementButtonClick(this,getName(),value);
}
else if (buttonName == "Dec")
{
int value = -1;
if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT))
value = -64;
else if (Keyboard.isKeyDown(Keyboard.KEY_LCONTROL))
value = -16;
setNumber(getNumber()+value);
buttonHandler.handleElementButtonClick(this,getName(),value);
}
}
@Override
public void drawBackground(int mouseX, int mouseY, float gameTicks)
{
super.drawBackground(mouseX,mouseY,gameTicks);
numberBG.render(posX + 16,posY,sizeX - 32,sizeY);
}
@Override
public void drawForeground(int mouseX, int mouseY)
{
super.drawForeground(mouseX, mouseY);
String number = Integer.toString(this.number);
int numberWidth = getFontRenderer().getStringWidth(number);
getFontRenderer().drawString(number,posX - numberWidth/2 + sizeX/2,posY - getFontRenderer().FONT_HEIGHT/2 + sizeY/2,Reference.COLOR_GUI_DARKER.getColor());
if (label != null)
{
getFontRenderer().drawString(label,posX + sizeX + 2,posY - getFontRenderer().FONT_HEIGHT/2 + sizeY/2,labelColor);
}
}
public void setBounds(int min,int max)
{
this.min = min;
this.max = max;
}
public void setLabel(String label)
{
this.label = label;
}
public void setLabelColor(int labelColor)
{
this.labelColor = labelColor;
}
}