147 lines
4.5 KiB
Java
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();
|
|
}
|
|
}
|