81 lines
1.8 KiB
GDScript
81 lines
1.8 KiB
GDScript
@tool
|
|
extends RefCounted
|
|
class_name SS2D_Mesh
|
|
|
|
## Used to organize all requested meshes to be rendered by their textures.
|
|
|
|
var texture: Texture2D = null
|
|
var flip_texture: bool = false
|
|
var meshes: Array[ArrayMesh] = []
|
|
var mesh_transform: Transform2D = Transform2D()
|
|
var material: Material = null
|
|
var z_index: int = 0
|
|
var z_as_relative: bool = true
|
|
var show_behind_parent: bool = false
|
|
var force_no_tiling: bool = false
|
|
|
|
|
|
func _init(
|
|
t: Texture2D = null,
|
|
f: bool = false,
|
|
xform: Transform2D = Transform2D(),
|
|
m: Array[ArrayMesh] = [],
|
|
mat: Material = null
|
|
) -> void:
|
|
texture = t
|
|
flip_texture = f
|
|
meshes = m
|
|
mesh_transform = xform
|
|
material = mat
|
|
|
|
|
|
# Note: Not an override.
|
|
func duplicate(subresources: bool = false) -> SS2D_Mesh:
|
|
var copy := SS2D_Mesh.new()
|
|
copy.texture = texture
|
|
copy.flip_texture = flip_texture
|
|
copy.mesh_transform = mesh_transform
|
|
copy.material = material
|
|
copy.z_index = z_index
|
|
copy.z_as_relative = z_as_relative
|
|
copy.show_behind_parent = show_behind_parent
|
|
copy.force_no_tiling = force_no_tiling
|
|
copy.meshes = []
|
|
if subresources:
|
|
for m in meshes:
|
|
copy.meshes.push_back(m.duplicate(true))
|
|
return copy
|
|
|
|
|
|
func matches(tex: Texture2D, f: bool, t: Transform2D, m: Material, zi: int, zb: bool) -> bool:
|
|
return (
|
|
tex == texture
|
|
and f == flip_texture
|
|
and t == mesh_transform
|
|
and m == material
|
|
and zi == z_index
|
|
and zb == z_as_relative
|
|
)
|
|
|
|
|
|
func mesh_matches(m: SS2D_Mesh) -> bool:
|
|
return matches(
|
|
m.texture,
|
|
m.flip_texture,
|
|
m.mesh_transform,
|
|
m.material,
|
|
m.z_index,
|
|
m.z_as_relative
|
|
)
|
|
|
|
|
|
func debug_print_array_mesh(am: ArrayMesh) -> String:
|
|
var s := "Faces:%s | Surfs:%s | " % [am.get_faces(), am.get_surface_count()]
|
|
return s
|
|
|
|
|
|
func render(ci: CanvasItem) -> void:
|
|
#print("mesh count %s" % meshes.size())
|
|
for mesh in meshes:
|
|
ci.draw_mesh(mesh, texture)
|