1
0
forked from Clones/Controlify
Files
Controlify/src/main/java/dev/isxander/controlify/api/event/ControlifyEvents.java
2023-04-15 13:12:45 +01:00

106 lines
4.0 KiB
Java

package dev.isxander.controlify.api.event;
import dev.isxander.controlify.InputMode;
import dev.isxander.controlify.api.ingameinput.LookInputModifier;
import dev.isxander.controlify.bindings.ControllerBindings;
import dev.isxander.controlify.controller.Controller;
import dev.isxander.controlify.api.ingameguide.IngameGuideRegistry;
import net.fabricmc.fabric.api.event.Event;
import net.fabricmc.fabric.api.event.EventFactory;
public final class ControlifyEvents {
/**
* Triggers when the input mode is changed from keyboard to controller or vice versa.
*/
public static final Event<InputModeChanged> INPUT_MODE_CHANGED = EventFactory.createArrayBacked(InputModeChanged.class, callbacks -> mode -> {
for (InputModeChanged callback : callbacks) {
callback.onInputModeChanged(mode);
}
});
/**
* Triggers every tick when the current controller state has been updated.
*/
public static final Event<ControllerStateUpdate> ACTIVE_CONTROLLER_TICKED = EventFactory.createArrayBacked(ControllerStateUpdate.class, callbacks -> controller -> {
for (ControllerStateUpdate callback : callbacks) {
callback.onControllerStateUpdate(controller);
}
});
/**
* @deprecated Use {@link #ACTIVE_CONTROLLER_TICKED} instead.
*/
@Deprecated
public static final Event<ControllerStateUpdate> CONTROLLER_STATE_UPDATED = ACTIVE_CONTROLLER_TICKED;
/**
* Triggers every tick when any connected controller's state has been updated before the active controller is ticked.
*/
public static final Event<ControllerStateUpdate> CONTROLLER_STATE_UPDATE = EventFactory.createArrayBacked(ControllerStateUpdate.class, callbacks -> controller -> {
for (ControllerStateUpdate callback : callbacks) {
callback.onControllerStateUpdate(controller);
}
});
/**
* Triggers when the button guide entries are being populated, so you can add more of your own.
*/
public static final Event<IngameGuideRegistryEvent> INGAME_GUIDE_REGISTRY = EventFactory.createArrayBacked(IngameGuideRegistryEvent.class, callbacks -> (bindings, registry) -> {
for (IngameGuideRegistryEvent callback : callbacks) {
callback.onRegisterIngameGuide(bindings, registry);
}
});
/**
* Triggers in a GUI when the virtual mouse is toggled on or off.
*/
public static final Event<VirtualMouseToggled> VIRTUAL_MOUSE_TOGGLED = EventFactory.createArrayBacked(VirtualMouseToggled.class, callbacks -> enabled -> {
for (VirtualMouseToggled callback : callbacks) {
callback.onVirtualMouseToggled(enabled);
}
});
/**
* Allows you to modify the look input before it is applied to the player.
* These modifiers are called before the look input is multiplied by the sensitivity.
*/
public static final Event<LookInputModifier> LOOK_INPUT_MODIFIER = EventFactory.createArrayBacked(LookInputModifier.class, callbacks -> new LookInputModifier() {
@Override
public float modifyX(float x, Controller<?, ?> controller) {
for (LookInputModifier callback : callbacks) {
x = callback.modifyX(x, controller);
}
return x;
}
@Override
public float modifyY(float y, Controller<?, ?> controller) {
for (LookInputModifier callback : callbacks) {
y = callback.modifyY(y, controller);
}
return y;
}
});
@FunctionalInterface
public interface InputModeChanged {
void onInputModeChanged(InputMode mode);
}
@FunctionalInterface
public interface ControllerStateUpdate {
void onControllerStateUpdate(Controller<?, ?> controller);
}
@FunctionalInterface
public interface IngameGuideRegistryEvent {
void onRegisterIngameGuide(ControllerBindings<?> bindings, IngameGuideRegistry registry);
}
@FunctionalInterface
public interface VirtualMouseToggled {
void onVirtualMouseToggled(boolean enabled);
}
}