package haven;
import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
public class VariantsInfo extends ItemInfo.Tip {
public Map<String, float[]> variants;
public VariantsInfo(Owner owner, Map<String, float[]> variants) {
super(owner);
this.variants = variants;
}
@Override
public BufferedImage longtip() {
BufferedImage img = null;
int k = 0;
int n = (variants == null)?0:variants.size();
if(n > 0) {
BufferedImage names[] = new BufferedImage[n];
BufferedImage vals[] = new BufferedImage[n];
int namew = 0, valuew = 0, totalh = 0;
for (Map.Entry<String, float[]> variant : variants.entrySet()) {
String resn = variant.getKey();
float[] mults = variant.getValue();
Resource.Tooltip tt = Resource.load(resn).layer(Resource.tooltip);
names[k] = RichText.render(((tt != null)? tt.t:resn) + ":", 0).img;
String buf = "";
for (int i = 0; i < 4; i++) {
if (i > 0)
buf += ", ";
buf += String.format("$col[%s]{x%.2f}", Tempers.tcolors[i], mults[i]);
}
vals[k] = RichText.render(buf, 0).img;
namew = Math.max(namew, names[k].getWidth());
valuew = Math.max(valuew, vals[k].getWidth());
totalh += names[k].getHeight();
k++;
}
img = TexI.mkbuf(new Coord(namew + 5 + valuew, totalh));
Graphics g = img.getGraphics();
int ch = 0;
for(int i = 0; i < names.length; i++) {
g.drawImage(names[i], 0, ch, null);
g.drawImage(vals[i], namew + 5, ch, null);
ch += names[i].getHeight();
}
}
return img;
}
public static class Data implements ItemData.ITipData {
private Map<String, float[]> vars;
@Override
public Tip create() {
return new VariantsInfo(null, vars);
}
public static class DataAdapter extends TypeAdapter<Data> {
@Override
public void write(JsonWriter writer, Data data) throws IOException {
}
@Override
public Data read(JsonReader reader) throws IOException {
Data data = new Data();
Map<String,float[]> vars = new LinkedHashMap<String, float[]>();
data.vars = vars;
reader.beginObject();
while(reader.hasNext()){
String name = reader.nextName();
float[] mults = new float[4];
int k = 0;
reader.beginArray();
while(reader.hasNext()){
mults[k++] = (float) reader.nextDouble();
}
reader.endArray();
vars.put(name, mults);
}
reader.endObject();
return data;
}
}
}
}