package joshie.harvest.knowledge.gui.stats.notes.button;
import joshie.harvest.api.knowledge.Note;
import joshie.harvest.api.knowledge.NoteRender;
import joshie.harvest.core.HFTrackers;
import joshie.harvest.core.base.gui.ButtonBook;
import joshie.harvest.core.helpers.StackRenderHelper;
import joshie.harvest.core.lib.HFModInfo;
import joshie.harvest.core.network.PacketHandler;
import joshie.harvest.knowledge.gui.stats.GuiStats;
import joshie.harvest.knowledge.gui.stats.notes.page.PageNotes;
import joshie.harvest.player.packet.PacketMarkRead;
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.SoundHandler;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.util.text.TextFormatting;
import org.lwjgl.opengl.GL11;
import javax.annotation.Nonnull;
public class ButtonNote extends ButtonBook {
private final GuiStats gui;
private final Note note;
private final String title;
private final boolean unlocked;
private boolean read;
@SuppressWarnings("unchecked")
public ButtonNote(GuiStats gui, Note note, int buttonId, int x, int y) {
super(gui, buttonId, x, y, "");
this.gui = gui;
this.width = 16;
this.height = 16;
this.note = note;
this.title = note.isSecret() ? TextFormatting.AQUA + note.getTitle() : note.getTitle();
this.unlocked = HFTrackers.getClientPlayerTracker().getTracking().getLearntNotes().contains(note.getResource());
this.read = HFTrackers.getClientPlayerTracker().getTracking().getReadStatus().contains(note.getResource());
}
@Override
public void drawButton(@Nonnull Minecraft mc, int mouseX, int mouseY) {
if (visible) {
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
hovered = mouseX >= xPosition && mouseY >= yPosition && mouseX < xPosition + width && mouseY < yPosition + height;
mouseDragged(mc, mouseX, mouseY);
if (PageNotes.note.equals(note)) drawRect(xPosition, yPosition, xPosition + width, yPosition + height, 0x559C8C63);
else if (!hovered || !unlocked) drawRect(xPosition, yPosition, xPosition + width, yPosition + height, 0x55B0A483);
else drawRect(xPosition, yPosition, xPosition + width, yPosition + height, 0x55C4B9A2);
drawForeground(mc);
GlStateManager.color(1.0F, 1.0F, 1.0F);
}
}
@Override
public void playPressSound(SoundHandler soundHandlerIn) {
if (unlocked) super.playPressSound(soundHandlerIn);
}
private void drawForeground(@Nonnull Minecraft mc) {
if (note.getGuiResource() != null) {
GlStateManager.color(1F, 1F, 1F);
gui.mc.getTextureManager().bindTexture(note.getGuiResource());
if (unlocked) gui.drawTexturedModalRect(xPosition, yPosition, note.getGuiX(), note.getGuiY(), 16, 16);
else gui.drawTexturedModalRect(xPosition, yPosition, note.getGuiX() + 16, note.getGuiY(), 16, 16);
} else if (note.getIcon() == Note.PAPER) {
GlStateManager.color(1F, 1F, 1F);
gui.mc.getTextureManager().bindTexture(HFModInfo.ICONS);
int xNote = !unlocked ? 32: note.isSecret() ? 16 : 0;
gui.drawTexturedModalRect(xPosition, yPosition, xNote, 32, 16, 16);
} else {
if (unlocked) StackRenderHelper.drawStack(note.getIcon(), xPosition, yPosition, 1F);
else StackRenderHelper.drawGreyStack(note.getIcon(), xPosition, yPosition, 1F);
}
GlStateManager.clear(GL11.GL_DEPTH_BUFFER_BIT);
//Draw new over the icon
if (unlocked && !read) {
boolean unicode = mc.fontRendererObj.getUnicodeFlag();
mc.fontRendererObj.setUnicodeFlag(true);
gui.drawString(mc.fontRendererObj, TextFormatting.BOLD + "NEW", xPosition + 1, yPosition, 0xFFFFFF);
mc.fontRendererObj.setUnicodeFlag(unicode);
}
}
@Override
public void mouseReleased(int mouseX, int mouseY) {
//Now we update the rest
if (unlocked) {
//Mark this note as having been read
if (!read) {
read = true; //Mark as read to update immediately
HFTrackers.getClientPlayerTracker().getTracking().getReadStatus().add(note.getResource());
PacketHandler.sendToServer(new PacketMarkRead(note.getResource()));
}
//Change the page
PageNotes.setNote(note);
NoteRender render = note.getRender();
if (render != null) {
render.initRender(gui.mc, gui, gui.guiLeft, gui.guiTop);
}
}
}
@Override
protected void mouseDragged(Minecraft mc, int mouseX, int mouseY) {
if (hovered && unlocked) gui.addTooltip(title);
}
}