package noppes.npcs.client.gui.global; import java.util.ArrayList; import java.util.List; import java.util.Map; import noppes.npcs.client.gui.util.GuiNPCInterface2; import noppes.npcs.controllers.MagicController; import noppes.npcs.controllers.data.Magic; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; public class GuiMagicMap extends GuiNPCDiagram { private GuiScreen parent; private List magics; // Keep one RenderItem instance. private RenderItem renderItem = new RenderItem(); public GuiMagicMap(GuiScreen parent, int x, int y, int width, int height) { super(x, y, width, height); this.parent = parent; magics = new ArrayList<>(); for (Magic magic : MagicController.getInstance().magics.values()) { magics.add(magic); } setLayout(DiagramLayout.CIRCULAR); } @Override protected List getIcons() { List icons = new ArrayList<>(); for (Magic magic : magics) { icons.add(new MagicIcon(magic)); } return icons; } @Override protected List getConnections() { List conns = new ArrayList<>(); // For each Magic, generate connections from each weakness (attacker) to this magic. for (Magic magic : magics) { if (magic.weaknesses == null) continue; for (Map.Entry entry : magic.weaknesses.entrySet()) { int attackerId = entry.getKey(); float percent = entry.getValue(); String hover = "+" + (int) (percent * 100) + "%"; conns.add(new DiagramConnection(attackerId, magic.id, percent, hover)); } } return conns; } @Override protected void renderIcon(DiagramIcon icon, int posX, int posY, IconRenderState state) { Magic magic = ((MagicIcon) icon).magic; Minecraft mc = Minecraft.getMinecraft(); FontRenderer fontRenderer = mc.fontRenderer; int size = this.iconSize; int iconX = posX - size / 2; int iconY = posY - size / 2; RenderHelper.enableGUIStandardItemLighting(); // Render the icon. if (magic.iconItem != null) { renderItem.renderItemAndEffectIntoGUI(fontRenderer, mc.getTextureManager(), magic.iconItem, iconX, iconY); } else if (magic.iconTexture != null && !magic.iconTexture.isEmpty()) { mc.getTextureManager().bindTexture(new ResourceLocation(magic.iconTexture)); this.drawTexturedModalRect(iconX, iconY, 0, 0, size, size); } else { ItemStack sword = new ItemStack(Items.iron_sword); renderItem.renderItemAndEffectIntoGUI(fontRenderer, mc.getTextureManager(), sword, iconX, iconY); } RenderHelper.disableStandardItemLighting(); // If not highlighted, overlay a translucent black rectangle to simulate dimming. if (state == IconRenderState.NOT_HIGHLIGHTED) { drawRect(iconX, iconY, iconX + size, iconY + size, 0x80202020); } // Reset color. GL11.glColor4f(1f, 1f, 1f, 1f); } @Override protected List getIconTooltip(DiagramIcon icon) { Magic magic = ((MagicIcon) icon).magic; List tooltip = new ArrayList<>(); tooltip.add(magic.getName()); return tooltip; } @Override protected void drawHoveringText(List text, int mouseX, int mouseY, FontRenderer fontRenderer) { if (parent instanceof GuiNPCInterface2) { ((GuiNPCInterface2) parent).renderHoveringText(text, mouseX, mouseY, fontRenderer); } } /** * Override getIconName so that connection tooltips can show Magic names. */ @Override protected String getIconName(DiagramIcon icon) { Magic magic = ((MagicIcon) icon).magic; return magic.getName(); } // Wrap a Magic object as a DiagramIcon. private class MagicIcon extends DiagramIcon { public Magic magic; public MagicIcon(Magic magic) { super(magic.id); this.magic = magic; } } }