/** * 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.terminal.client; import cn.academy.core.ModuleCoreClient; import cn.lambdalib.annoreg.core.Registrant; import cn.lambdalib.annoreg.mc.RegInitCallback; import cn.lambdalib.cgui.gui.CGui; import cn.lambdalib.cgui.gui.Widget; import cn.lambdalib.cgui.gui.WidgetContainer; import cn.lambdalib.cgui.gui.component.DrawTexture; import cn.lambdalib.cgui.gui.component.ProgressBar; import cn.lambdalib.cgui.gui.component.TextBox; import cn.lambdalib.cgui.gui.event.FrameEvent; import cn.lambdalib.cgui.gui.event.IGuiEventHandler; import cn.lambdalib.cgui.xml.CGUIDocument; import cn.lambdalib.util.client.auxgui.AuxGui; import cn.lambdalib.util.key.KeyManager; import cn.lambdalib.util.mc.PlayerUtils; 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.util.ResourceLocation; /** * @author WeAthFolD */ @Registrant @SideOnly(Side.CLIENT) public class TerminalInstallEffect extends AuxGui { private static final long ANIM_LENGTH = 4000L; private static final long WAIT = 700L; private static final long BLEND_IN = 200L, BLEND_OUT = 200L; private static WidgetContainer loaded; @RegInitCallback private static void __init() { loaded = CGUIDocument.panicRead(new ResourceLocation("academy:guis/terminal_installing.xml")); } CGui gui = new CGui(); public TerminalInstallEffect() { gui.addWidget("main", loaded.getWidget("main").copy()); gui.getWidget("main/progbar").listen(FrameEvent.class, (w, e) -> { double prog = (double) this.getTimeActive() / ANIM_LENGTH; if(this.getTimeActive() >= ANIM_LENGTH + WAIT) { dispose(); TerminalUI.keyHandler.onKeyUp(); PlayerUtils.sendChat(Minecraft.getMinecraft().thePlayer, "ac.terminal.key_hint", KeyManager.getKeyName(ModuleCoreClient.keyManager.getKeyID(TerminalUI.keyHandler))); } if(prog > 1.0) { prog = 1.0; } ProgressBar.get(w).progress = prog; }); Widget main = gui.getWidget("main"); initBlender(main); for(Widget w : main.getDrawList()) initBlender(w); } @Override public boolean isForeground() { return false; } @Override public void draw(ScaledResolution sr) { gui.resize(sr.getScaledWidth_double(), sr.getScaledHeight_double()); gui.draw(); } private void initBlender(Widget w) { w.listen(FrameEvent.class, new IGuiEventHandler<FrameEvent>() { DrawTexture tex = DrawTexture.get(w); TextBox text = TextBox.get(w); ProgressBar bar = ProgressBar.get(w); double texA, textA, barA; { if(tex != null) texA = tex.color.a; if(text != null) textA = text.option.color.a; if(bar != null) barA = bar.color.a; } @Override public void handleEvent(Widget w, FrameEvent event) { double alpha; long dt = getTimeActive(); if(dt < BLEND_IN) { alpha = (double) (dt) / BLEND_IN; } else if(dt > ANIM_LENGTH) { alpha = Math.max(0, 1 - (double) (dt - ANIM_LENGTH) / BLEND_OUT); } else { alpha = 1; } DrawTexture tex = DrawTexture.get(w); TextBox text = TextBox.get(w); ProgressBar bar = ProgressBar.get(w); if(tex != null) tex.color.a = texA * alpha; if(text != null) text.option.color.a = 0.1 + 0.9 * textA * alpha; if(bar != null) bar.color.a = barA * alpha; } }); } }