mirror of
https://github.com/MineLittlePony/MineLittlePony.git
synced 2025-02-13 16:24:23 +01:00
Update GUI classes
This commit is contained in:
parent
3b1f346426
commit
3c0e7e6047
4 changed files with 118 additions and 111 deletions
|
@ -4,12 +4,12 @@ import net.minecraft.client.gui.GuiScreen;
|
||||||
|
|
||||||
import com.minelittlepony.MineLittlePony;
|
import com.minelittlepony.MineLittlePony;
|
||||||
import com.minelittlepony.client.render.entities.MobRenderers;
|
import com.minelittlepony.client.render.entities.MobRenderers;
|
||||||
import com.minelittlepony.common.client.gui.Checkbox;
|
|
||||||
import com.minelittlepony.common.client.gui.GameGui;
|
import com.minelittlepony.common.client.gui.GameGui;
|
||||||
import com.minelittlepony.common.client.gui.GuiHost;
|
import com.minelittlepony.common.client.gui.GuiHost;
|
||||||
import com.minelittlepony.common.client.gui.IGuiGuest;
|
import com.minelittlepony.common.client.gui.IGuiGuest;
|
||||||
import com.minelittlepony.common.client.gui.Label;
|
import com.minelittlepony.common.client.gui.Label;
|
||||||
import com.minelittlepony.common.client.gui.Slider;
|
import com.minelittlepony.common.client.gui.Slider;
|
||||||
|
import com.minelittlepony.common.client.gui.Toggle;
|
||||||
import com.minelittlepony.settings.PonyConfig;
|
import com.minelittlepony.settings.PonyConfig;
|
||||||
import com.minelittlepony.settings.PonyLevel;
|
import com.minelittlepony.settings.PonyLevel;
|
||||||
import com.minelittlepony.settings.PonyConfig.PonySettings;
|
import com.minelittlepony.settings.PonyConfig.PonySettings;
|
||||||
|
@ -44,28 +44,28 @@ public class GuiPonySettings implements IGuiGuest {
|
||||||
}
|
}
|
||||||
|
|
||||||
host.addButton(new Label(LEFT, row += 15, PONY_LEVEL, -1));
|
host.addButton(new Label(LEFT, row += 15, PONY_LEVEL, -1));
|
||||||
host.addButton(new Slider(LEFT, row += 15, 0, 2, config.getPonyLevel().ordinal(), (int id, String name, float value) -> {
|
host.addButton(new Slider(LEFT, row += 15, 0, 2, config.getPonyLevel().ordinal(), v -> {
|
||||||
return GameGui.format(PONY_LEVEL + "." + PonyLevel.valueFor(value).name().toLowerCase());
|
|
||||||
}, v -> {
|
|
||||||
PonyLevel level = PonyLevel.valueFor(v);
|
PonyLevel level = PonyLevel.valueFor(v);
|
||||||
config.setPonyLevel(level);
|
config.setPonyLevel(level);
|
||||||
return (float)level.ordinal();
|
return (float)level.ordinal();
|
||||||
|
}).setFormatter(value -> {
|
||||||
|
return GameGui.format(PONY_LEVEL + "." + PonyLevel.valueFor(value).name().toLowerCase());
|
||||||
}));
|
}));
|
||||||
|
|
||||||
if (GuiScreen.isCtrlKeyDown() && GuiScreen.isShiftKeyDown()) {
|
if (GuiScreen.isCtrlKeyDown() && GuiScreen.isShiftKeyDown()) {
|
||||||
host.addButton(new Label(LEFT, row += 30, "minelp.debug.scale", -1));
|
host.addButton(new Label(LEFT, row += 30, "minelp.debug.scale", -1));
|
||||||
host.addButton(new Slider(LEFT, row += 15, 0.1F, 3, config.getGlobalScaleFactor(), (int id, String name, float value) -> {
|
host.addButton(new Slider(LEFT, row += 15, 0.1F, 3, config.getGlobalScaleFactor(), v -> {
|
||||||
return GameGui.format("minelp.debug.scale.value", GameGui.format(describeCurrentScale(value)));
|
|
||||||
}, v -> {
|
|
||||||
config.setGlobalScaleFactor(v);
|
config.setGlobalScaleFactor(v);
|
||||||
return config.getGlobalScaleFactor();
|
return config.getGlobalScaleFactor();
|
||||||
|
}).setFormatter(value -> {
|
||||||
|
return GameGui.format("minelp.debug.scale.value", GameGui.format(describeCurrentScale(value)));
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
row += 15;
|
row += 15;
|
||||||
host.addButton(new Label(LEFT, row += 15, OPTIONS_PREFIX + "options", -1));
|
host.addButton(new Label(LEFT, row += 15, OPTIONS_PREFIX + "options", -1));
|
||||||
for (PonySettings i : PonySettings.values()) {
|
for (PonySettings i : PonySettings.values()) {
|
||||||
host.addButton(new Checkbox(LEFT, row += 20, OPTIONS_PREFIX + i.name().toLowerCase(), i.get(), i));
|
host.addButton(new Toggle(LEFT, row += 20, i.get(), OPTIONS_PREFIX + i.name().toLowerCase(), i));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (host.mustScroll()) {
|
if (host.mustScroll()) {
|
||||||
|
@ -76,7 +76,7 @@ public class GuiPonySettings implements IGuiGuest {
|
||||||
|
|
||||||
host.addButton(new Label(RIGHT, row += 15, MOB_PREFIX + "title", -1));
|
host.addButton(new Label(RIGHT, row += 15, MOB_PREFIX + "title", -1));
|
||||||
for (MobRenderers i : MobRenderers.values()) {
|
for (MobRenderers i : MobRenderers.values()) {
|
||||||
host.addButton(new Checkbox(RIGHT, row += 20, MOB_PREFIX + i.name().toLowerCase(), i.get(), i));
|
host.addButton(new Toggle(RIGHT, row += 20, i.get(), MOB_PREFIX + i.name().toLowerCase(), i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,80 +0,0 @@
|
||||||
package com.minelittlepony.common.client.gui;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import net.minecraft.client.Minecraft;
|
|
||||||
import net.minecraft.client.gui.FontRenderer;
|
|
||||||
import net.minecraft.client.resources.I18n;
|
|
||||||
import net.minecraft.util.ResourceLocation;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checkbox that supports a gui action when it changes.
|
|
||||||
*
|
|
||||||
* @author Sollace
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class Checkbox extends Slider implements IGuiTooltipped<Checkbox> {
|
|
||||||
|
|
||||||
protected static final ResourceLocation RECIPE_BOOK = new ResourceLocation("textures/gui/widgets.png");
|
|
||||||
|
|
||||||
private int tipX = 0;
|
|
||||||
private int tipY = 0;
|
|
||||||
|
|
||||||
private List<String> tooltip = null;
|
|
||||||
|
|
||||||
private boolean checked;
|
|
||||||
|
|
||||||
private IGuiCallback<Boolean> switchAction;
|
|
||||||
|
|
||||||
public Checkbox(int x, int y, String displayString, boolean value, IGuiCallback<Boolean> callback) {
|
|
||||||
super(x, y, 0, 1, (value ? 1 : 0), (i, name, v) -> I18n.format(displayString), null);
|
|
||||||
|
|
||||||
checked = value;
|
|
||||||
|
|
||||||
width = 20;
|
|
||||||
height = 20;
|
|
||||||
|
|
||||||
switchAction = callback;
|
|
||||||
action = this::perform;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setSliderValue(float value, boolean notifyResponder) {
|
|
||||||
super.setSliderValue(value >= 0.5F ? 1 : 0, notifyResponder);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected float perform(float v) {
|
|
||||||
boolean value = v >= 0.5F;
|
|
||||||
|
|
||||||
if (value != checked) {
|
|
||||||
checked = switchAction.perform(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
return checked ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Checkbox setTooltip(List<String> tooltip) {
|
|
||||||
this.tooltip = tooltip;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void renderToolTip(Minecraft mc, int mouseX, int mouseY) {
|
|
||||||
if (visible && isMouseOver() && tooltip != null) {
|
|
||||||
mc.currentScreen.drawHoveringText(tooltip, mouseX + tipX, mouseY + tipY);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Checkbox setTooltipOffset(int x, int y) {
|
|
||||||
tipX = x;
|
|
||||||
tipY = y;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void drawCenteredString(FontRenderer fonts, String text, int x, int y, int color) {
|
|
||||||
super.drawString(fonts, text, x + width - 5, y, color);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,49 +1,88 @@
|
||||||
package com.minelittlepony.common.client.gui;
|
package com.minelittlepony.common.client.gui;
|
||||||
|
|
||||||
import net.minecraft.client.gui.GuiSlider;
|
import net.minecraft.client.gui.GuiButton;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import net.minecraft.client.gui.GuiPageButtonList.GuiResponder;
|
import java.util.function.Function;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A slider for sliding.
|
* A slider for sliding.
|
||||||
*
|
*
|
||||||
* @author Sollace
|
* @author Sollace
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
// TODO: They tuk it. I's gone, capt'n!
|
public class Slider extends GuiButton {
|
||||||
public class Slider extends GuiSlider {
|
|
||||||
|
|
||||||
private static Responder callback;
|
private float min;
|
||||||
|
private float max;
|
||||||
|
|
||||||
|
private float value;
|
||||||
|
|
||||||
protected IGuiCallback<Float> action;
|
protected IGuiCallback<Float> action;
|
||||||
|
|
||||||
public Slider(int x, int y, float minIn, float maxIn, float defaultValue, GuiSlider.FormatHelper formatter, IGuiCallback<Float> action) {
|
@Nullable
|
||||||
super(callback = new Responder(), 0, x, y, "", minIn, maxIn, defaultValue, formatter);
|
private Function<Float, String> formatter;
|
||||||
callback.owner = this;
|
|
||||||
callback = null;
|
|
||||||
|
|
||||||
|
public Slider(int x, int y, float min, float max, float value, IGuiCallback<Float> action) {
|
||||||
|
super(0, x, y, "");
|
||||||
|
|
||||||
|
this.min = min;
|
||||||
|
this.max = max;
|
||||||
|
this.value = value;
|
||||||
this.action = action;
|
this.action = action;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final class Responder implements GuiResponder {
|
public Slider setFormatter(@Nonnull Function<Float, String> formatter) {
|
||||||
|
this.formatter = formatter;
|
||||||
|
this.displayString = formatter.apply(getValue());
|
||||||
|
|
||||||
@Nullable
|
return this;
|
||||||
private Slider owner;
|
}
|
||||||
|
|
||||||
@Override
|
public void setValue(float value) {
|
||||||
public void setEntryValue(int id, boolean value) { }
|
value = clamp(value, min, max);
|
||||||
|
value = (value - min) / (max - min);
|
||||||
|
|
||||||
@Override
|
if (value != this.value) {
|
||||||
public void setEntryValue(int id, float value) {
|
this.value = action.perform(value);
|
||||||
if (owner != null) {
|
}
|
||||||
owner.setSliderValue(owner.action.perform(value), false);
|
|
||||||
|
if (formatter != null) {
|
||||||
|
displayString = formatter.apply(getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public float getValue() {
|
||||||
public void setEntryValue(int id, String value) { }
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(double mouseX, double mouseY) {
|
||||||
|
super.onClick(mouseX, mouseY);
|
||||||
|
setValue((float)mouseX - (x + 4) / (float)(width - 8));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDrag(double mouseX, double mouseY, double mouseDX, double mouseDY) {
|
||||||
|
setValue((float)mouseX - (x + 4) / (float)(width - 8));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(int mouseX, int mouseY, float partialTicks) {
|
||||||
|
super.render(mouseX, mouseY, partialTicks);
|
||||||
|
|
||||||
|
int i = hovered ? 2 : 1;
|
||||||
|
drawTexturedModalRect(x + (int)(value * (width - 8)), y, 0, 46 + i * 20, 4, 20);
|
||||||
|
drawTexturedModalRect(x + (int)(value * (width - 8)) + 4, y, 196, 46 + i * 20, 4, 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getHoverState(boolean mouseOver) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected float clamp(float value, float min, float max) {
|
||||||
|
return value < min ? min : value > max ? max : value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
package com.minelittlepony.common.client.gui;
|
||||||
|
|
||||||
|
import net.minecraft.client.gui.GuiButton;
|
||||||
|
|
||||||
|
public class Toggle extends GuiButton {
|
||||||
|
|
||||||
|
private boolean on;
|
||||||
|
|
||||||
|
protected IGuiCallback<Boolean> action;
|
||||||
|
|
||||||
|
public Toggle(int x, int y, boolean value, String label, IGuiCallback<Boolean> callback) {
|
||||||
|
super(0, x, y, 20, 20, label);
|
||||||
|
|
||||||
|
on = value;
|
||||||
|
action = callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getValue() {
|
||||||
|
return on;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(boolean value) {
|
||||||
|
if (value != on) {
|
||||||
|
on = action.perform(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(double mouseX, double mouseY) {
|
||||||
|
super.onClick(mouseX, mouseY);
|
||||||
|
setValue(!on);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(int mouseX, int mouseY, float partialTicks) {
|
||||||
|
super.render(mouseX, mouseY, partialTicks);
|
||||||
|
|
||||||
|
int i = hovered ? 2 : 1;
|
||||||
|
float value = on ? 1 : 0;
|
||||||
|
drawTexturedModalRect(x + (int)(value * (width - 8)), y, 0, 46 + i * 20, 4, 20);
|
||||||
|
drawTexturedModalRect(x + (int)(value * (width - 8)) + 4, y, 196, 46 + i * 20, 4, 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getHoverState(boolean mouseOver) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue