Files
Binnie/src/main/java/binnie/genetics/gui/AnalystPageDatabase.java
T
kordum 730043ba9c Improve code readability in binnie.genetics package
Drop unused (empty) method MachinePackage#register() from all classes
2017-04-27 14:48:45 -07:00

179 lines
7.2 KiB
Java

package binnie.genetics.gui;
import binnie.core.craftgui.CraftGUI;
import binnie.core.craftgui.IWidget;
import binnie.core.craftgui.controls.ControlTextCentered;
import binnie.core.craftgui.controls.ControlTextEdit;
import binnie.core.craftgui.controls.core.Control;
import binnie.core.craftgui.controls.listbox.ControlListBox;
import binnie.core.craftgui.controls.scroll.ControlScrollBar;
import binnie.core.craftgui.controls.scroll.ControlScrollableContent;
import binnie.core.craftgui.events.EventMouse;
import binnie.core.craftgui.geometry.IArea;
import binnie.core.craftgui.geometry.IPoint;
import binnie.core.craftgui.geometry.TextJustification;
import binnie.core.craftgui.minecraft.MinecraftGUI;
import binnie.core.craftgui.resource.minecraft.CraftGUITexture;
import binnie.core.craftgui.window.Panel;
import binnie.core.genetics.BreedingSystem;
import forestry.api.arboriculture.EnumTreeChromosome;
import forestry.api.genetics.IAlleleSpecies;
import forestry.api.genetics.IIndividual;
import net.minecraft.util.EnumChatFormatting;
import java.util.ArrayList;
import java.util.Collection;
public class AnalystPageDatabase extends ControlAnalystPage {
ControlScrollableContent scroll;
boolean isMaster;
public AnalystPageDatabase(IWidget parent, IArea area, BreedingSystem system, boolean isMaster) {
super(parent, area);
scroll = null;
this.isMaster = isMaster;
int cOfSystem = system.getColour();
int cr = (0xFF0000 & cOfSystem) >> 16;
int cg = (0xFF00 & cOfSystem) >> 8;
int cb = 0xFF & cOfSystem;
float brightness = 0.1f * cb / 255.0f + 0.35f * cr / 255.0f + 0.55f * cg / 255.0f;
brightness = 0.3f / brightness;
if (brightness > 1.0f) {
brightness = 1.0f;
}
int newColour = (int) (cr * brightness) * 65536 + (int) (cg * brightness) * 256 + (int) (cb * brightness);
setColor(newColour);
int y = 4;
new ControlTextCentered(this, y, EnumChatFormatting.UNDERLINE + "Registry").setColor(getColor());
y += 16;
new ControlTextEdit(this, 20.0f, y, w() - 40.0f, 16.0f) {
@Override
public void onTextEdit(String value) {
Collection<IAlleleSpecies> options = new ArrayList<>();
getSpecies(system);
for (IAlleleSpecies species : getSpecies(system)) {
if (value != null && value.isEmpty() && !species.getName().toLowerCase().contains(value.toLowerCase())) {
continue;
}
options.add(species);
}
scroll.deleteAllChildren();
scroll.setScrollableContent(getItemScrollList(system, options));
}
@Override
public void onRenderBackground() {
CraftGUI.Render.colour(5592405);
CraftGUI.Render.texture(CraftGUITexture.TabSolid, getArea().inset(1));
CraftGUI.Render.colour(AnalystPageDatabase.this.getColor());
CraftGUI.Render.texture(CraftGUITexture.TabOutline, getArea());
super.renderTextField();
}
};
y += 22;
new Panel(this, 3.0f, y - 1, w() - 6.0f, h() - y - 8.0f + 2.0f, MinecraftGUI.PanelType.TabOutline).setColor(getColor());
boolean textView = false;
Collection<IAlleleSpecies> options = getSpecies(system);
for (IAlleleSpecies species : options) {
String height = system.getAlleleName(EnumTreeChromosome.HEIGHT, system.getIndividual(species.getUID()).getGenome().getActiveAllele(EnumTreeChromosome.HEIGHT));
String fertility = system.getAlleleName(EnumTreeChromosome.FERTILITY, system.getIndividual(species.getUID()).getGenome().getActiveAllele(EnumTreeChromosome.FERTILITY));
String yield = system.getAlleleName(EnumTreeChromosome.YIELD, system.getIndividual(species.getUID()).getGenome().getActiveAllele(EnumTreeChromosome.YIELD));
String sappiness = system.getAlleleName(EnumTreeChromosome.SAPPINESS, system.getIndividual(species.getUID()).getGenome().getActiveAllele(EnumTreeChromosome.SAPPINESS));
String maturation = system.getAlleleName(EnumTreeChromosome.MATURATION, system.getIndividual(species.getUID()).getGenome().getActiveAllele(EnumTreeChromosome.MATURATION));
}
if (textView) {
scroll = new ControlListBox<IAlleleSpecies>(this, 4.0f, y, w() - 8.0f, h() - y - 8.0f - 20.0f, 0.0f) {
@Override
public void initialise() {
super.initialise();
setOptions(options);
}
@Override
public IWidget createOption(IAlleleSpecies v, int y) {
return new Control(getContent(), 0.0f, y, w(), 12.0f) {
IAlleleSpecies value = v;
@Override
public void onRenderBackground() {
CraftGUI.Render.text(getArea(), TextJustification.MiddleCenter, value.getName(), 16777215);
}
};
}
};
} else {
(scroll = new ControlScrollableContent(this, 4.0f, y, w() - 8.0f, h() - y - 8.0f, 0.0f)).setScrollableContent(getItemScrollList(system, options));
}
new ControlScrollBar(this, scroll.x() + scroll.w() - 6.0f, scroll.y() + 3.0f, 3.0f, scroll.h() - 6.0f, scroll) {
@Override
public void onRenderBackground() {
if (!isEnabled()) {
return;
}
CraftGUI.Render.gradientRect(getArea(), 1140850688 + AnalystPageDatabase.this.getColor(), 1140850688 + AnalystPageDatabase.this.getColor());
CraftGUI.Render.solid(getRenderArea(), AnalystPageDatabase.this.getColor());
}
};
}
private IWidget getItemScrollList(BreedingSystem system, Collection<IAlleleSpecies> options) {
return new Control(scroll, 0.0f, 0.0f, scroll.w(), scroll.h()) {
@Override
public void initialise() {
int maxBiomePerLine = (int) ((w() - 4.0f + 2.0f) / 18.0f);
float biomeListX = -6.0f + (w() - (maxBiomePerLine * 18 - 2)) / 2.0f;
int dx = 0;
int dy = 0;
for (IAlleleSpecies species : options) {
IIndividual ind = system.getSpeciesRoot().templateAsIndividual(system.getSpeciesRoot().getTemplate(species.getUID()));
new ControlIndividualDisplay(this, biomeListX + dx, 2 + dy, ind) {
@Override
public void initialise() {
addSelfEventHandler(new EventMouse.Down.Handler() {
@Override
public void onEvent(EventMouse.Down event) {
WindowAnalyst window = (WindowAnalyst) AnalystPageDatabase.this.getSuperParent();
window.setIndividual(ind);
}
});
}
@Override
public void onRenderBackground() {
WindowAnalyst window = (WindowAnalyst) AnalystPageDatabase.this.getSuperParent();
if (window.getIndividual() != null && window.getIndividual().getGenome().getPrimary() == species) {
CraftGUI.Render.colour(15658734);
CraftGUI.Render.texture(CraftGUITexture.TabSolid, getArea().outset(1));
CraftGUI.Render.colour(AnalystPageDatabase.this.getColor());
CraftGUI.Render.texture(CraftGUITexture.TabOutline, getArea().outset(1));
} else if (calculateIsMouseOver()) {
CraftGUI.Render.colour(15658734);
CraftGUI.Render.texture(CraftGUITexture.TabSolid, getArea().outset(1));
}
super.onRenderBackground();
}
};
dx += 18;
if (dx >= 18 * maxBiomePerLine) {
dx = 0;
dy += 18;
}
}
setSize(new IPoint(w(), 4 + dy + 18));
}
};
}
@Override
public String getTitle() {
return "Registry";
}
private Collection<IAlleleSpecies> getSpecies(BreedingSystem system) {
Collection<IAlleleSpecies> species = new ArrayList<>();
species.addAll(isMaster ? system.getAllSpecies() : system.getDiscoveredSpecies(getWindow().getWorld(), getWindow().getPlayer().getGameProfile()));
return species;
}
}