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

@ -8,6 +8,7 @@ import java.time.Duration;
import java.time.LocalDateTime;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
@ -44,10 +45,18 @@ public class ClientTestHelper {
return Minecraft.getInstance().submit(() -> function.apply(Minecraft.getInstance()));
}
private static CompletableFuture<Void> submit(Consumer<Minecraft> consumer) {
return Minecraft.getInstance().submit(() -> consumer.accept(Minecraft.getInstance()));
}
public static <T> T submitAndWait(Function<Minecraft, T> function) {
return submit(function).join();
}
public static void submitConsumerAndWait(Consumer<Minecraft> consumer) {
submit(consumer).join();
}
public static void takeScreenshot(String name) {
AtomicBoolean returned = new AtomicBoolean(false);
submitAndWait(mc -> {

View File

@ -2,6 +2,8 @@ package dev.isxander.controlify.test;
import com.google.common.collect.Lists;
import net.fabricmc.api.ClientModInitializer;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.TitleScreen;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -71,6 +73,7 @@ public class ControlifyAutoTestClient implements ClientModInitializer {
}
waitForLoadingComplete();
submitConsumerAndWait(client -> client.setScreen(new TitleScreen()));
for (var test : postLoadTests) {
success &= wrapTestExecution(test);

View File

@ -11,6 +11,8 @@ import dev.isxander.controlify.controller.joystick.JoystickController;
import dev.isxander.controlify.controller.joystick.JoystickState;
import dev.isxander.controlify.controller.joystick.mapping.JoystickMapping;
import dev.isxander.controlify.controller.joystick.mapping.UnmappedJoystickMapping;
import dev.isxander.controlify.rumble.RumbleCapable;
import dev.isxander.controlify.rumble.RumbleManager;
import java.util.List;
@ -22,6 +24,7 @@ public class FakeController implements JoystickController<JoystickConfig> {
private final ControllerBindings<JoystickState> bindings;
private final JoystickConfig config;
private JoystickState state = JoystickState.EMPTY, prevState = JoystickState.EMPTY;
private final RumbleManager rumbleManager;
private float axisState;
private boolean shouldClearAxisNextTick;
@ -34,6 +37,17 @@ public class FakeController implements JoystickController<JoystickConfig> {
this.id = -JOYSTICK_COUNT;
this.bindings = new ControllerBindings<>(this);
this.config = new JoystickConfig(this);
this.rumbleManager = new RumbleManager(new RumbleCapable() {
@Override
public boolean setRumble(float strongMagnitude, float weakMagnitude) {
return false;
}
@Override
public boolean canRumble() {
return false;
}
});
this.config.calibrated = true;
}
@ -114,6 +128,11 @@ public class FakeController implements JoystickController<JoystickConfig> {
state = JoystickState.EMPTY;
}
@Override
public RumbleManager rumbleManager() {
return rumbleManager;
}
@Override
public JoystickMapping mapping() {
return UnmappedJoystickMapping.INSTANCE;
@ -170,6 +189,11 @@ public class FakeController implements JoystickController<JoystickConfig> {
return true;
}
@Override
public void close() {
JoystickController.super.close();
}
public static class FakeControllerState extends JoystickState {
protected FakeControllerState(JoystickMapping mapping, float axis, boolean button, HatState hat) {
super(mapping, List.of(axis), List.of(axis), List.of(button), List.of(hat));