Compendium GUI - fragments, objects

This commit is contained in:
chylex committed 2014-08-24 17:15:26 +02:00
1 parent de3b3ba335
commit ebe6f8f895
5 files changed
+90 -25

No files matched your search

@@ -6,6 +6,7 @@ import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.client.resources.I18n;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
@@ -14,10 +15,11 @@ import chylex.hee.gui.helpers.AnimatedFloat.Easing;
import chylex.hee.gui.helpers.GuiEndPortalRenderer;
import chylex.hee.gui.helpers.GuiItemRenderHelper;
import chylex.hee.gui.helpers.GuiItemRenderHelper.ITooltipRenderer;
import chylex.hee.item.ItemList;
import chylex.hee.mechanics.compendium.content.KnowledgeCategories;
import chylex.hee.mechanics.compendium.content.type.KnowledgeCategory;
import chylex.hee.mechanics.compendium.content.type.KnowledgeObject;
import chylex.hee.mechanics.compendium.player.PlayerCompendiumData;
import chylex.hee.mechanics.knowledge.util.IGuiItemStackRenderer;
import chylex.hee.system.util.MathUtil;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@@ -25,12 +27,15 @@ import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class GuiEnderCompendium extends GuiScreen implements ITooltipRenderer{
public static final int guiPageTexWidth = 152, guiPageTexHeight = 226;
public static final int guiPageWidth = 126, guiPageHeight = 176, guiLeft = 18, guiTop = 20;
public static final int guiPageWidth = 126, guiPageHeight = 176;
public static final int guiObjectTopY = 400;
public static final RenderItem renderItem = new RenderItem();
public static final ResourceLocation texPage = new ResourceLocation("hardcoreenderexpansion:textures/gui/knowledge_book.png");
private static final ResourceLocation texBack = new ResourceLocation("hardcoreenderexpansion:textures/gui/ender_compendium_back.png");
private static final ItemStack knowledgeFragmentIS = new ItemStack(ItemList.knowledge_fragment);
private static float ptt(float value, float prevValue, float partialTickTime){
return prevValue+(value-prevValue)*partialTickTime;
}
@@ -43,7 +48,9 @@ public class GuiEnderCompendium extends GuiScreen implements ITooltipRenderer{
private float prevOffsetX, prevOffsetY, prevPortalScale;
private int prevMouseX, prevMouseY;
private List<CategoryDisplayElement> categoryElements = new ArrayList<CategoryDisplayElement>();
private List<CategoryDisplayElement> categoryElements = new ArrayList<>();
private List<ObjectDisplayElement> objectElements = new ArrayList<>();
private boolean hasHighlightedCategory = false;
public GuiEnderCompendium(PlayerCompendiumData compendiumData){
this.compendiumData = compendiumData;
@@ -59,17 +66,30 @@ public class GuiEnderCompendium extends GuiScreen implements ITooltipRenderer{
@Override
public void initGui(){
this.portalRenderer = new GuiEndPortalRenderer(this,width-32,height-32,0);
this.portalRenderer = new GuiEndPortalRenderer(this,width-48,height-48,0);
buttonList.add(new GuiButton(0,(width>>1)-110,height-48+21,98,20,I18n.format("gui.back")));
buttonList.add(new GuiButton(4,(width>>1)+12,height-48+21,98,20,I18n.format("gui.done")));
offsetX.set(width>>1);
offsetY.set(height>>1);
}
@Override
protected void actionPerformed(GuiButton button){
if (!(button.enabled && button.visible))return;
if (button.id == 4){
if (button.id == 0){
if (hasHighlightedCategory){
offsetY.startAnimation(offsetY.value(),height>>1);
hasHighlightedCategory = false;
}
else{
mc.displayGuiScreen((GuiScreen)null);
mc.setIngameFocus();
}
}
else if (button.id == 4){
mc.displayGuiScreen((GuiScreen)null);
mc.setIngameFocus();
}
@@ -81,7 +101,9 @@ public class GuiEnderCompendium extends GuiScreen implements ITooltipRenderer{
else if (buttonId == 0){
for(CategoryDisplayElement element:categoryElements){
if (element.isMouseOver(mouseX,mouseY,(int)offsetX.value(),(int)offsetY.value())){
for(KnowledgeObject object:element.category.getAllObjects())objectElements.add(new ObjectDisplayElement(object));
offsetY.startAnimation(offsetY.value(),-guiObjectTopY);
hasHighlightedCategory = true;
return;
}
}
@@ -133,23 +155,50 @@ public class GuiEnderCompendium extends GuiScreen implements ITooltipRenderer{
drawTexturedModalRect(width-d-8,height-d-8,25,25,24,24);
String title = "Hardcore Ender Expansion - Ender Compendium";
fontRendererObj.drawString(title,(width>>1)-(fontRendererObj.getStringWidth(title)>>1),6,4210752);
fontRendererObj.drawString(title,(width>>1)-(fontRendererObj.getStringWidth(title)>>1),14,4210752);
GL11.glEnable(GL11.GL_DEPTH_TEST);
for(CategoryDisplayElement element:categoryElements)element.render(this,(int)offsetX.value(),(int)offsetY.value(),partialTickTime);
float offX = prevOffsetX+(offsetX.value()-prevOffsetX)*partialTickTime;
float offY = prevOffsetY+(offsetY.value()-prevOffsetY)*partialTickTime;
GL11.glPushMatrix();
GL11.glTranslatef(offX,offY,0F);
for(CategoryDisplayElement element:categoryElements)element.render(this,0,0,partialTickTime);
GL11.glPopMatrix();
for(CategoryDisplayElement element:categoryElements){
if (element.isMouseOver(mouseX,mouseY,(int)offsetX.value(),(int)offsetY.value())){
if (element.isMouseOver(mouseX,mouseY,(int)offX,(int)offY)){
GuiItemRenderHelper.drawTooltip(this,fontRendererObj,mouseX,mouseY,element.category.getTooltip());
}
}
offX = prevOffsetX+(offsetX.value()-prevOffsetX)*partialTickTime-(width>>1)+32;
offY = prevOffsetY+(offsetY.value()-prevOffsetY)*partialTickTime+guiObjectTopY+32;
GL11.glPushMatrix();
GL11.glTranslatef(offX,offY,0F);
for(ObjectDisplayElement element:objectElements)element.render(this,0,0,partialTickTime);
GL11.glPopMatrix();
for(ObjectDisplayElement element:objectElements){
if (element.isMouseOver(mouseX,mouseY,(int)offX,(int)offY)){
GuiItemRenderHelper.drawTooltip(this,fontRendererObj,mouseX,mouseY,element.object.getTooltip());
}
}
int tlx = (width>>1)-25, tly = 24;
GL11.glColor3f(1F,1F,1F);
mc.getTextureManager().bindTexture(texBack);
drawTexturedModalRect(tlx,tly,56,0,56,20);
RenderHelper.enableGUIStandardItemLighting();
renderItem.renderItemIntoGUI(fontRendererObj,mc.getTextureManager(),knowledgeFragmentIS,tlx+3,tly+1);
String pointAmount = String.valueOf(compendiumData.getPoints());
fontRendererObj.drawString(pointAmount,tlx+52-fontRendererObj.getStringWidth(pointAmount),tly+6,4210752);
prevMouseX = mouseX;
prevMouseY = mouseY;
offsetX.set(width>>1);
offsetY.set(height>>1);
}
@Override
@@ -158,7 +207,7 @@ public class GuiEnderCompendium extends GuiScreen implements ITooltipRenderer{
GL11.glDepthFunc(GL11.GL_GEQUAL);
GL11.glPushMatrix();
GL11.glTranslatef(0F,0F,-200F);
portalRenderer.draw(ptt(offsetX.value(),prevOffsetX,partialTickTime),ptt(offsetY.value(),prevOffsetY,partialTickTime),ptt(portalScale.value(),prevPortalScale,partialTickTime));
portalRenderer.draw(ptt(offsetX.value(),prevOffsetX,partialTickTime),-ptt(offsetY.value(),prevOffsetY,partialTickTime),ptt(portalScale.value(),prevPortalScale,partialTickTime));
GL11.glDepthFunc(GL11.GL_LEQUAL);
GL11.glEnable(GL11.GL_CULL_FACE);
renderScreen(mouseX,mouseY,partialTickTime);
@@ -184,19 +233,25 @@ public class GuiEnderCompendium extends GuiScreen implements ITooltipRenderer{
drawGradientRect(x1,y1,x2,y2,color1,color2);
}
private static class RegistrationDisplayElement{
private final IGuiItemStackRenderer element;
private static class ObjectDisplayElement{
private final KnowledgeObject<?> object;
public RegistrationDisplayElement(IGuiItemStackRenderer element){
this.element = element;
public ObjectDisplayElement(KnowledgeObject<?> object){
this.object = object;
}
public void render(GuiScreen gui, int offsetX, int offsetY, float partialTickTime){
public void render(GuiScreen gui, float offsetX, float offsetY, float partialTickTime){
RenderHelper.disableStandardItemLighting();
gui.mc.getTextureManager().bindTexture(texBack);
gui.drawTexturedModalRect(element.getX()-3+offsetX,element.getY()-3+offsetY,0,50,22,22);
gui.drawTexturedModalRect((int)(object.getX()-3+offsetX),(int)(object.getY()-2+offsetY),0,50,22,22);
RenderHelper.enableGUIStandardItemLighting();
renderItem.renderItemIntoGUI(gui.mc.fontRenderer,gui.mc.getTextureManager(),element.getItemStack(),element.getX()+offsetX,element.getY()+offsetY);
renderItem.renderItemIntoGUI(gui.mc.fontRenderer,gui.mc.getTextureManager(),object.getItemStack(),(int)(object.getX()+offsetX),(int)(object.getY()+offsetY+1));
RenderHelper.disableStandardItemLighting();
}
public boolean isMouseOver(int mouseX, int mouseY, int offsetX, int offsetY){
int x = object.getX()+offsetX, y = object.getY()+offsetY;
return mouseX >= x-2 && mouseY >= y-1 && mouseX <= x+18 && mouseY <= y+18;
}
}
@@ -217,15 +272,15 @@ public class GuiEnderCompendium extends GuiScreen implements ITooltipRenderer{
alpha.update(0.05F);
}
public void render(GuiScreen gui, int offsetX, int offsetY, float partialTickTime){
public void render(GuiScreen gui, float offsetX, float offsetY, float partialTickTime){
RenderHelper.disableStandardItemLighting();
GL11.glColor4f(1F,1F,1F,prevAlpha+(alpha.value()-prevAlpha)*partialTickTime);
gui.mc.getTextureManager().bindTexture(texBack);
gui.drawTexturedModalRect(category.getX()+offsetX+2,category.getY()+offsetY,23,50,40,40);
gui.drawTexturedModalRect((int)(category.getX()+offsetX+2),(int)(category.getY()+offsetY),23,50,40,40);
GL11.glPushMatrix();
GL11.glScalef(0.5F,0.5F,1F);
gui.drawTexturedModalRect(2*(category.getX()+offsetX+8),2*(category.getY()+offsetY+4),(category.id%4)*56,194-62*(category.id>>2),56,62);
gui.drawTexturedModalRect((int)(2*(category.getX()+offsetX+8)),(int)(2*(category.getY()+offsetY+4)),(category.id%4)*56,194-62*(category.id>>2),56,62);
GL11.glPopMatrix();
GL11.glColor4f(1F,1F,1F,1F);
@@ -6,7 +6,8 @@ import chylex.hee.mechanics.compendium.content.type.KnowledgeFragmentText;
import chylex.hee.mechanics.compendium.content.type.KnowledgeObject;
public final class KnowledgeRegistrations{
public static final KnowledgeObject<ObjectBlock> TEST_OBJECT = new KnowledgeObject<>(new ObjectBlock(Blocks.bedrock));
public static final KnowledgeObject<ObjectBlock>
TEST_OBJECT = new KnowledgeObject<>(new ObjectBlock(Blocks.bedrock));
public static void initialize(){
KnowledgeCategories.OVERWORLD.addKnowledgeObjects(new KnowledgeObject[]{
@@ -1,6 +1,7 @@
package chylex.hee.mechanics.compendium.content.type;
import java.util.ArrayList;
import java.util.List;
import com.google.common.collect.ImmutableList;
import net.minecraft.item.ItemStack;
import chylex.hee.mechanics.knowledge.util.IGuiItemStackRenderer;
@@ -12,6 +13,7 @@ public class KnowledgeCategory implements IGuiItemStackRenderer{
private final String tooltip;
private final ItemStack showcaseItem;
private final List<KnowledgeObject> objectList = new ArrayList<>();
private ImmutableList<KnowledgeObject> objectListImmutable;
public KnowledgeCategory(int id, int x, int y, String tooltip, ItemStack showcaseItem){
this.id = (byte)id;
@@ -23,6 +25,11 @@ public class KnowledgeCategory implements IGuiItemStackRenderer{
public void addKnowledgeObjects(KnowledgeObject[] objects){
for(KnowledgeObject object:objects)objectList.add(object);
objectListImmutable = ImmutableList.copyOf(objectList);
}
public ImmutableList<KnowledgeObject> getAllObjects(){
return objectListImmutable;
}
@Override
@@ -1,5 +1,7 @@
package chylex.hee.mechanics.compendium.events;
import chylex.hee.mechanics.compendium.player.PlayerCompendiumData;
import chylex.hee.packets.PacketPipeline;
import chylex.hee.packets.client.C19CompendiumData;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.EntityEvent;
@@ -37,6 +39,6 @@ public final class CompendiumEvents{
@SubscribeEvent
public void onPlayerLogin(PlayerLoggedInEvent e){
// TODO send compendium packet
PacketPipeline.sendToPlayer(e.player,new C19CompendiumData(e.player));
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB