package funkin.graphics.rendering; import flixel.FlxStrip; import flixel.util.FlxColor; /** * Yoinked from AustinEast, thanks hopefully u dont mind me using some of ur good code * instead of my dumbass ugly code bro */ class MeshRender extends FlxStrip { public var vertex_count(default, null):Int = 0; public var index_count(default, null):Int = 0; public function new(x, y, ?col:FlxColor = FlxColor.WHITE) { super(x, y); makeGraphic(1, 1, col); } /** * Add a vertex. */ public inline function build_vertex(x:Float, y:Float, u:Float = 0, v:Float = 0):Int { final index = vertex_count; final pos = index << 1; vertices[pos] = x; vertices[pos + 1] = y; uvtData[pos] = u; uvtData[pos + 1] = v; vertex_count++; return index; } /** * Build a triangle from three vertex indexes. * @param a * @param b * @param c */ public function add_tri(a:Int, b:Int, c:Int):Void { indices[index_count] = a; indices[index_count + 1] = b; indices[index_count + 2] = c; index_count += 3; } public function build_tri(ax:Float, ay:Float, bx:Float, by:Float, cx:Float, cy:Float, au:Float = 0, av:Float = 0, bu:Float = 0, bv:Float = 0, cu:Float = 0, cv:Float = 0):Void { add_tri(build_vertex(ax, ay, au, av), build_vertex(bx, by, bu, bv), build_vertex(cx, cy, cu, cv)); } /** * @param a top left vertex * @param b top right vertex * @param c bottom right vertex * @param d bottom left vertex */ public function add_quad(a:Int, b:Int, c:Int, d:Int):Void { add_tri(a, b, c); add_tri(a, c, d); } /** * Build a quad from four points. * * top right - a * top left - b * bottom right - c * bottom left - d */ public function build_quad(ax:Float, ay:Float, bx:Float, by:Float, cx:Float, cy:Float, dx:Float, dy:Float, au:Float = 0, av:Float = 0, bu:Float = 0, bv:Float = 0, cu:Float = 0, cv:Float = 0, du:Float = 0, dv:Float = 0):Void { // top left var b = build_vertex(bx, by, bu, bv); // top right var a = build_vertex(ax, ay, au, av); // bottom left var c = build_vertex(cx, cy, cu, cv); // bottom right var d = build_vertex(dx, dy, du, dv); add_tri(a, b, c); add_tri(a, c, d); } public function clear() { vertices.length = 0; indices.length = 0; vertex_count = 0; index_count = 0; } }