package joshie.progression.gui.editors.insert;
import joshie.progression.Progression;
import joshie.progression.api.criteria.IRuleProvider;
import joshie.progression.gui.core.FeatureAbstract;
import joshie.progression.gui.core.GuiList;
import net.minecraft.client.renderer.GlStateManager;
import org.lwjgl.opengl.GL11;
import java.util.*;
public abstract class FeatureNew<T> extends FeatureAbstract {
public static boolean IS_OPEN = false;
private final List<IRuleProvider> sorted;
public String text;
public FeatureNew(String text) {
this.text = text;
this.sorted = new ArrayList(getFields());
Collections.sort(this.sorted, new Alphabetical());
}
private static class Alphabetical implements Comparator {
@Override
public int compare(Object o1, Object o2) {
IRuleProvider provider1 = ((IRuleProvider) o1);
IRuleProvider provider2 = ((IRuleProvider) o2);
return provider1.getLocalisedName().compareTo(provider2.getLocalisedName());
}
}
public abstract Collection<T> getFields();
public abstract void clone(T t);
public boolean isValid(T t) {
return true;
}
@Override
public FeatureAbstract init() {
super.init();
setVisibility(false);
return this;
}
@Override
public boolean isOverlay() {
return true;
}
public int getColor() {
return 0xFF333333;
}
@Override
public void drawFeature(int mouseX, int mouseY) {
int maxY = ((sorted.size() - 3) / 2);
GlStateManager.clear(GL11.GL_DEPTH_BUFFER_BIT);
offset.drawRectangle(150, 50, 200, 43 + maxY * 12, 0xFF222222, GuiList.THEME.newBox2);
offset.drawGradient(150, 50, 200, 15, getColor(), 0xFF111111, GuiList.THEME.newBorder);
offset.drawText(Progression.translate("new." + text), 155, 54, GuiList.THEME.newFont);
drawForeground(mouseX, mouseY);
}
public void drawForeground(int mouseX, int mouseY) {
int maxY = ((sorted.size() - 1) / 2);
int yPos = 0;
int xPos = 0;
for (IRuleProvider provider : sorted) {
if (!isValid((T) provider)) continue;
int color = GuiList.THEME.newFont;
if (mouseX >= (xPos * 100) + 155 && mouseX <= (xPos * 100) + 255) {
if (mouseY >= 67 + (yPos * 12) && mouseY < 67 + (yPos * 12) + 12) {
color = 0xFF555555;
}
}
offset.drawText(provider.getLocalisedName(), (xPos * 100) + 155, 67 + (yPos * 12), color);
yPos++;
if (yPos > maxY) {
xPos++;
yPos = 0;
}
}
}
@Override
public boolean mouseClicked(int mouseX, int mouseY, int button) {
int maxY = ((sorted.size() - 1) / 2);
int yPos = 0;
int xPos = 0;
for (IRuleProvider provider : sorted) {
if (!isValid((T) provider)) continue;
if (mouseX >= (xPos * 100) + 155 && mouseX <= (xPos * 100) + 255) {
if (mouseY >= 67 + (yPos * 12) && mouseY < 67 + (yPos * 12) + 12) {
IS_OPEN = false;
clone((T) provider);
setVisibility(false);
return true;
}
}
yPos++;
if (yPos > maxY) {
xPos++;
yPos = 0;
}
}
return false;
}
@Override
public void setVisibility(boolean value) {
super.setVisibility(value);
IS_OPEN = value;
}
}