46 lines
1.3 KiB
Java
46 lines
1.3 KiB
Java
package net.minecraft.world.entity.boss.enderdragon;
|
|
|
|
import java.util.Arrays;
|
|
import net.minecraft.util.Mth;
|
|
|
|
public class DragonFlightHistory {
|
|
public static final int LENGTH = 64;
|
|
private static final int MASK = 63;
|
|
private final DragonFlightHistory.Sample[] samples = new DragonFlightHistory.Sample[64];
|
|
private int head = -1;
|
|
|
|
public DragonFlightHistory() {
|
|
Arrays.fill(this.samples, new DragonFlightHistory.Sample(0.0, 0.0F));
|
|
}
|
|
|
|
public void copyFrom(DragonFlightHistory other) {
|
|
System.arraycopy(other.samples, 0, this.samples, 0, 64);
|
|
this.head = other.head;
|
|
}
|
|
|
|
public void record(double y, float yRot) {
|
|
DragonFlightHistory.Sample sample = new DragonFlightHistory.Sample(y, yRot);
|
|
if (this.head < 0) {
|
|
Arrays.fill(this.samples, sample);
|
|
}
|
|
|
|
if (++this.head == 64) {
|
|
this.head = 0;
|
|
}
|
|
|
|
this.samples[this.head] = sample;
|
|
}
|
|
|
|
public DragonFlightHistory.Sample get(int index) {
|
|
return this.samples[this.head - index & 63];
|
|
}
|
|
|
|
public DragonFlightHistory.Sample get(int index, float partialTick) {
|
|
DragonFlightHistory.Sample sample = this.get(index);
|
|
DragonFlightHistory.Sample sample2 = this.get(index + 1);
|
|
return new DragonFlightHistory.Sample(Mth.lerp((double)partialTick, sample2.y, sample.y), Mth.rotLerp(partialTick, sample2.yRot, sample.yRot));
|
|
}
|
|
|
|
public record Sample(double y, float yRot) {
|
|
}
|
|
}
|