package dmillerw.menu.gui; import dmillerw.menu.data.menu.MenuItem; import dmillerw.menu.data.menu.RadialMenu; import dmillerw.menu.data.session.ActionSessionData; import dmillerw.menu.gui.menu.GuiMenuItem; import dmillerw.menu.handler.ClientTickHandler; import dmillerw.menu.handler.ConfigHandler; import dmillerw.menu.helper.AngleHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; /** * @author dmillerw */ public class GuiRadialMenu extends GuiScreen { public static final GuiRadialMenu INSTANCE = new GuiRadialMenu(); public static boolean active = false; public static void activate() { if (Minecraft.getMinecraft().currentScreen == null) { active = true; Minecraft.getMinecraft().displayGuiScreen(INSTANCE); } } public static void deactivate() { active = false; if (Minecraft.getMinecraft().currentScreen == INSTANCE) { Minecraft.getMinecraft().displayGuiScreen(null); } } @Override public void mouseClicked(int mouseX, int mouseY, int button) { if (active && RadialMenu.animationTimer == 0) { double mouseAngle = AngleHelper.getMouseAngle(); mouseAngle -= ClientTickHandler.ANGLE_PER_ITEM / 2; mouseAngle = 360 - mouseAngle; mouseAngle = AngleHelper.correctAngle(mouseAngle); if (!mc.gameSettings.hideGUI) { for (int i = 0; i < RadialMenu.MAX_ITEMS; i++) { double currAngle = ClientTickHandler.ANGLE_PER_ITEM * i; double nextAngle = currAngle + ClientTickHandler.ANGLE_PER_ITEM; currAngle = AngleHelper.correctAngle(currAngle); nextAngle = AngleHelper.correctAngle(nextAngle); boolean mouseIn = mouseAngle > currAngle && mouseAngle < nextAngle; if (mouseIn) { MenuItem menuItem = RadialMenu.getActiveArray()[i]; boolean disabled = menuItem != null && !ActionSessionData.AVAILABLE_ACTIONS.contains(menuItem.clickAction.getClickAction()); if (menuItem != null) { if (isShiftKeyDown() || (ConfigHandler.rightClickToEdit && button == 1)) { deactivate(); GuiStack.push(new GuiMenuItem(i, menuItem)); return; } else { if (!disabled && button == 0) { if (menuItem.clickAction.onClicked()) { deactivate(); return; } } } } else { if (button == 0) { deactivate(); GuiStack.push(new GuiMenuItem(i, menuItem)); return; } } } } } } } @Override public void onGuiClosed() { super.onGuiClosed(); active = false; } @Override public boolean doesGuiPauseGame() { return false; } }