1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
tool
extends Resource
class_name SS2D_Material_Shape
"""
This material represents the set of edge materials used for a RMSmartShape2D
Each edge represents a set of textures used to render an edge
"""
# List of materials this shape can use
# Should be SS2D_Material_Edge_Metadata
export (Array, Resource) var _edge_meta_materials: Array = [] setget set_edge_meta_materials
export (Array, Texture) var fill_textures: Array = [] setget set_fill_textures
export (Array, Texture) var fill_texture_normals: Array = [] setget set_fill_texture_normals
export (int) var fill_texture_z_index: int = -10 setget set_fill_texture_z_index
export (float) var fill_mesh_offset: float = 0.0 setget set_fill_mesh_offset
export (Material) var fill_mesh_material: Material = null setget set_fill_mesh_material
# How much to offset all edges
export (float, -1.5, 1.5, 0.1) var render_offset: float = 0.0 setget set_render_offset
func set_fill_mesh_material(m: Material):
fill_mesh_material = m
emit_signal("changed")
func set_fill_mesh_offset(f: float):
fill_mesh_offset = f
emit_signal("changed")
func set_render_offset(f: float):
render_offset = f
emit_signal("changed")
# Get all valid edge materials for this normal
func get_edge_meta_materials(normal: Vector2) -> Array:
var materials = []
for e in _edge_meta_materials:
if e == null:
continue
if e.normal_range.is_in_range(normal):
materials.push_back(e)
return materials
func get_all_edge_meta_materials() -> Array:
return _edge_meta_materials
func get_all_edge_materials() -> Array:
var materials = []
for meta in _edge_meta_materials:
if meta.edge_material != null:
materials.push_back(meta.edge_material)
return materials
func add_edge_material(e: SS2D_Material_Edge_Metadata):
var new_array = _edge_meta_materials.duplicate()
new_array.push_back(e)
set_edge_meta_materials(new_array)
func _on_edge_material_changed():
emit_signal("changed")
func set_fill_textures(a: Array):
fill_textures = a
emit_signal("changed")
func set_fill_texture_normals(a: Array):
fill_texture_normals = a
emit_signal("changed")
func set_fill_texture_z_index(i: int):
fill_texture_z_index = i
emit_signal("changed")
func set_edge_meta_materials(a: Array):
for e in _edge_meta_materials:
if e == null:
continue
if not a.has(e):
e.disconnect("changed", self, "_on_edge_material_changed")
for e in a:
if e == null:
continue
if not e.is_connected("changed", self, "_on_edge_material_changed"):
e.connect("changed", self, "_on_edge_material_changed")
_edge_meta_materials = a
emit_signal("changed")
|