1
0
forked from Clones/Controlify

✏️ Optimize rumble driver calls + silence rumble when out of focus rather than cancel all effects

This commit is contained in:
isXander
2023-07-10 16:59:10 +01:00
parent 8a3436d1c1
commit 4755e164ad
2 changed files with 19 additions and 3 deletions

View File

@ -320,8 +320,9 @@ public class Controlify implements ControlifyApi {
if (outOfFocus) {
state = ControllerState.EMPTY;
controller.rumbleManager().clearEffects();
controller.rumbleManager().setSilent(true);
} else {
controller.rumbleManager().setSilent(false);
controller.rumbleManager().tick();
}

View File

@ -9,6 +9,9 @@ import java.util.Queue;
public class RumbleManager {
private final RumbleCapable controller;
private final Queue<RumbleEffectInstance> effectQueue;
private RumbleEffectInstance prevEffect = null;
private boolean silent, wasSilent;
public RumbleManager(RumbleCapable controller) {
this.controller = controller;
@ -51,14 +54,26 @@ public class RumbleManager {
effectQueue.removeIf(e -> e.effect().isFinished());
effectQueue.forEach(e -> e.effect().tick());
RumbleState state = effect.effect().currentState();
controller.setRumble(state.strong(), state.weak(), effect.source());
if (silent) {
if (!wasSilent) {
controller.setRumble(0f, 0f, RumbleSource.MASTER);
wasSilent = true;
}
} else if (!effect.equals(prevEffect)) {
RumbleState state = effect.effect().currentState();
controller.setRumble(state.strong(), state.weak(), effect.source());
prevEffect = effect;
}
}
public void clearEffects() {
effectQueue.clear();
}
public void setSilent(boolean silent) {
this.silent = silent;
}
public boolean isPlaying() {
return !effectQueue.isEmpty();
}