/**
* 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.core.client.ui;
import cn.academy.core.AcademyCraft;
import cn.lambdalib.annoreg.core.Registrant;
import cn.lambdalib.cgui.gui.CGui;
import cn.lambdalib.cgui.gui.Widget;
import cn.lambdalib.util.client.auxgui.AuxGui;
import cn.lambdalib.util.client.auxgui.AuxGuiRegistry.RegAuxGui;
import com.google.common.collect.ImmutableList;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.common.config.Property;
import java.util.ArrayList;
import java.util.List;
/**
* AC global HUD drawing dispatcher.
* @author WeAthFolD
*/
@Registrant
@SideOnly(Side.CLIENT)
public class ACHud extends AuxGui {
@RegAuxGui
public static ACHud instance = new ACHud();
private List<Node> nodes = new ArrayList<>();
private CGui gui = new CGui();
private ACHud() {}
@Override
public boolean isForeground() {
return false;
}
@Override
public void draw(ScaledResolution sr) {
gui.resize(sr.getScaledWidth_double(), sr.getScaledHeight_double());
for(Node n : nodes) {
n.w.transform.doesDraw = n.cond.shows();
}
gui.draw();
}
public void addElement(Widget w, Condition showCondition, String name, Widget preview) {
Node node = new Node(w, showCondition, name, preview);
nodes.add(node);
node.updatePosition();
gui.addWidget(w);
}
public List<Node> getNodes() {
return ImmutableList.copyOf(nodes);
}
public interface Condition {
boolean shows();
}
class Node {
final Widget w;
final Condition cond;
final String name;
final float defaultX, defaultY;
final Widget preview;
public Node(Widget _w, Condition _cond, String _name, Widget _preview) {
w = _w;
cond = _cond;
name = _name;
defaultX = (float) w.transform.x;
defaultY = (float) w.transform.y;
preview = _preview;
}
double[] getPosition() {
return prop().getDoubleList();
}
void updatePosition() {
double[] pos = getPosition();
w.pos(pos[0], pos[1]);
w.dirty = true;
}
void setPosition(double newX, double newY) {
Property prop = prop();
prop.set(new double[] { newX, newY });
updatePosition();
}
private Property prop() {
return conf().get("gui", name, new double[] { defaultX, defaultY });
}
private Configuration conf() {
return AcademyCraft.config;
}
}
}