/*
* 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.pages;
import matteroverdrive.MatterOverdrive;
import matteroverdrive.Reference;
import matteroverdrive.api.quest.IQuestReward;
import matteroverdrive.api.quest.QuestStack;
import matteroverdrive.data.quest.rewards.ItemStackReward;
import matteroverdrive.entity.player.MOExtendedProperties;
import matteroverdrive.gui.GuiAndroidHud;
import matteroverdrive.gui.GuiDataPad;
import matteroverdrive.gui.element.*;
import matteroverdrive.gui.element.list.ListElementQuest;
import matteroverdrive.gui.events.IListHandler;
import matteroverdrive.items.DataPad;
import matteroverdrive.network.packet.server.PacketDataPadCommands;
import matteroverdrive.network.packet.server.PacketQuestActions;
import matteroverdrive.util.RenderUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
import java.util.ArrayList;
import java.util.List;
import static org.lwjgl.opengl.GL11.GL_BLEND;
import static org.lwjgl.opengl.GL11.glEnable;
/**
* Created by Simeon on 11/19/2015.
*/
public class PageActiveQuests extends ElementBaseGroup implements IListHandler
{
ItemStack dataPadStack;
MOElementListBox quests;
ElementTextList questInfo;
ElementBaseGroup questRewards;
ElementScrollGroup questInfoGroup;
public PageActiveQuests(GuiDataPad gui, int posX, int posY, int width, int height, String name, MOExtendedProperties extendedProperties)
{
super(gui, posX, posY, width, height);
this.setName(name);
quests = new MOElementListBox(gui,this,posX+22,posY+28,width-44,74);
quests.textColor = Reference.COLOR_HOLO.multiplyWithoutAlpha(0.5f).getColor();
quests.selectedTextColor = Reference.COLOR_HOLO.getColor();
questInfo = new ElementTextList(gui,0,0,width-15,Reference.COLOR_HOLO.getColor(),true);
questRewards = new ElementBaseGroup(gui,8,8,width-15,24);
questRewards.setName("Quest Rewards");
questInfoGroup = new ElementScrollGroup(gui,22,120,width-15,80);
questInfoGroup.addElement(questInfo);
questInfoGroup.addElement(questRewards);
questInfoGroup.setScrollerColor(Reference.COLOR_HOLO.getColor());
loadQuests(extendedProperties);
}
@Override
public FontRenderer getFontRenderer()
{
return Minecraft.getMinecraft().fontRenderer;
}
@Override
public void init()
{
super.init();
addElement(quests);
addElement(questInfoGroup);
}
protected void loadQuests(MOExtendedProperties extendedProperties)
{
quests.clear();
for (QuestStack questStack : extendedProperties.getQuestData().getActiveQuests())
{
quests.add(new ListElementQuest(extendedProperties.getPlayer(),questStack,quests.getWidth()));
}
}
public void refreshQuests(MOExtendedProperties extendedProperties)
{
loadQuests(extendedProperties);
loadSelectedQuestInfo();
}
@Override
public void drawForeground(int mouseX, int mouseY)
{
super.drawForeground(mouseX,mouseY);
glEnable(GL_BLEND);
RenderUtils.applyColorWithAlpha(Reference.COLOR_HOLO,0.2f);
Minecraft.getMinecraft().getTextureManager().bindTexture(GuiAndroidHud.top_element_bg);
RenderUtils.drawPlane(60,sizeY/2 - 10,0,174,11);
}
@Override
public void ListSelectionChange(String name, int selected)
{
if (dataPadStack.getTagCompound() == null)
{
dataPadStack.setTagCompound(new NBTTagCompound());
}
((DataPad)dataPadStack.getItem()).setSelectedActiveQuest(dataPadStack,selected);
questInfoGroup.setScroll(0);
loadSelectedQuestInfo();
MatterOverdrive.packetPipeline.sendToServer(new PacketDataPadCommands(dataPadStack));
}
private void loadSelectedQuestInfo()
{
questInfo.clearLines();
IMOListBoxElement selectedElement = quests.getSelectedElement();
if (selectedElement != null)
{
QuestStack selectedQuest = (QuestStack) selectedElement.getValue();
String info = selectedQuest.getInfo(Minecraft.getMinecraft().thePlayer).replace("/n/","\n");
if (info != null)
{
List<String> list = getFontRenderer().listFormattedStringToWidth(info, sizeX + 60);
for (String s : list)
{
questInfo.addLine(s);
}
questInfo.addLine("");
}
for (int i = 0; i < selectedQuest.getObjectivesCount(Minecraft.getMinecraft().thePlayer); i++)
{
List<String> objectiveLines = MatterOverdrive.questFactory.getFormattedQuestObjective(Minecraft.getMinecraft().thePlayer, selectedQuest, i, sizeX + 60);
questInfo.addLines(objectiveLines);
}
questInfo.addLine("");
questInfo.addLine(EnumChatFormatting.GOLD + String.format("Rewards: +%sxp", selectedQuest.getXP(Minecraft.getMinecraft().thePlayer)));
List<IQuestReward> rewards = new ArrayList<>();
selectedQuest.addRewards(rewards, Minecraft.getMinecraft().thePlayer);
questRewards.getElements().clear();
questRewards.setSize(questRewards.getWidth(), rewards.size() > 0 ? 20 : 0);
for (int i = 0; i < rewards.size(); i++)
{
if (rewards.get(i) instanceof ItemStackReward)
{
ElementItemPreview itemPreview = new ElementItemPreview(gui, i * 20, 1, ((ItemStackReward) rewards.get(i)).getItemStack());
itemPreview.setItemSize(1);
itemPreview.setRenderOverlay(true);
itemPreview.setSize(18, 18);
itemPreview.setDrawTooltip(true);
itemPreview.setBackground(null);
questRewards.addElement(itemPreview);
}
}
if (selectedQuest == null)
{
((GuiDataPad) gui).completeQuestButton.setEnabled(false);
((GuiDataPad) gui).abandonQuestButton.setEnabled(false);
} else
{
((GuiDataPad) gui).completeQuestButton.setEnabled(QuestStack.canComplete(Minecraft.getMinecraft().thePlayer, selectedQuest));
((GuiDataPad) gui).abandonQuestButton.setEnabled(true);
}
} else
{
((GuiDataPad) gui).completeQuestButton.setEnabled(false);
((GuiDataPad) gui).abandonQuestButton.setEnabled(false);
}
}
public void setDataPadStack(ItemStack dataPadStack)
{
this.dataPadStack = dataPadStack;
if (dataPadStack.getTagCompound() != null)
{
quests.setSelectedIndex(((DataPad)dataPadStack.getItem()).getActiveSelectedQuest(dataPadStack));
questInfoGroup.setScroll(dataPadStack.getTagCompound().getShort("QuestInfoScroll"));
loadSelectedQuestInfo();
}
}
public void onGuiClose()
{
if (dataPadStack.hasTagCompound())
{
dataPadStack.getTagCompound().setShort("QuestInfoScroll",(short) questInfoGroup.getScroll());
}
MatterOverdrive.packetPipeline.sendToServer(new PacketDataPadCommands(dataPadStack));
}
@Override
public void handleElementButtonClick(MOElementBase element, String elementName, int mouseButton)
{
super.handleElementButtonClick(element,elementName,mouseButton);
if (elementName.equalsIgnoreCase("complete_quest"))
{
MatterOverdrive.packetPipeline.sendToServer(new PacketQuestActions(PacketQuestActions.QUEST_ACTION_COMPLETE,quests.getSelectedIndex(),Minecraft.getMinecraft().thePlayer));
}
else if (elementName.equalsIgnoreCase("abandon_quest"))
{
MatterOverdrive.packetPipeline.sendToServer(new PacketQuestActions(PacketQuestActions.QUEST_ACTION_ABONDON,quests.getSelectedIndex(),Minecraft.getMinecraft().thePlayer));
}
}
}