Funkin/source/funkin/rendering/MeshRender.hx

84 lines
1.6 KiB
Haxe

package funkin.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;
var tri_offset:Int = 0;
public function new(x, y, ?col:FlxColor = FlxColor.WHITE)
{
super(x, y);
makeGraphic(1, 1, col);
}
public inline function start()
{
tri_offset = vertex_count;
}
public inline function add_vertex(x:Float, y:Float, u:Float = 0, v:Float = 0)
{
final pos = vertex_count << 1;
vertices[pos] = x;
vertices[pos + 1] = y;
uvtData[pos] = u;
uvtData[pos + 1] = v;
vertex_count++;
}
public function add_tri(a:Int, b:Int, c:Int)
{
indices[index_count] = a + tri_offset;
indices[index_count + 1] = b + tri_offset;
indices[index_count + 2] = c + tri_offset;
index_count += 3;
}
/**
*
* top left - a
*
* top right - b
*
* bottom left - c
*
* bottom right - d
*/
public function add_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)
{
start();
// top left
add_vertex(bx, by, bu, bv);
// top right
add_vertex(ax, ay, au, av);
// bottom left
add_vertex(cx, cy, cu, cv);
// bottom right
add_vertex(dx, dy, du, dv);
add_tri(0, 1, 2);
add_tri(0, 2, 3);
}
public function clear()
{
vertices.length = 0;
indices.length = 0;
vertex_count = 0;
index_count = 0;
}
}