aether-legacy/src/main/java/com/gildedgames/the_aether/client/overlay/AetherOverlay.java
2020-12-31 19:09:39 -08:00

301 lines
11 KiB
Java

package com.gildedgames.the_aether.client.overlay;
import com.gildedgames.the_aether.Aether;
import net.minecraft.block.material.Material;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
import com.gildedgames.the_aether.api.player.util.IAetherBoss;
import com.gildedgames.the_aether.blocks.BlocksAether;
import com.gildedgames.the_aether.entities.passive.mountable.EntityMoa;
import com.gildedgames.the_aether.items.ItemsAether;
import com.gildedgames.the_aether.player.PlayerAether;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class AetherOverlay {
private static final ResourceLocation TEXTURE_JUMPS = Aether.locate("textures/gui/jumps.png");
private static final ResourceLocation TEXTURE_COOLDOWN_BAR = Aether.locate("textures/gui/cooldown_bar.png");
private static final ResourceLocation TEXTURE_POISON_VIGNETTE = Aether.locate("textures/blur/poison_vignette.png");
private static final ResourceLocation TEXTURE_CURE_VIGNETTE = Aether.locate("textures/blur/cure_vignette.png");
public static void renderPoison(Minecraft mc) {
PlayerAether playerAether = PlayerAether.get(mc.thePlayer);
if (playerAether.poisonTime > 0) {
ScaledResolution scaledresolution = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
Tessellator tessellator = Tessellator.instance;
float alpha = getPoisonAlpha((float) (playerAether.poisonTime % 50) / 50);
int width = scaledresolution.getScaledWidth();
int height = scaledresolution.getScaledHeight();
GL11.glPushMatrix();
GL11.glEnable(GL11.GL_BLEND);
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glDepthMask(false);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glDisable(GL11.GL_ALPHA_TEST);
GL11.glColor4f(0.5F, 0.5F, 0.5F, alpha);
mc.renderEngine.bindTexture(TEXTURE_POISON_VIGNETTE);
tessellator.startDrawingQuads();
tessellator.addVertexWithUV(0.0D, (double) height, -90.0D, 0.0D, 1.0D);
tessellator.addVertexWithUV((double) width, (double) height, -90.0D, 1.0D, 1.0D);
tessellator.addVertexWithUV((double) width, 0.0D, -90.0D, 1.0D, 0.0D);
tessellator.addVertexWithUV(0.0D, 0.0D, -90.0D, 0.0D, 0.0D);
tessellator.draw();
GL11.glDepthMask(true);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glEnable(GL11.GL_ALPHA_TEST);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glPopMatrix();
}
}
public static void renderCure(Minecraft mc) {
PlayerAether playerAether = PlayerAether.get(mc.thePlayer);
if (playerAether.isCured()) {
ScaledResolution scaledresolution = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
Tessellator tessellator = Tessellator.instance;
float alpha = 0.5F;
int width = scaledresolution.getScaledWidth();
int height = scaledresolution.getScaledHeight();
GL11.glPushMatrix();
GL11.glEnable(GL11.GL_BLEND);
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glDepthMask(false);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glDisable(GL11.GL_ALPHA_TEST);
GL11.glColor4f(0.5F, 0.5F, 0.5F, alpha);
mc.renderEngine.bindTexture(TEXTURE_CURE_VIGNETTE);
tessellator.startDrawingQuads();
tessellator.addVertexWithUV(0.0D, (double) height, -90.0D, 0.0D, 1.0D);
tessellator.addVertexWithUV((double) width, (double) height, -90.0D, 1.0D, 1.0D);
tessellator.addVertexWithUV((double) width, 0.0D, -90.0D, 1.0D, 0.0D);
tessellator.addVertexWithUV(0.0D, 0.0D, -90.0D, 0.0D, 0.0D);
tessellator.draw();
GL11.glDepthMask(true);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glEnable(GL11.GL_ALPHA_TEST);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glPopMatrix();
}
}
public static void renderIronBubble(Minecraft mc) {
ScaledResolution scaledresolution = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
int width = scaledresolution.getScaledWidth();
int height = scaledresolution.getScaledHeight();
GL11.glPushMatrix();
GL11.glEnable(GL11.GL_BLEND);
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glDepthMask(false);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glDisable(GL11.GL_ALPHA_TEST);
mc.renderEngine.bindTexture(Gui.icons);
int bubbleAmount = PlayerAether.get(mc.thePlayer).getAccessoryInventory().getAccessoryCount(new ItemStack(ItemsAether.iron_bubble));
if (mc.playerController.shouldDrawHUD() && mc.thePlayer.isInWater() && mc.thePlayer.isInsideOfMaterial(Material.water)) {
for (int i = 0; i < bubbleAmount; ++i) {
drawTexturedModalRect((width / 2 - 8 * i) + 81, height - 49, 16, 18, 9, 9);
}
}
GL11.glDepthMask(true);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glEnable(GL11.GL_ALPHA_TEST);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glPopMatrix();
}
public static void renderCooldown(Minecraft mc) {
PlayerAether playerInfo = PlayerAether.get(mc.thePlayer);
if (playerInfo.getHammerCooldown() != 0) {
ScaledResolution scaledresolution = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
int cooldownRemaining = (int) ((float) (playerInfo.getHammerCooldown()) / (float) (playerInfo.getHammerMaxCooldown()) * 128F);
int width = scaledresolution.getScaledWidth();
mc.fontRenderer.drawStringWithShadow(playerInfo.getHammerName() + " " + I18n.format("item.notch_hammer.cooldown"), (width / 2) - (mc.fontRenderer.getStringWidth(playerInfo.getHammerName() + " Cooldown") / 2), 32, 0xffffffff);
GL11.glPushMatrix();
GL11.glEnable(GL11.GL_BLEND);
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glDepthMask(false);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glDisable(GL11.GL_ALPHA_TEST);
mc.renderEngine.bindTexture(TEXTURE_COOLDOWN_BAR);
drawTexturedModalRect(width / 2 - 64, 42, 0, 8, 128, 8);
drawTexturedModalRect(width / 2 - 64, 42, 0, 0, cooldownRemaining, 8);
GL11.glDepthMask(true);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glEnable(GL11.GL_ALPHA_TEST);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glPopMatrix();
}
}
public static void renderJumps(Minecraft mc) {
EntityPlayer player = mc.thePlayer;
if (player == null || player.ridingEntity == null || !(player.ridingEntity instanceof EntityMoa)) {
return;
}
ScaledResolution scaledresolution = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
EntityMoa moa = (EntityMoa) (player.ridingEntity);
int width = scaledresolution.getScaledWidth();
GL11.glPushMatrix();
mc.renderEngine.bindTexture(TEXTURE_JUMPS);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
for (int jump = 0; jump < moa.getMaxJumps(); jump++) {
int yPos = 18;
int xPos = ((width / 2) + (jump * 8)) - (moa.getMaxJumps() * 8) / 2;
if (jump < moa.getRemainingJumps()) {
drawTexturedModalRect(xPos, yPos, 0, 0, 9, 11);
} else {
drawTexturedModalRect(xPos, yPos, 10, 0, 9, 11);
}
}
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glPopMatrix();
}
public static void renderAetherPortal(float timeInPortal, ScaledResolution scaledRes) {
if (timeInPortal < 1.0F) {
timeInPortal = timeInPortal * timeInPortal;
timeInPortal = timeInPortal * timeInPortal;
timeInPortal = timeInPortal * 0.8F + 0.2F;
}
GL11.glDisable(GL11.GL_ALPHA_TEST);
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glDepthMask(false);
OpenGlHelper.glBlendFunc(770, 771, 1, 0);
GL11.glColor4f(1.0F, 1.0F, 1.0F, timeInPortal);
IIcon iicon = BlocksAether.aether_portal.getBlockTextureFromSide(1);
Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.locationBlocksTexture);
float f = iicon.getMinU();
float f1 = iicon.getMinV();
float f2 = iicon.getMaxU();
float f3 = iicon.getMaxV();
Tessellator tessellator = Tessellator.instance;
tessellator.startDrawingQuads();
tessellator.addVertexWithUV(0.0D, (double) scaledRes.getScaledHeight(), -90.0D, (double) f, (double) f3);
tessellator.addVertexWithUV((double) scaledRes.getScaledWidth(), (double) scaledRes.getScaledHeight(), -90.0D, (double) f2, (double) f3);
tessellator.addVertexWithUV((double) scaledRes.getScaledWidth(), 0.0D, -90.0D, (double) f2, (double) f1);
tessellator.addVertexWithUV(0.0D, 0.0D, -90.0D, (double) f, (double) f1);
tessellator.draw();
GL11.glDepthMask(true);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glEnable(GL11.GL_ALPHA_TEST);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
}
public static void renderBossHP(Minecraft mc) {
PlayerAether player = PlayerAether.get(mc.thePlayer);
IAetherBoss boss = (IAetherBoss) player.getFocusedBoss();
if (player.getFocusedBoss() != null) {
if (player.getFocusedBoss().getBossHealth() <= 0.0F) {
player.setFocusedBoss(null);
return;
}
//System.out.println(player.getFocusedBoss().getBossHealth());
String bossTitle = boss.getBossName();
ScaledResolution scaledresolution = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
int healthRemaining = (int) (boss.getBossHealth() / boss.getMaxBossHealth() * 256F);
int width = scaledresolution.getScaledWidth();
GL11.glPushMatrix();
mc.fontRenderer.drawStringWithShadow(bossTitle, width / 2 - (mc.fontRenderer.getStringWidth(bossTitle) / 2), 2, 0xffffffff);
mc.renderEngine.bindTexture(Aether.locate("textures/gui/boss_bar.png"));
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
drawTexturedModalRect(width / 2 - 128, 12, 0, 16, 256, 32);
drawTexturedModalRect(width / 2 - 128, 12, 0, 0, healthRemaining, 16);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glPopMatrix();
}
}
public static void drawTexturedModalRect(float x, float y, float u, float v, float width, float height) {
float zLevel = -90.0F;
float var7 = 0.00390625F;
float var8 = 0.00390625F;
Tessellator tessellator = Tessellator.instance;
tessellator.startDrawingQuads();
tessellator.addVertexWithUV((double) (x + 0), (double) (y + height), (double) zLevel, (double) ((float) (u + 0) * var7), (double) ((float) (v + height) * var8));
tessellator.addVertexWithUV((double) (x + width), (double) (y + height), (double) zLevel, (double) ((float) (u + width) * var7), (double) ((float) (v + height) * var8));
tessellator.addVertexWithUV((double) (x + width), (double) (y + 0), (double) zLevel, (double) ((float) (u + width) * var7), (double) ((float) (v + 0) * var8));
tessellator.addVertexWithUV((double) (x + 0), (double) (y + 0), (double) zLevel, (double) ((float) (u + 0) * var7), (double) ((float) (v + 0) * var8));
tessellator.draw();
}
public static float getPoisonAlpha(float f) {
return (f * f) / 5.0F + 0.4F;
}
public static float getCureAlpha(float f) {
return (f * f) / 10.0F + 0.4F;
}
}