Nonlinear subdiv slider
This commit is contained in:
@@ -137,8 +137,8 @@ public class VoxyConfigScreenPages implements ModMenuApi {
|
|||||||
).add(OptionImpl.createBuilder(int.class, storage)
|
).add(OptionImpl.createBuilder(int.class, storage)
|
||||||
.setName(Text.translatable("voxy.config.general.subDivisionSize"))
|
.setName(Text.translatable("voxy.config.general.subDivisionSize"))
|
||||||
.setTooltip(Text.translatable("voxy.config.general.subDivisionSize.tooltip"))
|
.setTooltip(Text.translatable("voxy.config.general.subDivisionSize.tooltip"))
|
||||||
.setControl(opt->new SliderControl(opt, 28, 256, 1, v->Text.literal(Integer.toString(v))))
|
.setControl(opt->new SliderControl(opt, 0, SUBDIV_IN_MAX, 1, v->Text.literal(Integer.toString(Math.round(ln2subDiv(v))))))
|
||||||
.setBinding((s, v)->s.subDivisionSize = v, s -> (int) s.subDivisionSize)
|
.setBinding((s, v) -> s.subDivisionSize = ln2subDiv(v), s -> subDiv2ln(s.subDivisionSize))
|
||||||
.setImpact(OptionImpact.HIGH)
|
.setImpact(OptionImpact.HIGH)
|
||||||
.build()
|
.build()
|
||||||
).add(OptionImpl.createBuilder(int.class, storage)
|
).add(OptionImpl.createBuilder(int.class, storage)
|
||||||
@@ -161,4 +161,23 @@ public class VoxyConfigScreenPages implements ModMenuApi {
|
|||||||
);
|
);
|
||||||
return new OptionPage(Text.translatable("voxy.config.title"), ImmutableList.copyOf(groups));
|
return new OptionPage(Text.translatable("voxy.config.title"), ImmutableList.copyOf(groups));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final int SUBDIV_IN_MAX = 100;
|
||||||
|
private static final double SUBDIV_MIN = 28;
|
||||||
|
private static final double SUBDIV_MAX = 256;
|
||||||
|
private static final double SUBDIV_CONST = Math.log(SUBDIV_MAX/SUBDIV_MIN)/Math.log(2);
|
||||||
|
|
||||||
|
|
||||||
|
//In range is 0->200
|
||||||
|
//Out range is 28->256
|
||||||
|
private static float ln2subDiv(int in) {
|
||||||
|
return (float) (SUBDIV_MIN*Math.pow(2, SUBDIV_CONST*((double)in/SUBDIV_IN_MAX)));
|
||||||
|
}
|
||||||
|
|
||||||
|
//In range is ... any?
|
||||||
|
//Out range is 0->200
|
||||||
|
private static int subDiv2ln(float in) {
|
||||||
|
return (int) (((Math.log(((double)in)/SUBDIV_MIN)/Math.log(2))/SUBDIV_CONST)*SUBDIV_IN_MAX);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user