Files
mtgodot-poc/project/fx/particle_faces.gd
T

32 lines
1.2 KiB
GDScript

# EffectLib TwoSideRenderer / ThreeSideRenderer angles, carried per face in UV2.
# One particle simulation drives every face (no independent emitter randomness).
extends RefCounted
static func build(size: Vector2, billboard: int) -> Mesh:
if billboard not in [4, 5]:
var quad := QuadMesh.new()
quad.size = size
return quad
var angles := [-30.0, 30.0] if billboard == 4 else [0.0, -60.0, 60.0]
var vertices := PackedVector3Array()
var normals := PackedVector3Array()
var uv := PackedVector2Array()
var uv2 := PackedVector2Array()
var corners := [Vector2(0, 0), Vector2(0, 1), Vector2(1, 1),
Vector2(0, 0), Vector2(1, 1), Vector2(1, 0)]
for angle in angles:
for corner in corners:
vertices.append(Vector3((corner.x - 0.5) * size.x, (0.5 - corner.y) * size.y, 0))
normals.append(Vector3(0, 0, 1))
uv.append(corner)
uv2.append(Vector2(deg_to_rad(angle), 0))
var arrays := []
arrays.resize(Mesh.ARRAY_MAX)
arrays[Mesh.ARRAY_VERTEX] = vertices
arrays[Mesh.ARRAY_NORMAL] = normals
arrays[Mesh.ARRAY_TEX_UV] = uv
arrays[Mesh.ARRAY_TEX_UV2] = uv2
var mesh := ArrayMesh.new()
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
return mesh