Package pneumaticCraft.client.render.pneumaticArmor

Source Code of pneumaticCraft.client.render.pneumaticArmor.HUDHandler

package pneumaticCraft.client.render.pneumaticArmor;

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

import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.resources.I18n;
import net.minecraft.client.settings.KeyBinding;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.client.event.MouseEvent;
import net.minecraftforge.client.event.RenderWorldLastEvent;

import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.GL11;

import pneumaticCraft.api.client.IGuiAnimatedStat;
import pneumaticCraft.api.client.pneumaticHelmet.IUpgradeRenderHandler;
import pneumaticCraft.api.item.IPressurizable;
import pneumaticCraft.client.gui.pneumaticHelmet.GuiHelmetMainScreen;
import pneumaticCraft.client.gui.widget.GuiKeybindCheckBox;
import pneumaticCraft.client.render.RenderProgressBar;
import pneumaticCraft.common.CommonHUDHandler;
import pneumaticCraft.common.item.Itemss;
import pneumaticCraft.common.network.NetworkHandler;
import pneumaticCraft.common.network.PacketToggleHelmetFeature;
import pneumaticCraft.lib.Names;
import pneumaticCraft.lib.Sounds;
import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.client.registry.ClientRegistry;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.InputEvent.KeyInputEvent;
import cpw.mods.fml.common.gameevent.TickEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

@SideOnly(Side.CLIENT)
public class HUDHandler{

    private static final String DESCRIPTION_HELMET_OPTIONS = "Pneumatic Helmet Options";
    private static final String DESCRIPTION_HELMET_HACK = "Pneumatic Helmet Hack";
    public KeyBinding keybindOpenOptions, keybindHack;

    private final List<ArmorMessage> messageList = new ArrayList<ArmorMessage>();
    private boolean gaveEmptyWarning;
    private boolean gaveNearlyEmptyWarning;

    private static final HUDHandler INSTANCE = new HUDHandler();

    public static HUDHandler instance(){
        return INSTANCE;
    }

    public IUpgradeRenderHandler getSpecificRenderer(Class<? extends IUpgradeRenderHandler> clazz){
        for(IUpgradeRenderHandler renderHandler : UpgradeRenderHandlerList.instance().upgradeRenderers) {
            if(clazz.isAssignableFrom(renderHandler.getClass())) return renderHandler;
        }
        return null;
    }

    @SubscribeEvent
    public void renderWorldLastEvent(RenderWorldLastEvent event){
        if(!GuiKeybindCheckBox.trackedCheckboxes.get("pneumaticHelmet.upgrade.coreComponents").checked) return;
        Minecraft mc = FMLClientHandler.instance().getClient();
        EntityPlayer player = mc.thePlayer;
        double playerX = player.prevPosX + (player.posX - player.prevPosX) * event.partialTicks;
        double playerY = player.prevPosY + (player.posY - player.prevPosY) * event.partialTicks;
        double playerZ = player.prevPosZ + (player.posZ - player.prevPosZ) * event.partialTicks;

        GL11.glPushMatrix();
        GL11.glTranslated(-playerX, -playerY, -playerZ);
        ItemStack helmetStack = player.inventory.armorInventory[3];
        if(helmetStack != null && helmetStack.getItem() == Itemss.pneumaticHelmet) {
            if(((IPressurizable)helmetStack.getItem()).getPressure(helmetStack) > 0F) {
                CommonHUDHandler comHudHandler = CommonHUDHandler.getHandlerForPlayer(player);
                if(comHudHandler.ticksExisted > comHudHandler.getStartupTime()) {

                    GL11.glDisable(GL11.GL_TEXTURE_2D);

                    for(int i = 0; i < UpgradeRenderHandlerList.instance().upgradeRenderers.size(); i++) {
                        if(comHudHandler.upgradeRenderersInserted[i] && GuiKeybindCheckBox.trackedCheckboxes.get("pneumaticHelmet.upgrade." + UpgradeRenderHandlerList.instance().upgradeRenderers.get(i).getUpgradeName()).checked) UpgradeRenderHandlerList.instance().upgradeRenderers.get(i).render3D(event.partialTicks);
                    }

                    GL11.glEnable(GL11.GL_TEXTURE_2D);

                }
            }
        }
        GL11.glPopMatrix();
    }

    @SubscribeEvent
    public void renderTick(TickEvent.RenderTickEvent event){
        if(event.phase == TickEvent.Phase.END) {
            Minecraft mc = FMLClientHandler.instance().getClient();
            if(mc != null && mc.thePlayer != null) {
                render2D(event.renderTickTime);
            }
        }
    }

    @SubscribeEvent
    public void playerTick(TickEvent.PlayerTickEvent event){
        if(event.phase == TickEvent.Phase.END) {
            Minecraft mc = FMLClientHandler.instance().getClient();
            EntityPlayer player = event.player;
            if(player == mc.thePlayer) {
                ItemStack helmetStack = player.getCurrentArmor(3);
                if(helmetStack != null && helmetStack.getItem() == Itemss.pneumaticHelmet) {
                    if(player.worldObj.isRemote) {
                        update(mc.thePlayer);
                    }
                } else {
                    CommonHUDHandler.getHandlerForPlayer(player).ticksExisted = 0;
                }
            }
        }
    }

    private void render2D(float partialTicks){
        Minecraft minecraft = FMLClientHandler.instance().getClient();
        EntityPlayer player = minecraft.thePlayer;
        ItemStack helmetStack = player.inventory.armorInventory[3];
        if(helmetStack != null && minecraft.inGameHasFocus && helmetStack.getItem() == Itemss.pneumaticHelmet) {
            ScaledResolution sr = new ScaledResolution(minecraft, minecraft.displayWidth, minecraft.displayHeight);
            GL11.glDepthMask(false);
            GL11.glDisable(GL11.GL_CULL_FACE);
            GL11.glDisable(GL11.GL_TEXTURE_2D);
            GL11.glPushMatrix();
            GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT);
            GL11.glColor4d(0, 1, 0, 0.8D);
            CommonHUDHandler comHudHandler = CommonHUDHandler.getHandlerForPlayer(player);
            if(comHudHandler.ticksExisted <= comHudHandler.getStartupTime()) {
                // blockTrackInfo = null;
                gaveEmptyWarning = false;
                gaveNearlyEmptyWarning = false;
                RenderProgressBar.render(sr.getScaledWidth() / 2, 10, sr.getScaledWidth() - 10, 30, -90F, comHudHandler.ticksExisted * 100 / comHudHandler.getStartupTime());
            } else {

                if(comHudHandler.helmetPressure < 0.05F && !gaveEmptyWarning) {
                    addMessage(new ArmorMessage("The helmet is out of air!", new ArrayList<String>(), 100, 0x70FF0000));
                    gaveEmptyWarning = true;
                }
                if(comHudHandler.helmetPressure > 0.2F && comHudHandler.helmetPressure < 0.5F && !gaveNearlyEmptyWarning) {
                    addMessage(new ArmorMessage("The helmet almost out of air!", new ArrayList<String>(), 60, 0x70FF0000));
                    gaveNearlyEmptyWarning = true;
                }
                if(GuiKeybindCheckBox.trackedCheckboxes.get("pneumaticHelmet.upgrade.coreComponents").checked) {
                    for(int i = 0; i < UpgradeRenderHandlerList.instance().upgradeRenderers.size(); i++) {
                        IUpgradeRenderHandler upgradeRenderHandler = UpgradeRenderHandlerList.instance().upgradeRenderers.get(i);
                        if(comHudHandler.upgradeRenderersInserted[i] && GuiKeybindCheckBox.trackedCheckboxes.get("pneumaticHelmet.upgrade." + upgradeRenderHandler.getUpgradeName()).checked) {
                            IGuiAnimatedStat stat = upgradeRenderHandler.getAnimatedStat();
                            if(stat != null) {
                                stat.render(-1, -1, partialTicks);
                            }
                            upgradeRenderHandler.render2D(partialTicks, comHudHandler.helmetPressure > 0F);
                        }
                    }
                }
            }

            // render every item in the list.
            for(ArmorMessage message : messageList) {
                message.renderMessage(minecraft.fontRenderer, partialTicks);
            }

            GL11.glPopMatrix();
            GL11.glEnable(GL11.GL_CULL_FACE);
            GL11.glDepthMask(true);
            GL11.glEnable(GL11.GL_TEXTURE_2D);
            if(comHudHandler.ticksExisted <= comHudHandler.getStartupTime()) minecraft.fontRenderer.drawString(CommonHUDHandler.getHandlerForPlayer().ticksExisted * 100 / comHudHandler.getStartupTime() + "%", sr.getScaledWidth() * 3 / 4 - 8, 16, 0x000000);
        } else if(helmetStack == null) {
            messageList.clear();
        }
    }

    private void update(EntityPlayer player){
        for(ArmorMessage message : messageList) {
            message.getStat().update();
        }
        CommonHUDHandler comHudHandler = CommonHUDHandler.getHandlerForPlayer(player);
        boolean helmetEnabled = GuiKeybindCheckBox.trackedCheckboxes.get("pneumaticHelmet.upgrade.coreComponents").checked;
        if(comHudHandler.ticksExisted == 1) {
            for(IUpgradeRenderHandler handler : UpgradeRenderHandlerList.instance().upgradeRenderers) {
                handler.reset();
            }
            for(int i = 0; i < comHudHandler.upgradeRenderersEnabled.length; i++) {
                NetworkHandler.sendToServer(new PacketToggleHelmetFeature((byte)i, helmetEnabled && GuiKeybindCheckBox.trackedCheckboxes.get("pneumaticHelmet.upgrade." + UpgradeRenderHandlerList.instance().upgradeRenderers.get(i).getUpgradeName()).checked));
            }
        }
        if(comHudHandler.ticksExisted > comHudHandler.getStartupTime() && helmetEnabled) {
            for(int i = 0; i < UpgradeRenderHandlerList.instance().upgradeRenderers.size(); i++) {
                IUpgradeRenderHandler upgradeRenderHandler = UpgradeRenderHandlerList.instance().upgradeRenderers.get(i);
                if(comHudHandler.upgradeRenderersInserted[i] && GuiKeybindCheckBox.trackedCheckboxes.get("pneumaticHelmet.upgrade." + upgradeRenderHandler.getUpgradeName()).checked) {
                    IGuiAnimatedStat stat = upgradeRenderHandler.getAnimatedStat();
                    if(stat != null) {
                        if(comHudHandler.helmetPressure > 0F) {
                            stat.openWindow();
                        } else {
                            stat.closeWindow();
                        }
                        stat.update();
                    }
                    upgradeRenderHandler.update(player, comHudHandler.rangeUpgradesInstalled);
                }
            }
        }
        // clean the list
        for(int i = 0; i < messageList.size(); i++) {
            ArmorMessage message = messageList.get(i);
            if(message == null || --message.lifeSpan <= 0) {
                messageList.remove(i);
                i--;
            }
        }

        for(int i = 0; i < UpgradeRenderHandlerList.instance().upgradeRenderers.size(); i++) {
            if(comHudHandler.ticksExisted == comHudHandler.getStartupTime() / (UpgradeRenderHandlerList.instance().upgradeRenderers.size() + 2) * (i + 1)) {
                player.worldObj.playSound(player.posX, player.posY, player.posZ, Sounds.HUD_INIT, 0.1F, 0.5F + (float)(i + 1) / (UpgradeRenderHandlerList.instance().upgradeRenderers.size() + 2) * 0.5F, true);
                boolean upgradeEnabled = comHudHandler.upgradeRenderersInserted[i];
                addMessage(new ArmorMessage(I18n.format("pneumaticHelmet.upgrade." + UpgradeRenderHandlerList.instance().upgradeRenderers.get(i).getUpgradeName()) + " " + (upgradeEnabled ? "found" : "not installed"), new ArrayList<String>(), 50, upgradeEnabled ? 0x7000AA00 : 0x70FF0000));
            }
        }

        if(comHudHandler.ticksExisted == 1) {
            player.worldObj.playSound(player.posX, player.posY, player.posZ, Sounds.HUD_INIT, 0.1F, 0.5F, true);
            addMessage(new ArmorMessage("Initializing head-up display...", new ArrayList<String>(), 50, 0x7000AA00));
        }

        if(comHudHandler.ticksExisted == comHudHandler.getStartupTime()) {
            player.worldObj.playSound(player.posX, player.posY, player.posZ, Sounds.HUD_INIT_COMPLETE, 0.1F, 1.0F, true);
            addMessage(new ArmorMessage("Initialization complete!", new ArrayList<String>(), 50, 0x7000AA00));
        }
    }

    public void addMessage(String title, List<String> message, int duration, int backColor){
        addMessage(new ArmorMessage(title, message, duration, backColor));
    }

    public void addMessage(ArmorMessage message){
        if(messageList.size() > 0) {
            message.setDependingMessage(messageList.get(messageList.size() - 1).getStat()); //set the depending stat of the new stat to the last stat.
        }
        messageList.add(message);
    }

    @SubscribeEvent
    public void onKeyInput(KeyInputEvent event){
        Minecraft mc = FMLClientHandler.instance().getClient();
        if(mc.inGameHasFocus) {
            if(keybindOpenOptions.isPressed()) {
                ItemStack helmetStack = mc.thePlayer.inventory.armorInventory[3];
                if(helmetStack != null && helmetStack.getItem() == Itemss.pneumaticHelmet) {
                    FMLCommonHandler.instance().showGuiScreen(GuiHelmetMainScreen.getInstance());
                }
            } else if(keybindHack.isPressed() && HackUpgradeRenderHandler.enabledForPlayer(mc.thePlayer)) {
                ((BlockTrackUpgradeHandler)getSpecificRenderer(BlockTrackUpgradeHandler.class)).hack();
                ((EntityTrackUpgradeHandler)getSpecificRenderer(EntityTrackUpgradeHandler.class)).hack();
            }
        }
    }

    public void registerKeyBinds(){
        keybindOpenOptions = new KeyBinding(DESCRIPTION_HELMET_OPTIONS, Keyboard.KEY_F, Names.PNEUMATIC_KEYBINDING_CATEGORY);
        keybindHack = new KeyBinding(DESCRIPTION_HELMET_HACK, Keyboard.KEY_H, Names.PNEUMATIC_KEYBINDING_CATEGORY);
        ClientRegistry.registerKeyBinding(keybindOpenOptions);
        ClientRegistry.registerKeyBinding(keybindHack);
    }

    @SubscribeEvent
    public void onMouseEvent(MouseEvent event){
        boolean isCaptured = false;
        isCaptured = ((BlockTrackUpgradeHandler)getSpecificRenderer(BlockTrackUpgradeHandler.class)).scroll(event);
        if(!isCaptured) isCaptured = ((EntityTrackUpgradeHandler)getSpecificRenderer(EntityTrackUpgradeHandler.class)).scroll(event);
        if(isCaptured) event.setCanceled(true);
    }
}
TOP

Related Classes of pneumaticCraft.client.render.pneumaticArmor.HUDHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.