forked from Clones/Controlify
🎮📳 Controller Vibration! (#38)
This commit is contained in:
@ -15,6 +15,8 @@ import dev.isxander.controlify.controller.joystick.SingleJoystickController;
|
||||
import dev.isxander.controlify.controller.joystick.JoystickState;
|
||||
import dev.isxander.controlify.gui.screen.ControllerDeadzoneCalibrationScreen;
|
||||
import dev.isxander.controlify.reacharound.ReachAroundMode;
|
||||
import dev.isxander.controlify.rumble.RumbleEffect;
|
||||
import dev.isxander.controlify.rumble.RumbleState;
|
||||
import dev.isxander.yacl.api.*;
|
||||
import dev.isxander.yacl.gui.controllers.ActionController;
|
||||
import dev.isxander.yacl.gui.controllers.BooleanController;
|
||||
@ -46,6 +48,8 @@ public class YACLHelper {
|
||||
.title(Component.literal("Controlify"))
|
||||
.save(() -> controlify.config().save());
|
||||
|
||||
Option<Boolean> globalVibrationOption;
|
||||
|
||||
var globalSettings = Controlify.instance().config().globalSettings();
|
||||
var globalCategory = ConfigCategory.createBuilder()
|
||||
.name(Component.translatable("controlify.gui.category.global"))
|
||||
@ -55,6 +59,14 @@ public class YACLHelper {
|
||||
.binding(Controlify.instance().currentController(), () -> Controlify.instance().currentController(), v -> Controlify.instance().setCurrentController(v))
|
||||
.controller(opt -> new CyclingListController<>(opt, Iterables.concat(List.of(Controller.DUMMY), Controller.CONTROLLERS.values().stream().filter(Controller::canBeUsed).toList()), c -> Component.literal(c == Controller.DUMMY ? "Disabled" : c.name())))
|
||||
.build())
|
||||
.option(globalVibrationOption = Option.createBuilder(boolean.class)
|
||||
.name(Component.translatable("controlify.gui.load_vibration_natives"))
|
||||
.tooltip(Component.translatable("controlify.gui.load_vibration_natives.tooltip"))
|
||||
.tooltip(Component.translatable("controlify.gui.load_vibration_natives.tooltip.warning").withStyle(ChatFormatting.RED))
|
||||
.binding(GlobalSettings.DEFAULT.loadVibrationNatives, () -> globalSettings.loadVibrationNatives, v -> globalSettings.loadVibrationNatives = v)
|
||||
.controller(opt -> new BooleanController(opt, BooleanController.YES_NO_FORMATTER, false))
|
||||
.flag(OptionFlag.GAME_RESTART)
|
||||
.build())
|
||||
.option(Option.createBuilder(ReachAroundMode.class)
|
||||
.name(Component.translatable("controlify.gui.reach_around"))
|
||||
.tooltip(Component.translatable("controlify.gui.reach_around.tooltip"))
|
||||
@ -84,13 +96,13 @@ public class YACLHelper {
|
||||
yacl.category(globalCategory.build());
|
||||
|
||||
for (var controller : Controller.CONTROLLERS.values()) {
|
||||
yacl.category(createControllerCategory(controller));
|
||||
yacl.category(createControllerCategory(controller, globalVibrationOption));
|
||||
}
|
||||
|
||||
return yacl.build().generateScreen(parent);
|
||||
}
|
||||
|
||||
private static ConfigCategory createControllerCategory(Controller<?, ?> controller) {
|
||||
private static ConfigCategory createControllerCategory(Controller<?, ?> controller, Option<Boolean> globalVibrationOption) {
|
||||
if (!controller.canBeUsed()) {
|
||||
return PlaceholderCategory.createBuilder()
|
||||
.name(Component.literal(controller.name()))
|
||||
@ -141,6 +153,13 @@ public class YACLHelper {
|
||||
.binding(def.autoJump, () -> config.autoJump, v -> config.autoJump = v)
|
||||
.controller(BooleanController::new)
|
||||
.build())
|
||||
.option(Option.createBuilder(boolean.class)
|
||||
.name(Component.translatable("controlify.gui.allow_vibrations"))
|
||||
.tooltip(Component.translatable("controlify.gui.allow_vibrations.tooltip"))
|
||||
.binding(globalVibrationOption.pendingValue(), () -> config.allowVibrations && globalVibrationOption.pendingValue(), v -> config.allowVibrations = v)
|
||||
.available(globalVibrationOption.pendingValue())
|
||||
.controller(TickBoxController::new)
|
||||
.build())
|
||||
.option(Option.createBuilder(boolean.class)
|
||||
.name(Component.translatable("controlify.gui.show_ingame_guide"))
|
||||
.tooltip(Component.translatable("controlify.gui.show_ingame_guide.tooltip"))
|
||||
@ -166,9 +185,9 @@ public class YACLHelper {
|
||||
.controller(opt -> new FloatSliderController(opt, 0f, 0.8f, 0.1f, percentFormatter))
|
||||
.build())
|
||||
.option(Option.createBuilder(boolean.class)
|
||||
.name(Component.translatable("controlify.gui.reduce_bow_sensitivity"))
|
||||
.tooltip(Component.translatable("controlify.gui.reduce_bow_sensitivity.tooltip"))
|
||||
.binding(def.reduceBowSensitivity, () -> config.reduceBowSensitivity, v -> config.reduceBowSensitivity = v)
|
||||
.name(Component.translatable("controlify.gui.reduce_aiming_sensitivity"))
|
||||
.tooltip(Component.translatable("controlify.gui.reduce_aiming_sensitivity.tooltip"))
|
||||
.binding(def.reduceAimingSensitivity, () -> config.reduceAimingSensitivity, v -> config.reduceAimingSensitivity = v)
|
||||
.controller(TickBoxController::new)
|
||||
.build());
|
||||
|
||||
@ -268,7 +287,21 @@ public class YACLHelper {
|
||||
.tooltip(Component.translatable("controlify.gui.button_activation_threshold.tooltip"))
|
||||
.binding(def.buttonActivationThreshold, () -> config.buttonActivationThreshold, v -> config.buttonActivationThreshold = v)
|
||||
.controller(opt -> new FloatSliderController(opt, 0, 1, 0.05f, v -> Component.literal(String.format("%.0f%%", v*100))))
|
||||
.build());
|
||||
.build())
|
||||
.option(ButtonOption.createBuilder()
|
||||
.name(Component.translatable("controlify.gui.test_vibration"))
|
||||
.tooltip(Component.translatable("controlify.gui.test_vibration.tooltip"))
|
||||
.controller(ActionController::new)
|
||||
.action((screen, btn) -> {
|
||||
controller.rumbleManager().play(
|
||||
RumbleEffect.byTime(t -> new RumbleState(0f, t), 20)
|
||||
.join(RumbleEffect.byTime(t -> new RumbleState(0f, 1 - t), 20))
|
||||
.repeat(3)
|
||||
.join(RumbleEffect.constant(1f, 0f, 5).join(RumbleEffect.constant(0f, 1f, 5)).repeat(10))
|
||||
);
|
||||
})
|
||||
.build());;
|
||||
|
||||
category.group(advancedGroup.build());
|
||||
|
||||
var controlsGroup = OptionGroup.createBuilder()
|
||||
|
Reference in New Issue
Block a user