forked from Clones/Controlify
✏️ Optimize rumble driver calls + silence rumble when out of focus rather than cancel all effects
This commit is contained in:
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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());
|
||||
|
||||
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();
|
||||
}
|
||||
|
Reference in New Issue
Block a user