1
0
forked from Clones/Controlify

🎮📳 Controller Vibration! (#38)

This commit is contained in:
Xander
2023-04-04 17:17:01 +01:00
committed by GitHub
parent 2bf7cf4792
commit ebbc549e32
32 changed files with 686 additions and 42 deletions

View File

@ -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()