1
0
forked from Clones/Controlify

make explosion rumble distance change mid-way through

This commit is contained in:
isXander
2023-04-05 23:57:53 +01:00
parent 3b1566cdc1
commit 3577fcb458
3 changed files with 42 additions and 9 deletions

View File

@ -23,20 +23,27 @@ public class ClientPacketListenerMixin {
@Inject(method = "handleExplosion", at = @At("RETURN"))
private void onClientExplosion(ClientboundExplodePacket packet, CallbackInfo ci) {
float distanceSqr = Math.max(
(float)minecraft.player.distanceToSqr(packet.getX(), packet.getY(), packet.getZ())
- packet.getPower() * packet.getPower(), // power is explosion radius
0f);
float maxDistanceSqr = 4096f; // client only receives explosion packets within 64 blocks
float magnitude = 1f - Easings.easeOutQuad(distanceSqr / maxDistanceSqr);
float initialMagnitude = calculateMagnitude(packet);
ControlifyApi.get().currentController().rumbleManager().play(
RumbleSource.EXPLOSION,
BasicRumbleEffect.join(
BasicRumbleEffect.constant(magnitude, magnitude, 4), // initial boom
BasicRumbleEffect.byTime(t -> new RumbleState(0f, magnitude - t*magnitude), 20) // explosion
BasicRumbleEffect.constant(initialMagnitude, initialMagnitude, 4), // initial boom
BasicRumbleEffect.byTime(t -> {
float magnitude = calculateMagnitude(packet);
return new RumbleState(0f, magnitude - t * magnitude);
}, 20) // explosion
)
);
}
private float calculateMagnitude(ClientboundExplodePacket packet) {
float distanceSqr = Math.max(
(float)minecraft.player.distanceToSqr(packet.getX(), packet.getY(), packet.getZ())
- packet.getPower() * packet.getPower(), // power is explosion radius
0f);
float maxDistanceSqr = 4096f; // client only receives explosion packets within 64 blocks
return 1f - Easings.easeOutQuad(distanceSqr / maxDistanceSqr);
}
}