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) {
|
if (outOfFocus) {
|
||||||
state = ControllerState.EMPTY;
|
state = ControllerState.EMPTY;
|
||||||
controller.rumbleManager().clearEffects();
|
controller.rumbleManager().setSilent(true);
|
||||||
} else {
|
} else {
|
||||||
|
controller.rumbleManager().setSilent(false);
|
||||||
controller.rumbleManager().tick();
|
controller.rumbleManager().tick();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,6 +9,9 @@ import java.util.Queue;
|
|||||||
public class RumbleManager {
|
public class RumbleManager {
|
||||||
private final RumbleCapable controller;
|
private final RumbleCapable controller;
|
||||||
private final Queue<RumbleEffectInstance> effectQueue;
|
private final Queue<RumbleEffectInstance> effectQueue;
|
||||||
|
private RumbleEffectInstance prevEffect = null;
|
||||||
|
|
||||||
|
private boolean silent, wasSilent;
|
||||||
|
|
||||||
public RumbleManager(RumbleCapable controller) {
|
public RumbleManager(RumbleCapable controller) {
|
||||||
this.controller = controller;
|
this.controller = controller;
|
||||||
@ -51,14 +54,26 @@ public class RumbleManager {
|
|||||||
effectQueue.removeIf(e -> e.effect().isFinished());
|
effectQueue.removeIf(e -> e.effect().isFinished());
|
||||||
effectQueue.forEach(e -> e.effect().tick());
|
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();
|
RumbleState state = effect.effect().currentState();
|
||||||
controller.setRumble(state.strong(), state.weak(), effect.source());
|
controller.setRumble(state.strong(), state.weak(), effect.source());
|
||||||
|
prevEffect = effect;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clearEffects() {
|
public void clearEffects() {
|
||||||
effectQueue.clear();
|
effectQueue.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setSilent(boolean silent) {
|
||||||
|
this.silent = silent;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isPlaying() {
|
public boolean isPlaying() {
|
||||||
return !effectQueue.isEmpty();
|
return !effectQueue.isEmpty();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user