package shedar.mods.ic2.nuclearcontrol.gui.controls; import ic2.core.IC2; import ic2.core.network.NetworkManager; import java.lang.reflect.Method; import ic2.api.network.NetworkHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.util.ResourceLocation; import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; import shedar.mods.ic2.nuclearcontrol.tileentities.TileEntityThermo; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class GuiRemoteThermoSlider extends GuiButton { private static final String TEXTURE_FILE = "nuclearcontrol:textures/gui/GUIRemoteThermo.png"; private static final ResourceLocation TEXTURE_LOCATION = new ResourceLocation(TEXTURE_FILE); private static final int ARROW_WIDTH = 6; private static final float TEMP_RANGE = 16000; private static final int HEAT_STEP = 100; public float sliderValue; public boolean dragging; private String label; private TileEntityThermo thermo; private float effectiveWidth; private double sliderValueStep; public GuiRemoteThermoSlider(int id, int x, int y, String label, TileEntityThermo thermo) { super(id, x, y, 181, 16, label); this.thermo = thermo; dragging = false; this.label = label; sliderValue = (thermo.getHeatLevel()) / TEMP_RANGE; displayString = String.format(label, getNormalizedHeatLevel()); effectiveWidth = width - 8 - 2 * ARROW_WIDTH; sliderValueStep = HEAT_STEP / TEMP_RANGE; } public void checkMouseWheel(int mouseX, int mouseY) { boolean isHover = mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height; if (isHover) { int delta = Mouse.getEventDWheel(); if (delta != 0) { int multiplier = Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT) ? 1 : 3; if (delta > 0) setSliderPos(xPosition + 1, multiplier); else setSliderPos(xPosition + width - 1, multiplier); } } } private int getNormalizedHeatLevel(){ return ((int) Math.floor(TEMP_RANGE * sliderValue)) / 100 * 100; } private void setSliderPos(int targetX, int multiplier) { if (targetX < xPosition + ARROW_WIDTH) // left arrow sliderValue -= sliderValueStep * multiplier; else if (targetX > xPosition + width - ARROW_WIDTH)// right arrow sliderValue += sliderValueStep * multiplier; else sliderValue = (targetX - (xPosition + 4 + ARROW_WIDTH)) / effectiveWidth; if (sliderValue < 0.0F) sliderValue = 0.0F; if (sliderValue > 1.0F) sliderValue = 1.0F; int newHeatLevel = getNormalizedHeatLevel(); if (thermo.getHeatLevel() != newHeatLevel) { //thermo.setHeatLevel(newHeatLevel); ((NetworkManager)IC2.network.get()).initiateClientTileEntityEvent(thermo, newHeatLevel); } displayString = String.format(label, newHeatLevel); } @Override public void drawButton(Minecraft minecraft, int targetX, int targetY) { if(visible){ minecraft.renderEngine.bindTexture(TEXTURE_LOCATION); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); if (dragging && (targetX >= xPosition + ARROW_WIDTH) && (targetX <= xPosition + width - ARROW_WIDTH)) setSliderPos(targetX, 1); drawTexturedModalRect(xPosition + ARROW_WIDTH + (int) (sliderValue * effectiveWidth), yPosition, 0, 166, 8, 16); minecraft.fontRenderer.drawString(displayString, xPosition, yPosition - 12, 0x404040); } } @Override public boolean mousePressed(Minecraft minecraft, int targetX, int j) { if (super.mousePressed(minecraft, targetX, j)) { setSliderPos(targetX, 1); dragging = true; return true; }else return false; } @Override public void mouseReleased(int i, int j) { super.mouseReleased(i, j); dragging = false; } }