ColorLerper.java
net.minecraft.client.color.ColorLerper
信息
- 全限定名:net.minecraft.client.color.ColorLerper
- 类型:public class
- 包:net.minecraft.client.color
- 源码路径:src/main/java/net/minecraft/client/color/ColorLerper.java
- 起始行号:L14
- 职责:
TODO
字段/常量
MUSIC_NOTE_COLORS- 类型:
DyeColor[] - 修饰符:
public static final - 源码定位:
L15 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.client.color.ColorLerper.Type- 类型:
enum - 修饰符:
public static - 源码定位:
L52 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
public static int getLerpedColor(ColorLerper.Type type, float tick) @ L30
- 方法名:getLerpedColor
- 源码定位:L30
- 返回类型:int
- 修饰符:public static
参数:
- type: ColorLerper.Type
- tick: float
说明:
TODO
private static int getModifiedColor(DyeColor color, float brightness) @ L42
- 方法名:getModifiedColor
- 源码定位:L42
- 返回类型:int
- 修饰符:private static
参数:
- color: DyeColor
- brightness: float
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class ColorLerper {
public static final DyeColor[] MUSIC_NOTE_COLORS = new DyeColor[]{
DyeColor.WHITE,
DyeColor.LIGHT_GRAY,
DyeColor.LIGHT_BLUE,
DyeColor.BLUE,
DyeColor.CYAN,
DyeColor.GREEN,
DyeColor.LIME,
DyeColor.YELLOW,
DyeColor.ORANGE,
DyeColor.PINK,
DyeColor.RED,
DyeColor.MAGENTA
};
public static int getLerpedColor(ColorLerper.Type type, float tick) {
int tickCount = Mth.floor(tick);
int value = tickCount / type.colorDuration;
int colorCount = type.colors.length;
int c1 = value % colorCount;
int c2 = (value + 1) % colorCount;
float subStep = (tickCount % type.colorDuration + Mth.frac(tick)) / type.colorDuration;
int color1 = type.getColor(type.colors[c1]);
int color2 = type.getColor(type.colors[c2]);
return ARGB.srgbLerp(subStep, color1, color2);
}
private static int getModifiedColor(DyeColor color, float brightness) {
if (color == DyeColor.WHITE) {
return -1644826;
} else {
int src = color.getTextureDiffuseColor();
return ARGB.color(255, Mth.floor(ARGB.red(src) * brightness), Mth.floor(ARGB.green(src) * brightness), Mth.floor(ARGB.blue(src) * brightness));
}
}
@OnlyIn(Dist.CLIENT)
public static enum Type {
SHEEP(25, DyeColor.values(), 0.75F),
MUSIC_NOTE(30, ColorLerper.MUSIC_NOTE_COLORS, 1.25F);
private final int colorDuration;
private final Map<DyeColor, Integer> colorByDye;
private final DyeColor[] colors;
private Type(int colorDuration, DyeColor[] colors, float brightness) {
this.colorDuration = colorDuration;
this.colorByDye = Maps.newHashMap(
Arrays.stream(colors).collect(Collectors.toMap(d -> (DyeColor)d, color -> ColorLerper.getModifiedColor(color, brightness)))
);
this.colors = colors;
}
public final int getColor(DyeColor dyeColor) {
return this.colorByDye.get(dyeColor);
}
}
}