mirror of https://github.com/kami-blue/client
[enhancement] Enum setting displaying (#1661)
This commit is contained in:
parent
aff0e19145
commit
fc2c17dc74
|
@ -1,161 +0,0 @@
|
|||
package me.zeroeightsix.kami.gui.kami.component;
|
||||
|
||||
import me.zeroeightsix.kami.gui.kami.Stretcherlayout;
|
||||
import me.zeroeightsix.kami.gui.rgui.component.Component;
|
||||
import me.zeroeightsix.kami.gui.rgui.component.container.OrganisedContainer;
|
||||
import me.zeroeightsix.kami.gui.rgui.component.use.CheckButton;
|
||||
import me.zeroeightsix.kami.gui.rgui.component.use.Slider;
|
||||
import me.zeroeightsix.kami.gui.rgui.render.theme.Theme;
|
||||
import me.zeroeightsix.kami.module.Module;
|
||||
import me.zeroeightsix.kami.setting.Setting;
|
||||
import me.zeroeightsix.kami.setting.impl.BooleanSetting;
|
||||
import me.zeroeightsix.kami.setting.impl.EnumSetting;
|
||||
import me.zeroeightsix.kami.setting.impl.numerical.DoubleSetting;
|
||||
import me.zeroeightsix.kami.setting.impl.numerical.FloatSetting;
|
||||
import me.zeroeightsix.kami.setting.impl.numerical.IntegerSetting;
|
||||
import me.zeroeightsix.kami.setting.impl.numerical.NumberSetting;
|
||||
import me.zeroeightsix.kami.util.Bind;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* Created by 086 on 6/08/2017.
|
||||
*/
|
||||
public class SettingsPanel extends OrganisedContainer {
|
||||
|
||||
Module module;
|
||||
|
||||
public SettingsPanel(Theme theme, Module module) {
|
||||
super(theme, new Stretcherlayout(1));
|
||||
setAffectLayout(false);
|
||||
this.module = module;
|
||||
prepare();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderChildren() {
|
||||
super.renderChildren();
|
||||
}
|
||||
|
||||
public Module getModule() {
|
||||
return module;
|
||||
}
|
||||
|
||||
private void prepare() {
|
||||
getChildren().clear();
|
||||
if (module == null) {
|
||||
setVisible(false);
|
||||
return;
|
||||
}
|
||||
if (!module.getFullSettingList().isEmpty()) {
|
||||
for (Setting setting : module.getFullSettingList()) {
|
||||
if (!setting.isVisible()) continue;
|
||||
String name = setting.getName();
|
||||
boolean isNumber = setting instanceof NumberSetting;
|
||||
boolean isBoolean = setting instanceof BooleanSetting;
|
||||
boolean isEnum = setting instanceof EnumSetting;
|
||||
|
||||
if (setting.getValue() instanceof Bind) {
|
||||
addChild(new BindButton(setting.getName(), null, module, setting));
|
||||
}
|
||||
|
||||
if (isNumber) {
|
||||
NumberSetting numberSetting = (NumberSetting) setting;
|
||||
boolean isBound = numberSetting.isBound();
|
||||
|
||||
// Terrible terrible bug fix.
|
||||
// I know, these parseDoubles look awful, but any conversions I tried here would end up with weird floating point conversion errors.
|
||||
// This is really the easiest solution..
|
||||
double value = Double.parseDouble(numberSetting.getValue().toString());
|
||||
if (!isBound) {
|
||||
UnboundSlider slider = new UnboundSlider(value, name, setting instanceof IntegerSetting);
|
||||
slider.addPoof(new Slider.SliderPoof<UnboundSlider, Slider.SliderPoof.SliderPoofInfo>() {
|
||||
@Override
|
||||
public void execute(UnboundSlider component, SliderPoofInfo info) {
|
||||
if (setting instanceof IntegerSetting)
|
||||
setting.setValue((int) info.getNewValue());
|
||||
else if (setting instanceof FloatSetting)
|
||||
setting.setValue((float) info.getNewValue());
|
||||
else if (setting instanceof DoubleSetting)
|
||||
setting.setValue(info.getNewValue());
|
||||
setModule(module);
|
||||
}
|
||||
});
|
||||
if (numberSetting.getMax() != null) slider.setMax(numberSetting.getMax().doubleValue());
|
||||
if (numberSetting.getMin() != null) slider.setMin(numberSetting.getMin().doubleValue());
|
||||
addChild(slider);
|
||||
} else {
|
||||
double min = numberSetting.getMin().doubleValue();
|
||||
double max = numberSetting.getMax().doubleValue();
|
||||
double step;
|
||||
if (numberSetting.getStep() != null) step = numberSetting.getStep().doubleValue();
|
||||
else step = Slider.getDefaultStep(min, max);
|
||||
Slider slider = new Slider(
|
||||
value, min, max,
|
||||
step,
|
||||
name,
|
||||
setting instanceof IntegerSetting);
|
||||
slider.addPoof(new Slider.SliderPoof<Slider, Slider.SliderPoof.SliderPoofInfo>() {
|
||||
@Override
|
||||
public void execute(Slider component, SliderPoofInfo info) {
|
||||
if (setting instanceof IntegerSetting)
|
||||
setting.setValue((int) info.getNewValue());
|
||||
else if (setting instanceof FloatSetting)
|
||||
setting.setValue((float) info.getNewValue());
|
||||
else if (setting instanceof DoubleSetting)
|
||||
setting.setValue(info.getNewValue());
|
||||
}
|
||||
});
|
||||
addChild(slider);
|
||||
}
|
||||
} else if (isBoolean) {
|
||||
CheckButton checkButton = new CheckButton(name, null);
|
||||
checkButton.setToggled(((BooleanSetting) setting).getValue());
|
||||
checkButton.addPoof(new CheckButton.CheckButtonPoof<CheckButton, CheckButton.CheckButtonPoof.CheckButtonPoofInfo>() {
|
||||
@Override
|
||||
public void execute(CheckButton checkButton1, CheckButtonPoofInfo info) {
|
||||
if (info.getAction() == CheckButtonPoofInfo.CheckButtonPoofInfoAction.TOGGLE) {
|
||||
setting.setValue(checkButton.isToggled());
|
||||
setModule(module);
|
||||
}
|
||||
}
|
||||
});
|
||||
addChild(checkButton);
|
||||
} else if (isEnum) {
|
||||
Class<? extends Enum> type = ((EnumSetting) setting).clazz;
|
||||
Object[] con = type.getEnumConstants();
|
||||
String[] modes = Arrays.stream(con).map(o -> o.toString().toUpperCase()).toArray(String[]::new);
|
||||
EnumButton enumbutton = new EnumButton(name, null, modes);
|
||||
enumbutton.addPoof(new EnumButton.EnumbuttonIndexPoof<EnumButton, EnumButton.EnumbuttonIndexPoof.EnumbuttonInfo>() {
|
||||
@Override
|
||||
public void execute(EnumButton component, EnumbuttonInfo info) {
|
||||
setting.setValue(con[info.getNewIndex()]);
|
||||
setModule(module);
|
||||
}
|
||||
});
|
||||
enumbutton.setIndex(Arrays.asList(con).indexOf(setting.getValue()));
|
||||
addChild(enumbutton);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (children.isEmpty()) {
|
||||
setVisible(false);
|
||||
return;
|
||||
} else {
|
||||
setVisible(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public void setModule(Module module) {
|
||||
this.module = module;
|
||||
setMinimumWidth((int) (getParent().getWidth() * .9f));
|
||||
prepare();
|
||||
|
||||
setAffectLayout(false);
|
||||
for (Component component : children) {
|
||||
component.setWidth(getWidth() - 10);
|
||||
component.setX(5);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,144 @@
|
|||
package me.zeroeightsix.kami.gui.kami.component
|
||||
|
||||
import me.zeroeightsix.kami.gui.kami.Stretcherlayout
|
||||
import me.zeroeightsix.kami.gui.kami.component.EnumButton.EnumbuttonIndexPoof
|
||||
import me.zeroeightsix.kami.gui.kami.component.EnumButton.EnumbuttonIndexPoof.EnumbuttonInfo
|
||||
import me.zeroeightsix.kami.gui.rgui.component.container.OrganisedContainer
|
||||
import me.zeroeightsix.kami.gui.rgui.component.use.CheckButton
|
||||
import me.zeroeightsix.kami.gui.rgui.component.use.CheckButton.CheckButtonPoof
|
||||
import me.zeroeightsix.kami.gui.rgui.component.use.CheckButton.CheckButtonPoof.CheckButtonPoofInfo
|
||||
import me.zeroeightsix.kami.gui.rgui.component.use.Slider
|
||||
import me.zeroeightsix.kami.gui.rgui.component.use.Slider.SliderPoof
|
||||
import me.zeroeightsix.kami.gui.rgui.component.use.Slider.SliderPoof.SliderPoofInfo
|
||||
import me.zeroeightsix.kami.gui.rgui.render.theme.Theme
|
||||
import me.zeroeightsix.kami.module.Module
|
||||
import me.zeroeightsix.kami.setting.Setting
|
||||
import me.zeroeightsix.kami.setting.impl.BooleanSetting
|
||||
import me.zeroeightsix.kami.setting.impl.EnumSetting
|
||||
import me.zeroeightsix.kami.setting.impl.numerical.DoubleSetting
|
||||
import me.zeroeightsix.kami.setting.impl.numerical.FloatSetting
|
||||
import me.zeroeightsix.kami.setting.impl.numerical.IntegerSetting
|
||||
import me.zeroeightsix.kami.setting.impl.numerical.NumberSetting
|
||||
import me.zeroeightsix.kami.util.Bind
|
||||
import org.kamiblue.commons.utils.DisplayEnum
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
* Created by 086 on 6/08/2017.
|
||||
*/
|
||||
class SettingsPanel(theme: Theme?, module: Module?) : OrganisedContainer(theme, Stretcherlayout(1)) {
|
||||
|
||||
var module: Module? = module
|
||||
set(value) {
|
||||
field = value
|
||||
minimumWidth = (parent.width * .9f).toInt()
|
||||
prepare()
|
||||
setAffectLayout(false)
|
||||
for (component in children) {
|
||||
component.width = width - 10
|
||||
component.x = 5
|
||||
}
|
||||
}
|
||||
|
||||
private fun prepare() {
|
||||
getChildren().clear()
|
||||
val module = module
|
||||
|
||||
if (module == null) {
|
||||
isVisible = false
|
||||
return
|
||||
}
|
||||
|
||||
if (module.fullSettingList.isNotEmpty()) {
|
||||
for (setting in module.fullSettingList) {
|
||||
if (!setting.isVisible) continue
|
||||
val name = setting.name
|
||||
|
||||
if (setting.value is Bind) {
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
addChild(BindButton(setting.name, null, module, setting as Setting<Bind>))
|
||||
|
||||
} else if (setting is NumberSetting<*>) {
|
||||
|
||||
val isBound = setting.isBound
|
||||
|
||||
// Terrible terrible bug fix.
|
||||
// I know, these parseDoubles look awful, but any conversions I tried here would end up with weird floating point conversion errors.
|
||||
// This is really the easiest solution..
|
||||
val value = setting.value.toString().toDouble()
|
||||
if (!isBound) {
|
||||
|
||||
val slider = UnboundSlider(value, name, setting is IntegerSetting)
|
||||
slider.addPoof(object : SliderPoof<UnboundSlider, SliderPoofInfo>() {
|
||||
override fun execute(component: UnboundSlider, info: SliderPoofInfo) {
|
||||
when (setting) {
|
||||
is IntegerSetting -> setting.value = info.newValue.toInt()
|
||||
is FloatSetting -> setting.value = info.newValue.toFloat()
|
||||
is DoubleSetting -> setting.value = info.newValue
|
||||
}
|
||||
}
|
||||
})
|
||||
if (setting.max != null) slider.setMax(setting.max.toDouble())
|
||||
if (setting.min != null) slider.setMin(setting.min.toDouble())
|
||||
addChild(slider)
|
||||
|
||||
} else {
|
||||
|
||||
val min = setting.min.toDouble()
|
||||
val max = setting.max.toDouble()
|
||||
val step = if (setting.step != null) setting.step.toDouble()
|
||||
else Slider.getDefaultStep(min, max)
|
||||
|
||||
val slider = Slider(value, min, max, step, name, setting is IntegerSetting)
|
||||
|
||||
slider.addPoof(object : SliderPoof<Slider, SliderPoofInfo>() {
|
||||
override fun execute(component: Slider, info: SliderPoofInfo) {
|
||||
when (setting) {
|
||||
is IntegerSetting -> setting.value = info.newValue.toInt()
|
||||
is FloatSetting -> setting.value = info.newValue.toFloat()
|
||||
is DoubleSetting -> setting.value = info.newValue
|
||||
}
|
||||
}
|
||||
})
|
||||
addChild(slider)
|
||||
|
||||
}
|
||||
|
||||
} else if (setting is BooleanSetting) {
|
||||
|
||||
val checkButton = CheckButton(name, null)
|
||||
checkButton.isToggled = setting.value
|
||||
checkButton.addPoof(object : CheckButtonPoof<CheckButton, CheckButtonPoofInfo>() {
|
||||
override fun execute(checkButton1: CheckButton, info: CheckButtonPoofInfo) {
|
||||
if (info.action == CheckButtonPoofInfo.CheckButtonPoofInfoAction.TOGGLE) {
|
||||
setting.value = checkButton.isToggled
|
||||
this@SettingsPanel.module = module
|
||||
}
|
||||
}
|
||||
})
|
||||
addChild(checkButton)
|
||||
|
||||
} else if (setting is EnumSetting<*>) {
|
||||
|
||||
val enumClass = setting.clazz
|
||||
val enumValues = enumClass.enumConstants
|
||||
val modes = enumValues.map { if (it is DisplayEnum) it.displayName else it.name }.toTypedArray()
|
||||
val enumButton = EnumButton(name, null, modes)
|
||||
|
||||
enumButton.addPoof(object : EnumbuttonIndexPoof<EnumButton, EnumbuttonInfo>() {
|
||||
override fun execute(component: EnumButton, info: EnumbuttonInfo) {
|
||||
setting.value = enumValues[info.getNewIndex()]
|
||||
this@SettingsPanel.module = module
|
||||
}
|
||||
})
|
||||
|
||||
enumButton.setIndex(enumValues.indexOf(setting.value))
|
||||
addChild(enumButton)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
isVisible = children.isNotEmpty()
|
||||
}
|
||||
}
|
|
@ -23,6 +23,7 @@ import net.minecraft.util.math.Vec3d
|
|||
import net.minecraftforge.client.event.InputUpdateEvent
|
||||
import net.minecraftforge.fml.common.gameevent.InputEvent
|
||||
import net.minecraftforge.fml.common.gameevent.TickEvent
|
||||
import org.kamiblue.commons.utils.DisplayEnum
|
||||
import org.lwjgl.input.Keyboard
|
||||
import kotlin.math.abs
|
||||
import kotlin.math.cos
|
||||
|
@ -35,15 +36,16 @@ import kotlin.math.sin
|
|||
description = "Leave your body and transcend into the realm of the gods"
|
||||
)
|
||||
object Freecam : Module() {
|
||||
private val directionMode = register(Settings.e<FlightMode>("FlightMode", FlightMode.CREATIVE))
|
||||
private val horizontalSpeed = register(Settings.floatBuilder("HorizontalSpeed").withValue(20f).withRange(1f, 50f).withStep(1f))
|
||||
private val verticalSpeed = register(Settings.floatBuilder("VerticalSpeed").withValue(20f).withRange(1f, 50f).withStep(1f).withVisibility { directionMode.value == DirectionMode.CREATIVE })
|
||||
private val verticalSpeed = register(Settings.floatBuilder("VerticalSpeed").withValue(20f).withRange(1f, 50f).withStep(1f).withVisibility { directionMode.value == FlightMode.CREATIVE })
|
||||
private val autoRotate = register(Settings.b("AutoRotate", true))
|
||||
private val arrowKeyMove = register(Settings.b("ArrowKeyMove", true))
|
||||
private val disableOnDisconnect = register(Settings.b("DisconnectDisable", true))
|
||||
private val directionMode = register(Settings.e<DirectionMode>("DirectionMode", DirectionMode.CREATIVE))
|
||||
|
||||
private enum class DirectionMode {
|
||||
CREATIVE, SOURCE
|
||||
private enum class FlightMode(override val displayName: String) : DisplayEnum {
|
||||
CREATIVE("Creative"),
|
||||
THREE_DEE("3D")
|
||||
}
|
||||
|
||||
private var prevThirdPersonViewSetting = -1
|
||||
|
@ -214,7 +216,7 @@ object Freecam : Module() {
|
|||
val yawRad = Math.toRadians(rotationYaw - RotationUtils.getRotationFromVec(Vec3d(moveStrafing.toDouble(), 0.0, moveForward.toDouble())).x)
|
||||
val speed = (horizontalSpeed.value / 20f) * min(abs(moveForward) + abs(moveStrafing), 1f)
|
||||
|
||||
if (directionMode.value == DirectionMode.SOURCE) {
|
||||
if (directionMode.value == FlightMode.THREE_DEE) {
|
||||
val pitchRad = Math.toRadians(rotationPitch.toDouble()) * moveForward
|
||||
motionX = -sin(yawRad) * cos(pitchRad) * speed
|
||||
motionY = -sin(pitchRad) * speed
|
||||
|
|
Loading…
Reference in New Issue