142 lines
3.8 KiB
Java
142 lines
3.8 KiB
Java
package net.minecraft.util;
|
|
|
|
import net.minecraft.world.phys.Vec3;
|
|
import org.joml.Vector3f;
|
|
|
|
public class ARGB {
|
|
public static int alpha(int color) {
|
|
return color >>> 24;
|
|
}
|
|
|
|
public static int red(int color) {
|
|
return color >> 16 & 0xFF;
|
|
}
|
|
|
|
public static int green(int color) {
|
|
return color >> 8 & 0xFF;
|
|
}
|
|
|
|
public static int blue(int color) {
|
|
return color & 0xFF;
|
|
}
|
|
|
|
public static int color(int alpha, int red, int green, int blue) {
|
|
return alpha << 24 | red << 16 | green << 8 | blue;
|
|
}
|
|
|
|
public static int color(int red, int green, int blue) {
|
|
return color(255, red, green, blue);
|
|
}
|
|
|
|
public static int color(Vec3 color) {
|
|
return color(as8BitChannel((float)color.x()), as8BitChannel((float)color.y()), as8BitChannel((float)color.z()));
|
|
}
|
|
|
|
public static int multiply(int color1, int color2) {
|
|
if (color1 == -1) {
|
|
return color2;
|
|
} else {
|
|
return color2 == -1
|
|
? color1
|
|
: color(alpha(color1) * alpha(color2) / 255, red(color1) * red(color2) / 255, green(color1) * green(color2) / 255, blue(color1) * blue(color2) / 255);
|
|
}
|
|
}
|
|
|
|
public static int scaleRGB(int color, float scale) {
|
|
return scaleRGB(color, scale, scale, scale);
|
|
}
|
|
|
|
public static int scaleRGB(int color, float redScale, float greenScale, float blueScale) {
|
|
return color(
|
|
alpha(color),
|
|
Math.clamp((int)(red(color) * redScale), 0, 255),
|
|
Math.clamp((int)(green(color) * greenScale), 0, 255),
|
|
Math.clamp((int)(blue(color) * blueScale), 0, 255)
|
|
);
|
|
}
|
|
|
|
public static int scaleRGB(int color, int scale) {
|
|
return color(
|
|
alpha(color),
|
|
Math.clamp((long)red(color) * scale / 255L, 0, 255),
|
|
Math.clamp((long)green(color) * scale / 255L, 0, 255),
|
|
Math.clamp((long)blue(color) * scale / 255L, 0, 255)
|
|
);
|
|
}
|
|
|
|
public static int greyscale(int color) {
|
|
int i = (int)(red(color) * 0.3F + green(color) * 0.59F + blue(color) * 0.11F);
|
|
return color(i, i, i);
|
|
}
|
|
|
|
public static int lerp(float delta, int color1, int color2) {
|
|
int i = Mth.lerpInt(delta, alpha(color1), alpha(color2));
|
|
int j = Mth.lerpInt(delta, red(color1), red(color2));
|
|
int k = Mth.lerpInt(delta, green(color1), green(color2));
|
|
int l = Mth.lerpInt(delta, blue(color1), blue(color2));
|
|
return color(i, j, k, l);
|
|
}
|
|
|
|
public static int opaque(int color) {
|
|
return color | 0xFF000000;
|
|
}
|
|
|
|
public static int transparent(int color) {
|
|
return color & 16777215;
|
|
}
|
|
|
|
public static int color(int alpha, int color) {
|
|
return alpha << 24 | color & 16777215;
|
|
}
|
|
|
|
public static int white(float alpha) {
|
|
return as8BitChannel(alpha) << 24 | 16777215;
|
|
}
|
|
|
|
public static int colorFromFloat(float alpha, float red, float green, float blue) {
|
|
return color(as8BitChannel(alpha), as8BitChannel(red), as8BitChannel(green), as8BitChannel(blue));
|
|
}
|
|
|
|
public static Vector3f vector3fFromRGB24(int color) {
|
|
float f = red(color) / 255.0F;
|
|
float g = green(color) / 255.0F;
|
|
float h = blue(color) / 255.0F;
|
|
return new Vector3f(f, g, h);
|
|
}
|
|
|
|
public static int average(int color1, int color2) {
|
|
return color((alpha(color1) + alpha(color2)) / 2, (red(color1) + red(color2)) / 2, (green(color1) + green(color2)) / 2, (blue(color1) + blue(color2)) / 2);
|
|
}
|
|
|
|
public static int as8BitChannel(float value) {
|
|
return Mth.floor(value * 255.0F);
|
|
}
|
|
|
|
public static float alphaFloat(int color) {
|
|
return from8BitChannel(alpha(color));
|
|
}
|
|
|
|
public static float redFloat(int color) {
|
|
return from8BitChannel(red(color));
|
|
}
|
|
|
|
public static float greenFloat(int color) {
|
|
return from8BitChannel(green(color));
|
|
}
|
|
|
|
public static float blueFloat(int color) {
|
|
return from8BitChannel(blue(color));
|
|
}
|
|
|
|
private static float from8BitChannel(int value) {
|
|
return value / 255.0F;
|
|
}
|
|
|
|
public static int toABGR(int color) {
|
|
return color & -16711936 | (color & 0xFF0000) >> 16 | (color & 0xFF) << 16;
|
|
}
|
|
|
|
public static int fromABGR(int color) {
|
|
return toABGR(color);
|
|
}
|
|
}
|