1
0
forked from Clones/Controlify

server support

This commit is contained in:
isXander
2023-06-11 20:25:55 +01:00
parent d81e0dabf8
commit 5d4cc1232d
40 changed files with 599 additions and 112 deletions

View File

@ -3,7 +3,6 @@ package dev.isxander.controlify.controller.joystick;
import com.google.common.collect.ImmutableList;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import dev.isxander.controlify.Controlify;
import dev.isxander.controlify.bindings.ControllerBindings;
import dev.isxander.controlify.controller.ControllerType;
import dev.isxander.controlify.controller.hid.ControllerHIDService;
@ -12,6 +11,7 @@ import dev.isxander.controlify.controller.joystick.mapping.RPJoystickMapping;
import dev.isxander.controlify.rumble.RumbleCapable;
import dev.isxander.controlify.rumble.RumbleManager;
import dev.isxander.controlify.rumble.RumbleSource;
import dev.isxander.controlify.utils.Log;
import org.lwjgl.glfw.GLFW;
import java.util.List;
@ -106,7 +106,7 @@ public class CompoundJoystickController implements JoystickController<JoystickCo
if (newConfig != null) {
this.config = newConfig;
} else {
Controlify.LOGGER.error("Could not set config for controller " + name() + " (" + uid() + ")! Using default config instead.");
Log.LOGGER.error("Could not set config for controller " + name() + " (" + uid() + ")! Using default config instead.");
this.config = defaultConfig();
}
this.config.setup(this);

View File

@ -1,11 +1,11 @@
package dev.isxander.controlify.controller.joystick;
import dev.isxander.controlify.Controlify;
import dev.isxander.controlify.controller.ControllerState;
import dev.isxander.controlify.controller.joystick.mapping.JoystickMapping;
import dev.isxander.controlify.controller.joystick.mapping.UnmappedJoystickMapping;
import dev.isxander.controlify.debug.DebugProperties;
import dev.isxander.controlify.utils.ControllerUtils;
import dev.isxander.controlify.utils.Log;
import dev.isxander.yacl3.api.NameableEnum;
import net.minecraft.network.chat.Component;
import org.lwjgl.glfw.GLFW;
@ -131,10 +131,10 @@ public class JoystickState implements ControllerState {
List<HatState> hats = Arrays.stream(mapping.hats()).map(hat -> hat.getHatState(data)).toList();
if (DebugProperties.PRINT_JOY_STATE) {
Controlify.LOGGER.info("Printing joystick state for controller {}", joystick);
Controlify.LOGGER.info(Arrays.stream(axes).map(axis -> axis.name().getString() + ": " + axis.getAxis(data)).toList().toString());
Controlify.LOGGER.info(Arrays.stream(mapping.buttons()).map(button -> button.name().getString() + ": " + button.isPressed(data)).toList().toString());
Controlify.LOGGER.info(Arrays.stream(mapping.hats()).map(hat -> hat.name().getString() + ": " + hat.getHatState(data)).toList().toString());
Log.LOGGER.info("Printing joystick state for controller {}", joystick);
Log.LOGGER.info(Arrays.stream(axes).map(axis -> axis.name().getString() + ": " + axis.getAxis(data)).toList().toString());
Log.LOGGER.info(Arrays.stream(mapping.buttons()).map(button -> button.name().getString() + ": " + button.isPressed(data)).toList().toString());
Log.LOGGER.info(Arrays.stream(mapping.hats()).map(hat -> hat.name().getString() + ": " + hat.getHatState(data)).toList().toString());
}
return new JoystickState(joystick.mapping(), deadzoneAxes, rawAxes, buttons, hats);

View File

@ -2,9 +2,6 @@ package dev.isxander.controlify.controller.joystick;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import dev.isxander.controlify.Controlify;
import dev.isxander.controlify.InputMode;
import dev.isxander.controlify.api.ControlifyApi;
import dev.isxander.controlify.bindings.ControllerBindings;
import dev.isxander.controlify.controller.AbstractController;
import dev.isxander.controlify.controller.hid.ControllerHIDService;
@ -13,6 +10,7 @@ import dev.isxander.controlify.controller.joystick.mapping.JoystickMapping;
import dev.isxander.controlify.controller.sdl2.SDL2NativesManager;
import dev.isxander.controlify.rumble.RumbleManager;
import dev.isxander.controlify.rumble.RumbleSource;
import dev.isxander.controlify.utils.Log;
import org.libsdl.SDL;
import java.util.Objects;
@ -106,7 +104,7 @@ public class SingleJoystickController extends AbstractController<JoystickState,
// the duration doesn't matter because we are not updating the joystick state,
// so there is never any SDL check to stop the rumble after the desired time.
if (!SDL.SDL_JoystickRumbleTriggers(ptrJoystick, (int)(strongMagnitude * 65535.0F), (int)(weakMagnitude * 65535.0F), 1)) {
Controlify.LOGGER.error("Could not rumble controller " + name() + ": " + SDL.SDL_GetError());
Log.LOGGER.error("Could not rumble controller " + name() + ": " + SDL.SDL_GetError());
return false;
}
return true;

View File

@ -1,11 +1,11 @@
package dev.isxander.controlify.controller.joystick.mapping;
import dev.isxander.controlify.Controlify;
import dev.isxander.controlify.bindings.JoystickAxisBind;
import dev.isxander.controlify.controller.ControllerType;
import dev.isxander.controlify.controller.joystick.JoystickController;
import dev.isxander.controlify.controller.joystick.JoystickState;
import dev.isxander.controlify.controller.joystick.render.JoystickRenderer;
import dev.isxander.controlify.utils.Log;
import net.minecraft.client.Minecraft;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
@ -48,7 +48,7 @@ public class RPJoystickMapping implements JoystickMapping {
hats = readHats(reader, type);
}
default -> {
Controlify.LOGGER.warn("Unknown field in joystick mapping: " + name + ". Expected values: ['axes', 'buttons', 'hats']");
Log.LOGGER.warn("Unknown field in joystick mapping: " + name + ". Expected values: ['axes', 'buttons', 'hats']");
reader.skipValue();
}
}
@ -111,7 +111,7 @@ public class RPJoystickMapping implements JoystickMapping {
}
default -> {
reader.skipValue();
Controlify.LOGGER.info("Unknown axis range property: " + rangeName + ". Expected are ['in', 'out']");
Log.LOGGER.info("Unknown axis range property: " + rangeName + ". Expected are ['in', 'out']");
}
}
}
@ -135,7 +135,7 @@ public class RPJoystickMapping implements JoystickMapping {
}
default -> {
reader.skipValue();
Controlify.LOGGER.info("Unknown axis property: " + name + ". Expected are ['identifier', 'axis_names', 'ids', 'range', 'rest', 'deadzone']");
Log.LOGGER.info("Unknown axis property: " + name + ". Expected are ['identifier', 'axis_names', 'ids', 'range', 'rest', 'deadzone']");
}
}
}
@ -166,7 +166,7 @@ public class RPJoystickMapping implements JoystickMapping {
case "name" -> btnName = reader.nextString();
default -> {
reader.skipValue();
Controlify.LOGGER.info("Unknown button property: " + name + ". Expected are ['button', 'name']");
Log.LOGGER.info("Unknown button property: " + name + ". Expected are ['button', 'name']");
}
}
}
@ -214,11 +214,11 @@ public class RPJoystickMapping implements JoystickMapping {
reader.endObject();
if (axisId == -1) {
Controlify.LOGGER.error("No axis id defined for emulated hat " + hatName + "! Skipping.");
Log.LOGGER.error("No axis id defined for emulated hat " + hatName + "! Skipping.");
continue;
}
if (states.size() != JoystickState.HatState.values().length) {
Controlify.LOGGER.error("Not all hat states are defined for emulated hat " + hatName + "! Skipping.");
Log.LOGGER.error("Not all hat states are defined for emulated hat " + hatName + "! Skipping.");
continue;
}
@ -226,7 +226,7 @@ public class RPJoystickMapping implements JoystickMapping {
}
default -> {
reader.skipValue();
Controlify.LOGGER.info("Unknown hat property: " + name + ". Expected are ['hat', 'name']");
Log.LOGGER.info("Unknown hat property: " + name + ". Expected are ['hat', 'name']");
}
}
}
@ -257,14 +257,14 @@ public class RPJoystickMapping implements JoystickMapping {
public static JoystickMapping fromType(JoystickController<?> joystick) {
var resource = Minecraft.getInstance().getResourceManager().getResource(new ResourceLocation("controlify", "mappings/" + joystick.type().mappingId() + ".json"));
if (resource.isEmpty()) {
Controlify.LOGGER.warn("No joystick mapping found for controller: '" + joystick.type().mappingId() + "'");
Log.LOGGER.warn("No joystick mapping found for controller: '" + joystick.type().mappingId() + "'");
return new UnmappedJoystickMapping(joystick.joystickId());
}
try (var reader = JsonReader.json5(resource.get().openAsReader())) {
return new RPJoystickMapping(reader, joystick.type());
} catch (Exception e) {
Controlify.LOGGER.error("Failed to load joystick mapping for controller: '" + joystick.type().mappingId() + "'", e);
Log.LOGGER.error("Failed to load joystick mapping for controller: '" + joystick.type().mappingId() + "'", e);
return new UnmappedJoystickMapping(joystick.joystickId());
}
}