summaryrefslogtreecommitdiff
path: root/src/main/java/jp/plusplus/fbs/render/RendererGameOverlay.java
blob: b5a731c3ded3a49d15c1546aeac365739adaaf5d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
package jp.plusplus.fbs.render;

import com.mojang.realmsclient.gui.ChatFormatting;
import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.common.eventhandler.EventPriority;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import jp.plusplus.fbs.FBS;
import jp.plusplus.fbs.RecipeBladeSpice;
import jp.plusplus.fbs.Registry;
import jp.plusplus.fbs.alchemy.characteristic.CharacteristicBase;
import jp.plusplus.fbs.exprop.FBSEntityProperties;
import jp.plusplus.fbs.item.ItemBookSorcery;
import jp.plusplus.fbs.spirit.ISpiritTool;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemSword;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StatCollector;
import net.minecraftforge.client.GuiIngameForge;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;

import java.util.ArrayList;
import java.util.List;

/**
 * Createdby pluslus_Fon 2015/06/05.
 */
public class RendererGameOverlay {
    public static final ResourceLocation icons = new ResourceLocation(FBS.MODID+":textures/gui/san.png");
    public static Minecraft mc = FMLClientHandler.instance().getClient();

    @SideOnly(Side.CLIENT)
    private static int Count = 0;
    @SideOnly(Side.CLIENT)
    public static boolean renderHUD = false;
    @SideOnly(Side.CLIENT)
    public static boolean renderAria=false;

    @SideOnly(Side.CLIENT)
    @SubscribeEvent(priority = EventPriority.LOWEST)
    public void onRenderGameOverlayEvent(RenderGameOverlayEvent.Pre event) {
        if (event.type == RenderGameOverlayEvent.ElementType.FOOD && mc.playerController.shouldDrawHUD()) {
            renderHUD = true;
        }
        if(event.type==RenderGameOverlayEvent.ElementType.HOTBAR) renderAria=true;
    }

    @SideOnly(Side.CLIENT)
    @SubscribeEvent(priority = EventPriority.LOWEST)
    public void onRenderGameOverlayEvent(RenderGameOverlayEvent.Post event) {
        int width = event.resolution.getScaledWidth();
        int height = event.resolution.getScaledHeight();

        if (renderHUD) {
            renderHUD = false;

            mc.mcProfiler.startSection(FBS.MODID+"-san");
            FMLClientHandler.instance().getClient().getTextureManager().bindTexture(icons);

            int x=width/2-91;
            int y=height - GuiIngameForge.left_height;
            GuiIngameForge.left_height += 10;

            //san
            drawTexturedModalRect(x, y, 0, 0, 24, 8);
            if(mc.thePlayer!=null){
                FBSEntityProperties fbsep=FBSEntityProperties.get(mc.thePlayer);
                int s=fbsep.getSanity();
                int ms=fbsep.get(mc.thePlayer).getMaxSanity();

                for(int i=0;i==0 || s>0;i++){
                    drawTexturedModalRect(x+24+8*(2-i), y, 8 * (s%10), 8, 8, 8);
                    s/=10;
                }
                drawTexturedModalRect(x+24+8*3, y, 24, 0, 8, 8);
                for(int i=0;i==0 || ms>0;i++){
                    drawTexturedModalRect(x+24+8*(5-i), y, 8 * (ms%10), 8, 8, 8);
                    ms/=10;
                }
            }
            mc.mcProfiler.endSection();
            FMLClientHandler.instance().getClient().getTextureManager().bindTexture(Gui.icons);
        }

        if(renderAria){
            renderAria = false;

            mc.mcProfiler.startSection(FBS.MODID+"-aria");
            FMLClientHandler.instance().getClient().getTextureManager().bindTexture(icons);

            //詠唱時間の描画
            if(mc.thePlayer.isUsingItem()){
                ItemStack itemStack=mc.thePlayer.getCurrentEquippedItem();
                if(itemStack!=null && itemStack.getItem() instanceof ItemBookSorcery){
                    int baseX=width/2-33;
                    int baseY=height/2+9;
                    int w=64-(int)(64.f*mc.thePlayer.getItemInUseCount()/itemStack.getMaxItemUseDuration());

                    drawTexturedModalRect(baseX, baseY, 88, 0, 66, 4);
                    if(w>0) drawTexturedModalRect(baseX+1, baseY+1, 89, 4, w, 2);
                }
            }
            mc.mcProfiler.endSection();
            FMLClientHandler.instance().getClient().getTextureManager().bindTexture(Gui.icons);
        }
    }


    @SubscribeEvent
    public void onItemTooltipEvent(ItemTooltipEvent event) {
        ItemStack itemStack = event.itemStack;
        List<String> toolTip = event.toolTip;

        //使用することでSAN値が増減するアイテム
        Registry.ItemSanity isan=Registry.GetItemSanity(event.itemStack);
        if(isan!=null){
            if(isan.max>0) toolTip.add(ChatFormatting.BLUE+StatCollector.translateToLocalFormatted("info.fbs.sanity.add", isan.trial, isan.max));
            else if(isan.max<0) toolTip.add(ChatFormatting.RED+StatCollector.translateToLocalFormatted("info.fbs.sanity.lose", isan.trial, -isan.max));
        }

        //精霊武器
        if(itemStack.getItem() instanceof ISpiritTool){

        }

        //剣と刃薬
        if(itemStack.getItem() instanceof ItemSword){
            NBTTagCompound nbt=itemStack.getTagCompound();
            if(nbt!=null && nbt.hasKey(RecipeBladeSpice.AMOUNT)){
                toolTip.add("[Blade Spice "+nbt.getInteger(RecipeBladeSpice.AMOUNT)+"]");

                ArrayList<CharacteristicBase> cbs=RecipeBladeSpice.getCharacteristics(itemStack);
                for(CharacteristicBase cb : cbs){
                    toolTip.add(cb.getNameColor()+"-"+cb.getLocalizedName()+":"+cb.getLocalizedEffectValue());
                }
            }
        }
    }

    public static void drawTexturedModalRect(int par1, int par2, int par3, int par4, int par5, int par6){
        float zLevel = -90.0F;

        float f = 0.00390625F;
        float f1 = 0.00390625F;
        Tessellator tessellator = Tessellator.instance;
        tessellator.startDrawingQuads();
        tessellator.addVertexWithUV((par1 + 0), (par2 + par6), zLevel, ((par3 + 0) * f), ((par4 + par6) * f1));
        tessellator.addVertexWithUV((par1 + par5), (par2 + par6), zLevel, ((par3 + par5) * f), ((par4 + par6) * f1));
        tessellator.addVertexWithUV((par1 + par5), (par2 + 0), zLevel, ((par3 + par5) * f), ((par4 + 0) * f1));
        tessellator.addVertexWithUV((par1 + 0), (par2 + 0), zLevel, ((par3 + 0) * f), ((par4 + 0) * f1));
        tessellator.draw();
    }
}