From 2918e163d2978253bbed756e7977e4a18e24d44f Mon Sep 17 00:00:00 2001 From: CrushedPixel Date: Mon, 1 Jun 2015 13:57:33 +0200 Subject: [PATCH] Added Eyecon as indicator that Ambient Lighting is enabled Added ShutdownHook to Lighting Handler to prevent high Brightness Values from being saved --- .../gui/overlay/GuiReplayOverlay.java | 16 ++++++++++++++++ .../replaymod/registry/LightingHandler.java | 16 +++++++++++++--- .../replaymod/utils/TooltipRenderer.java | 6 ++++-- .../resources/assets/replaymod/replay_gui.png | Bin 6258 -> 6392 bytes 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/overlay/GuiReplayOverlay.java b/src/main/java/eu/crushedpixel/replaymod/gui/overlay/GuiReplayOverlay.java index 653fb6ba..fdb5053b 100755 --- a/src/main/java/eu/crushedpixel/replaymod/gui/overlay/GuiReplayOverlay.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/overlay/GuiReplayOverlay.java @@ -448,6 +448,22 @@ public class GuiReplayOverlay extends Gui { } } + /** + * Render the eye icon in the bottom right corner of the screen. + * @param event Rendered post game overlay + */ + @SubscribeEvent + public void renderLightingIndicator(RenderGameOverlayEvent.Post event) { + if (event.type != RenderGameOverlayEvent.ElementType.ALL) return; + if(ReplayMod.replaySettings.isLightingEnabled() && ReplayHandler.isInReplay()) { + mc.renderEngine.bindTexture(replay_gui); + GlStateManager.resetColor(); + GlStateManager.enableAlpha(); + Gui.drawModalRectWithCustomSizedTexture(WIDTH - 10 - 19, HEIGHT - 10 - 13, + 90, 20, 19, 13, TEXTURE_SIZE, TEXTURE_SIZE); + } + } + /** * Dummy interface for GUI on which this replay overlay shall not be rendered. */ diff --git a/src/main/java/eu/crushedpixel/replaymod/registry/LightingHandler.java b/src/main/java/eu/crushedpixel/replaymod/registry/LightingHandler.java index 77dee4c1..b933bf1b 100644 --- a/src/main/java/eu/crushedpixel/replaymod/registry/LightingHandler.java +++ b/src/main/java/eu/crushedpixel/replaymod/registry/LightingHandler.java @@ -7,12 +7,12 @@ import net.minecraft.client.settings.GameSettings.Options; public class LightingHandler { + private static final Minecraft mc = Minecraft.getMinecraft(); + private static float initialGamma = 0; private static boolean enabled = false; - - //TODO: Properly reset Gamma on game start - //TODO: Properly handle manual gamma changes while in Replay + public static void setLighting(boolean lighting) { if(lighting) { if(!enabled) { @@ -35,4 +35,14 @@ public class LightingHandler { } } + static { + Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { + @Override + public void run() { + mc.gameSettings.gammaSetting = initialGamma; + mc.gameSettings.saveOptions(); + } + }, "lighting-handler-shutdown-hook")); + } + } diff --git a/src/main/java/eu/crushedpixel/replaymod/utils/TooltipRenderer.java b/src/main/java/eu/crushedpixel/replaymod/utils/TooltipRenderer.java index 0926b544..745a69bf 100644 --- a/src/main/java/eu/crushedpixel/replaymod/utils/TooltipRenderer.java +++ b/src/main/java/eu/crushedpixel/replaymod/utils/TooltipRenderer.java @@ -3,6 +3,7 @@ package eu.crushedpixel.replaymod.utils; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiScreen; +import org.lwjgl.util.Point; public class TooltipRenderer extends Gui { @@ -17,8 +18,9 @@ public class TooltipRenderer extends Gui { int screenWidth, screenHeight; if(parent == null) { - screenWidth = mc.displayWidth; - screenHeight = mc.displayHeight; + Point screenDimensions = MouseUtils.getScaledDimensions(); + screenWidth = screenDimensions.getX(); + screenHeight = screenDimensions.getY(); } else { screenWidth = parent.width; screenHeight = parent.height; diff --git a/src/main/resources/assets/replaymod/replay_gui.png b/src/main/resources/assets/replaymod/replay_gui.png index d690c3ce9ce3fa9e996d9573993cc989e87b594e..a3f4b29b848020544fc7f9de869aaa17f6d94ee7 100755 GIT binary patch delta 6351 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 YKk