buildcraft/common/buildcraft/core/tablet/GuiTablet.java
2015-04-18 10:23:41 +02:00

147 lines
4.5 KiB
Java

package buildcraft.core.tablet;
import java.util.Date;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.GL11;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ResourceLocation;
import buildcraft.api.tablet.TabletBitmap;
import buildcraft.core.lib.render.DynamicTextureBC;
import buildcraft.core.tablet.manager.TabletManagerClient;
import buildcraft.core.tablet.manager.TabletThread;
public class GuiTablet extends GuiScreen {
private static final boolean ENABLE_HIGHLIGHT = false;
private static final int[] PALETTE = new int[]{
0x00000000, 0x1c000000, 0x30000000, 0x48000000,
0x60000000, 0x78000000, 0x9a000000, 0xbc000000
};
private static final ResourceLocation TEXTURE = new ResourceLocation("buildcraftcore", "textures/gui/tablet.png");
private static final int X_SIZE = 142;
private static final int Y_SIZE = 180;
private final DynamicTextureBC display;
private final EntityPlayer player;
private final TabletThread tabletThread;
private final TabletClient tablet;
private int guiLeft, guiTop;
private long lastDate;
private float glScale = 1.0f;
private int buttonState = 1;
public GuiTablet(EntityPlayer player) {
super();
this.tabletThread = TabletManagerClient.INSTANCE.get();
this.tablet = (TabletClient) tabletThread.getTablet();
this.lastDate = (new Date()).getTime();
this.player = player;
this.display = new DynamicTextureBC(tablet.getScreenWidth(), tablet.getScreenHeight());
tablet.updateGui(0.0F, this, true);
}
@Override
public boolean doesGuiPauseGame() {
return false;
}
@Override
public void initGui() {
super.initGui();
// recalculate width/height
int oldScale = mc.gameSettings.guiScale;
ScaledResolution realRes = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
mc.gameSettings.guiScale = realRes.getScaleFactor() == 1 ? 2 : (realRes.getScaleFactor() & (~1));
ScaledResolution currentRes = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
mc.gameSettings.guiScale = oldScale;
glScale = (float) (currentRes.getScaledWidth_double() / realRes.getScaledWidth_double());
this.guiLeft = (currentRes.getScaledWidth() - X_SIZE) / 2;
this.guiTop = (currentRes.getScaledHeight() - Y_SIZE) / 2;
}
public void bindTexture(ResourceLocation texture) {
Minecraft.getMinecraft().renderEngine.bindTexture(texture);
}
public void copyDisplay(TabletBitmap display) {
for (int j = 0; j < display.height; j++) {
for (int i = 0; i < display.width; i++) {
this.display.setColor(i, j, PALETTE[display.get(i, j) & 7]);
}
}
}
@Override
public void updateScreen() {
long date = (new Date()).getTime();
float time = (float) (date - lastDate) / 1000.0F;
tabletThread.tick(time);
lastDate = date;
tablet.updateGui(time, this, false);
}
private boolean isButton(int mx, int my) {
return mx >= (guiLeft + 65) && my >= (guiTop + 167) && mx < (guiLeft + 65 + 18) && my < (guiTop + 167 + 8);
}
@Override
public void handleMouseInput() {
int x = (int) (Mouse.getEventX() * this.width / this.mc.displayWidth * glScale);
int y = (int) ((this.height - Mouse.getEventY() * this.height / this.mc.displayHeight - 1) * glScale);
int k = Mouse.getEventButton();
if (k == 0) {
if (Mouse.getEventButtonState()) {
if (isButton(x, y)) {
buttonState = 2;
}
} else if (buttonState == 2) {
if (isButton(x, y)) {
buttonState = ENABLE_HIGHLIGHT ? 0 : 1;
System.out.println("PRESS");
} else {
buttonState = 1;
}
}
} else if (ENABLE_HIGHLIGHT && k == -1 && buttonState != 2) {
if (isButton(x, y)) {
buttonState = 0;
} else {
buttonState = 1;
}
}
}
@Override
public void drawScreen(int fmx, int fmy, float p) {
this.drawDefaultBackground();
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glPushMatrix();
GL11.glScalef(1.0F / glScale, 1.0F / glScale, 1.0F / glScale);
bindTexture(TEXTURE);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, X_SIZE, Y_SIZE);
drawTexturedModalRect(guiLeft + 65, guiTop + 167, 142, 147 + (buttonState * 10), 18, 8);
GL11.glPushAttrib(GL11.GL_ENABLE_BIT);
GL11.glEnable(GL11.GL_BLEND);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
GL11.glScalef(0.5F, 0.5F, 0.5F);
display.draw((guiLeft + 10 + 1) * 2, (guiTop + 8 + 1) * 2, zLevel);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
GL11.glDisable(GL11.GL_BLEND);
GL11.glPopAttrib();
GL11.glPopMatrix();
}
}