Skip to content

Instantly share code, notes, and snippets.

@Haven-King
Created December 15, 2020 20:51
Show Gist options
  • Save Haven-King/16cfcf6e6732cdd5374991bb1c171b0d to your computer and use it in GitHub Desktop.
Save Haven-King/16cfcf6e6732cdd5374991bb1c171b0d to your computer and use it in GitHub Desktop.
package dev.hephaestus.shatteredsky.client.model;
import net.fabricmc.fabric.api.renderer.v1.mesh.QuadEmitter;
import net.minecraft.client.texture.Sprite;
public class DecoratedEmitter {
private final QuadEmitter quadEmitter;
public DecoratedEmitter(QuadEmitter quadEmitter) {
this.quadEmitter = quadEmitter;
}
private void vertex(int index, float x, float y, float z, int color, float u, float v) {
quadEmitter.pos(index, x, y, z).spriteColor(index, 0, color).sprite(index, 0, u, v);
}
public void triangle(Sprite sprite, Point point1, Point point2, Point point3) {
quad(sprite, point1, point2, point3, point3);
}
public void triangle(Sprite sprite,
float x1, float y1, float z1, float u1, float v1,
float x2, float y2, float z2, float u2, float v2,
float x3, float y3, float z3, float u3, float v3) {
triangle(sprite,
x1, y1, z1, -1, u1, v1,
x2, y2, z2, -1, u2, v2,
x3, y3, z3, -1, u3, v3
);
}
public void triangle(Sprite sprite, int color,
float x1, float y1, float z1, float u1, float v1,
float x2, float y2, float z2, float u2, float v2,
float x3, float y3, float z3, float u3, float v3) {
triangle(sprite,
x1, y1, z1, color, u1, v1,
x2, y2, z2, color, u2, v2,
x3, y3, z3, color, u3, v3
);
}
public void triangle(Sprite sprite,
float x1, float y1, float z1, int color1, float u1, float v1,
float x2, float y2, float z2, int color2, float u2, float v2,
float x3, float y3, float z3, int color3, float u3, float v3)
{
quad(sprite,
x1, y1, z1, color1, u1, v1,
x2, y2, z2, color2, u2, v2,
x3, y3, z3, color3, u3, v3,
x3, y3, z3, color3, u3, v3
);
}
public void quad(Sprite sprite, Point point1, Point point2, Point point3, Point point4) {
quad(sprite,
point1.x, point1.y, point1.z, point1.color, point1.u, point1.v,
point2.x, point2.y, point2.z, point2.color, point2.u, point2.v,
point3.x, point3.y, point3.z, point3.color, point3.u, point3.v,
point4.x, point4.y, point4.z, point4.color, point4.u, point4.v
);
}
public void quad(Sprite sprite,
float x1, float y1, float z1, float u1, float v1,
float x2, float y2, float z2, float u2, float v2,
float x3, float y3, float z3, float u3, float v3,
float x4, float y4, float z4, float u4, float v4) {
quad(sprite,
x1, y1, z1, -1, u1, v1,
x2, y2, z2, -1, u2, v2,
x3, y3, z3, -1, u3, v3,
x4, y4, z4, -1, u4, v4
);
}
public void quad(Sprite sprite, int color,
float x1, float y1, float z1, float u1, float v1,
float x2, float y2, float z2, float u2, float v2,
float x3, float y3, float z3, float u3, float v3,
float x4, float y4, float z4, float u4, float v4) {
quad(sprite,
x1, y1, z1, color, u1, v1,
x2, y2, z2, color, u2, v2,
x3, y3, z3, color, u3, v3,
x4, y4, z4, color, u4, v4
);
}
public void quad(Sprite sprite,
float x1, float y1, float z1, int color1, float u1, float v1,
float x2, float y2, float z2, int color2, float u2, float v2,
float x3, float y3, float z3, int color3, float u3, float v3,
float x4, float y4, float z4, int color4, float u4, float v4)
{
final float w = sprite.getWidth();
final float h = sprite.getHeight();
vertex(0, x1, y1, z1, color1, u1 * w, v1 * h);
vertex(1, x2, y2, z2, color2, u2 * w, v2 * h);
vertex(2, x3, y3, z3, color3, u3 * w, v3 * h);
vertex(3, x4, y4, z4, color4, u4 * w, v4 * h);
quadEmitter.spriteBake(0, sprite, 0);
quadEmitter.emit();
}
public static class Point {
public final float x, y, z, u, v;
public final int color;
public Point(float x, float y, float z, int u, int v) {
this(x, y, z, -1, u, v);
}
public Point(float x, float y, float z, int color, float u, float v) {
this.x = x;
this.y = y;
this.z = z;
this.color = color;
this.u = u;
this.v = v;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment