/*
* This file is part of Matter Overdrive
* Copyright (c) 2015., Simeon Radivoev, All rights reserved.
*
* Matter Overdrive is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Matter Overdrive is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Matter Overdrive. If not, see <http://www.gnu.org/licenses>.
*/
package matteroverdrive.gui;
import matteroverdrive.MatterOverdrive;
import matteroverdrive.Reference;
import matteroverdrive.api.network.MatterNetworkTaskState;
import matteroverdrive.container.ContainerMachine;
import matteroverdrive.container.ContainerReplicator;
import matteroverdrive.container.MOBaseContainer;
import matteroverdrive.data.ItemPattern;
import matteroverdrive.gui.element.*;
import matteroverdrive.gui.pages.PageTasks;
import matteroverdrive.matter_network.tasks.MatterNetworkTaskReplicatePattern;
import matteroverdrive.network.packet.server.PacketRemoveTask;
import matteroverdrive.proxy.ClientProxy;
import matteroverdrive.tile.TileEntityMachineReplicator;
import matteroverdrive.util.MOStringHelper;
import matteroverdrive.util.MatterHelper;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
import java.util.List;
public class GuiReplicator extends MOGuiNetworkMachine<TileEntityMachineReplicator>
{
MOElementEnergy energyElement;
ElementMatterStored matterElement;
ElementDualScaled replicate_progress;
ElementSlot outputSlot;
ElementSlot seccoundOutputSlot;
PageTasks pagePackets;
ElementItemPattern itemPattern;
public GuiReplicator(InventoryPlayer inventoryPlayer,TileEntityMachineReplicator entity)
{
super(new ContainerReplicator(inventoryPlayer,entity),entity);
name = "replicator";
matterElement = new ElementMatterStored(this,141,39,machine.getMatterStorage());
energyElement = new MOElementEnergy(this,167,39,machine.getEnergyStorage());
replicate_progress = new ElementDualScaled(this,32,52);
outputSlot = new ElementInventorySlot(this,this.getContainer().getSlotAt(machine.OUTPUT_SLOT_ID),70,52,22,22,"big");
seccoundOutputSlot = new ElementInventorySlot(this,this.getContainer().getSlotAt(machine.SECOND_OUTPUT_SLOT_ID),96,52,22,22,"big");
itemPattern = new ElementItemPattern(this, entity.getInternalPatternStorage(), "big_main", 37, 22);
slotsList.setPosition(5, 49);
slotsList.addElementAt(0, itemPattern);
replicate_progress.setMode(1);
replicate_progress.setSize(24, 16);
replicate_progress.setTexture(Reference.TEXTURE_ARROW_PROGRESS, 48, 16);
}
@Override
public void initGui() {
super.initGui();
this.addElement(replicate_progress);
pages.get(0).addElement(outputSlot);
pages.get(0).addElement(seccoundOutputSlot);
pages.get(0).addElement(matterElement);
pages.get(0).addElement(energyElement);
AddHotbarPlayerSlots(inventorySlots, this);
AddMainPlayerSlots(inventorySlots, pages.get(0));
}
@Override
public void registerPages(MOBaseContainer container,TileEntityMachineReplicator machine)
{
super.registerPages(container,machine);
pagePackets = new PageTasks(this,10,0,xSize,ySize,machine.getTaskQueue((byte) 0));
pagePackets.setName("Tasks");
AddPage(pagePackets, ClientProxy.holoIcons.getIcon("page_icon_tasks"), MOStringHelper.translateToLocal("gui.tooltip.page.tasks")).setIconColor(Reference.COLOR_MATTER);
}
@Override
protected void renderToolTip(ItemStack stack, int x, int y)
{
List list = stack.getTooltip(this.mc.thePlayer, this.mc.gameSettings.advancedItemTooltips);
for (int k = 0; k < list.size(); ++k)
{
String info = (String)list.get(k);
if (k == 0)
{
list.set(k, stack.getRarity().rarityColor + info);
}
else
{
list.set(k, EnumChatFormatting.GRAY + info);
}
}
FontRenderer font = stack.getItem().getFontRenderer(stack);
drawHoveringText(list, x, y, (font == null ? fontRendererObj : font));
}
@Override
protected void drawGuiContainerBackgroundLayer(float partialTick, int x, int y) {
super.drawGuiContainerBackgroundLayer(partialTick,x,y);
replicate_progress.setQuantity(Math.round(((ContainerMachine)getContainer()).getProgress() * 24));
}
@Override
public void drawGuiContainerForegroundLayer(int mouseX, int mouseY)
{
super.drawGuiContainerForegroundLayer(mouseX, mouseY);
ManageReqiremnetsTooltips();
}
void ManageReqiremnetsTooltips()
{
ItemPattern itemPattern = machine.getInternalPatternStorage();
if(itemPattern != null)
{
ItemStack item = itemPattern.toItemStack(false);
int matterAmount = MatterHelper.getMatterAmountFromItem(item);
matterElement.setDrain(-matterAmount);
energyElement.setEnergyRequired(-(machine.getEnergyDrainMax()));
energyElement.setEnergyRequiredPerTick(-machine.getEnergyDrainPerTick());
}
}
@Override
protected void updateElementInformation()
{
super.updateElementInformation();
MatterNetworkTaskReplicatePattern task = machine.getTaskQueue((byte) 0).peek();
if (task != null && machine.getInternalPatternStorage() != null)
{
itemPattern.setAmount(((ContainerReplicator)inventorySlots).getPatternReplicateCount());
}
else
itemPattern.setAmount(0);
}
@Override
public void handleElementButtonClick(MOElementBase element,String buttonName, int mouseButton)
{
super.handleElementButtonClick(element,buttonName,mouseButton);
if (buttonName.equals("DropTask"))
{
NBTTagCompound tagCompound = new NBTTagCompound();
tagCompound.setInteger("TaskID",mouseButton);
MatterOverdrive.packetPipeline.sendToServer(new PacketRemoveTask(machine,mouseButton,(byte)0, MatterNetworkTaskState.INVALID));
}
}
}