mirror of
https://github.com/FunkinCrew/Funkin.git
synced 2024-12-14 02:01:03 -05:00
105 lines
2.4 KiB
Haxe
105 lines
2.4 KiB
Haxe
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;
|
|
uvtData.length = 0;
|
|
colors.length = 0;
|
|
vertex_count = 0;
|
|
index_count = 0;
|
|
}
|
|
}
|