KeyframeTrack.java
net.minecraft.util.KeyframeTrack
信息
- 全限定名:net.minecraft.util.KeyframeTrack
- 类型:public record
- 包:net.minecraft.util
- 源码路径:src/main/java/net/minecraft/util/KeyframeTrack.java
- 起始行号:L14
- 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
net.minecraft.util.KeyframeTrack.Builder- 类型:
class - 修饰符:
public static - 源码定位:
L77 - 说明:
TODO
- 类型:
构造器
public KeyframeTrack(List<Keyframe<T>> keyframes, EasingType easingType) @ L15
- 构造器名:KeyframeTrack
- 源码定位:L15
- 修饰符:public
参数:
- keyframes: List<Keyframe
> - easingType: EasingType
说明:
TODO
方法
下面的方法块按源码顺序生成。
public static <T> MapCodec<KeyframeTrack<T>> mapCodec(Codec<T> valueCodec) @ L24
- 方法名:mapCodec
- 源码定位:L24
- 返回类型:
MapCodec<KeyframeTrack > - 修饰符:public static
参数:
- valueCodec: Codec
说明:
TODO
private static <T> DataResult<List<Keyframe<T>>> validateKeyframes(List<Keyframe<T>> keyframes) @ L35
- 方法名:validateKeyframes
- 源码定位:L35
- 返回类型:
DataResult<List<Keyframe >> - 修饰符:private static
参数:
- keyframes: List<Keyframe
>
说明:
TODO
public static DataResult<KeyframeTrack<?>> validatePeriod(KeyframeTrack<?> track, int periodTicks) @ L62
- 方法名:validatePeriod
- 源码定位:L62
- 返回类型:DataResult<KeyframeTrack<?>>
- 修饰符:public static
参数:
- track: KeyframeTrack<?>
- periodTicks: int
说明:
TODO
public KeyframeTrackSampler<T> bakeSampler(Optional<Integer> periodTicks, LerpFunction<T> lerp) @ L73
- 方法名:bakeSampler
- 源码定位:L73
- 返回类型:KeyframeTrackSampler
- 修饰符:public
参数:
- periodTicks: Optional
- lerp: LerpFunction
说明:
TODO
代码
public record KeyframeTrack<T>(List<Keyframe<T>> keyframes, EasingType easingType) {
public KeyframeTrack(List<Keyframe<T>> keyframes, EasingType easingType) {
if (keyframes.isEmpty()) {
throw new IllegalArgumentException("Track has no keyframes");
} else {
this.keyframes = keyframes;
this.easingType = easingType;
}
}
public static <T> MapCodec<KeyframeTrack<T>> mapCodec(Codec<T> valueCodec) {
Codec<List<Keyframe<T>>> keyframesCodec = Keyframe.codec(valueCodec).listOf().validate(KeyframeTrack::validateKeyframes);
return RecordCodecBuilder.mapCodec(
i -> i.group(
keyframesCodec.fieldOf("keyframes").forGetter(KeyframeTrack::keyframes),
EasingType.CODEC.optionalFieldOf("ease", EasingType.LINEAR).forGetter(KeyframeTrack::easingType)
)
.apply(i, KeyframeTrack::new)
);
}
private static <T> DataResult<List<Keyframe<T>>> validateKeyframes(List<Keyframe<T>> keyframes) {
if (keyframes.isEmpty()) {
return DataResult.error(() -> "Keyframes must not be empty");
} else if (!Comparators.isInOrder(keyframes, Comparator.comparingInt(Keyframe::ticks))) {
return DataResult.error(() -> "Keyframes must be ordered by ticks field");
} else {
if (keyframes.size() > 1) {
int repeatCount = 0;
int lastTicks = keyframes.getLast().ticks();
for (Keyframe<T> keyframe : keyframes) {
if (keyframe.ticks() == lastTicks) {
if (++repeatCount > 2) {
return DataResult.error(() -> "More than 2 keyframes on same tick: " + keyframe.ticks());
}
} else {
repeatCount = 0;
}
lastTicks = keyframe.ticks();
}
}
return DataResult.success(keyframes);
}
}
public static DataResult<KeyframeTrack<?>> validatePeriod(KeyframeTrack<?> track, int periodTicks) {
for (Keyframe<?> keyframe : track.keyframes()) {
int tick = keyframe.ticks();
if (tick < 0 || tick > periodTicks) {
return DataResult.error(() -> "Keyframe at tick " + keyframe.ticks() + " must be in range [0; " + periodTicks + "]");
}
}
return DataResult.success(track);
}
public KeyframeTrackSampler<T> bakeSampler(Optional<Integer> periodTicks, LerpFunction<T> lerp) {
return new KeyframeTrackSampler<>(this, periodTicks, lerp);
}
public static class Builder<T> {
private final ImmutableList.Builder<Keyframe<T>> keyframes = ImmutableList.builder();
private EasingType easing = EasingType.LINEAR;
public KeyframeTrack.Builder<T> addKeyframe(int ticks, T value) {
this.keyframes.add(new Keyframe<>(ticks, value));
return this;
}
public KeyframeTrack.Builder<T> setEasing(EasingType easing) {
this.easing = easing;
return this;
}
public KeyframeTrack<T> build() {
List<Keyframe<T>> keyframes = KeyframeTrack.validateKeyframes(this.keyframes.build()).getOrThrow();
return new KeyframeTrack<>(keyframes, this.easing);
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/方法调用/返回值 - 关联成员:
Keyframe.codec()
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置: