package haven.res.lib;
import haven.Config;
import haven.Coord;
import haven.Coord3f;
import haven.FastMesh;
import haven.GLState;
import haven.GOut;
import haven.Gob;
import haven.Location;
import haven.Material;
import haven.Material.Colors;
import haven.RenderList;
import haven.Rendered;
import haven.Resource;
import haven.Sprite;
import haven.UI;
import haven.Widget;
import java.awt.Color;
public class HomeTrackerFX extends Sprite {
private static final Location SCALE = Location.scale(new Coord3f(1.2f, 1.2f ,1));
private static final Colors COLORS = new Material.Colors(Color.GREEN);
private static final Location XLATE = Location.xlate(new Coord3f(0,0,2.5f));
static Resource sres = Resource.load("gfx/fx/arrow", 1);
Rendered fx = null;
double ca = 0;
Gob.Overlay curol = null;
public Coord c = null;
public HomeTrackerFX(Owner owner) {
super(owner, sres);
((Gob)owner).ols.add(curol = new Gob.Overlay(this));
}
@Override
public boolean setup(RenderList d) {
if(!Config.hptr || !UI.instance.gui.mainmenu.hpv){
return false;
}
if(fx == null){
FastMesh.MeshRes mres = (FastMesh.MeshRes)sres.layer(FastMesh.MeshRes.class);
this.fx = mres.mat.get().apply(mres.m);
}
if(c != null && ((Gob)owner).rc != null){
Location rot = Location.rot(Coord3f.zu, (float)(((Gob)this.owner).a - this.ca));
d.add(this.fx, GLState.compose(XLATE, SCALE, COLORS, rot));
}
return false;
}
@Override
public boolean tick(int dt) {
if(c != null && ((Gob)owner).rc != null){
ca = ((Gob)owner).rc.angle(c);
}
return false;
}
@Override
public void dispose() {
super.dispose();
((Gob)owner).ols.remove(curol);
}
public static class HTrackWdg extends Widget{
private Widget ptr;
private HomeTrackerFX fx;
private Gob player = null;
private Coord hc;
public HTrackWdg(Widget parent, Widget ptr) {
super(Coord.z, Coord.z, parent);
this.ptr = ptr;
}
@Override
public void uimsg(String msg, Object... args) {
if(msg.equals("upd")){
Coord hc = (Coord) args[0];
this.hc = hc;
if(fx != null){fx.c = hc;}
}
ptr.uimsg(msg, args);
}
@Override
public void draw(GOut g) {
super.draw(g);
Gob gob = ui.sess.glob.oc.getgob(ui.gui.plid);
if(gob != player){
player = gob;
if(fx != null){
fx.dispose();
fx = null;
}
if(player != null){
fx = new HomeTrackerFX(player);
fx.c = hc;
}
}
}
}
}