/**
* Copyright (c) Lambda Innovation, 2013-2016
* This file is part of the AcademyCraft mod.
* https://github.com/LambdaInnovation/AcademyCraft
* Licensed under GPLv3, see project root for more information.
*/
package cn.academy.ability.client.ui;
import cn.academy.ability.api.data.AbilityData;
import cn.academy.ability.api.data.CPData;
import cn.academy.core.Resources;
import cn.lambdalib.annoreg.core.Registrant;
import cn.lambdalib.util.client.HudUtils;
import cn.lambdalib.util.client.RenderUtils;
import cn.lambdalib.util.client.auxgui.AuxGui;
import cn.lambdalib.util.client.auxgui.AuxGuiRegistry.RegAuxGui;
import cn.lambdalib.util.helper.Color;
import cn.lambdalib.util.helper.GameTimer;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
/**
* @author WeAthFolD
*/
@Registrant
@SideOnly(Side.CLIENT)
@RegAuxGui
public class BackgroundMask extends AuxGui {
final ResourceLocation MASK = Resources.preloadMipmapTexture("effects/screen_mask");
final Color CRL_OVERRIDE = new Color().setColor4i(208, 20, 20, 170);
static final double CHANGE_PER_SEC = 1;
double r, g, b, a;
long lastFrame;
@Override
public boolean isForeground() {
return false;
}
@Override
public void draw(ScaledResolution sr) {
long time = GameTimer.getTime();
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
AbilityData aData = AbilityData.get(player);
CPData cpData = CPData.get(player);
double cr, cg, cb, ca;
Color color = null;
if(cpData.isOverloaded()) {
color = CRL_OVERRIDE;
} else if (cpData.isActivated()) {
color = aData.getCategory().getColorStyle();
}
if(color == null) {
cr = r;
cg = g;
cb = b;
ca = 0;
} else {
cr = color.r;
cg = color.g;
cb = color.b;
ca = color.a;
}
if(ca != 0 || a != 0) {
long dt = lastFrame == 0 ? 0 : time - lastFrame;
r = balanceTo(r, cr, dt);
g = balanceTo(g, cg, dt);
b = balanceTo(b, cb, dt);
a = balanceTo(a, ca, dt);
GL11.glColor4d(r, g, b, a);
GL11.glDisable(GL11.GL_ALPHA_TEST);
RenderUtils.loadTexture(MASK);
HudUtils.rect(0, 0, sr.getScaledWidth_double(), sr.getScaledHeight_double());
GL11.glColor4f(1, 1, 1, 1);
GL11.glEnable(GL11.GL_ALPHA_TEST);
} else {
r = cr;
g = cg;
b = cb;
}
lastFrame = time;
}
private double balanceTo(double from, double to, long dt) {
double delta = to - from;
delta = Math.signum(delta) * Math.min(Math.abs(delta), dt / 1000.0 * CHANGE_PER_SEC);
return from + delta;
}
}