Add lever and jump pad components with activation logic
This commit is contained in:
139
addons/rmsmartshape/materials/shape_material.gd
Normal file
139
addons/rmsmartshape/materials/shape_material.gd
Normal file
@@ -0,0 +1,139 @@
|
||||
@tool
|
||||
extends Resource
|
||||
class_name SS2D_Material_Shape
|
||||
|
||||
## This material represents the set of edge materials used for a smart shape.
|
||||
##
|
||||
## Each edge represents a set of textures used to render an edge.
|
||||
|
||||
## List of materials this shape can use.
|
||||
@export var _edge_meta_materials: Array[SS2D_Material_Edge_Metadata] = [] : set = set_edge_meta_materials
|
||||
@export var fill_textures: Array[Texture2D] = [] : set = set_fill_textures
|
||||
@export var fill_texture_z_index: int = -10 : set = set_fill_texture_z_index
|
||||
@export var fill_texture_show_behind_parent: bool = false : set = set_fill_texture_show_behind_parent
|
||||
|
||||
## Scale the fill texture
|
||||
@export_range(0.1, 4, 0.01, "or_greater") var fill_texture_scale: float = 1.0 : set = set_fill_texture_scale
|
||||
|
||||
## Whether the fill texture should start at the global 0/0 instead of the node's 0/0
|
||||
@export var fill_texture_absolute_position: bool = false : set = set_fill_texture_absolute_position
|
||||
|
||||
## Whether the fill texture should ignore the node's rotation
|
||||
@export var fill_texture_absolute_rotation: bool = false : set = set_fill_texture_absolute_rotation
|
||||
|
||||
## How many pixels the fill texture should be shifted in x and y direction
|
||||
@export var fill_texture_offset: Vector2 = Vector2.ZERO : set = set_fill_texture_offset
|
||||
|
||||
## Added rotation of the texture in degrees
|
||||
@export_range(-180, 180, 0.1) var fill_texture_angle_offset: float = 0.0 : set = set_fill_texture_angle_offset
|
||||
|
||||
@export var fill_mesh_offset: float = 0.0 : set = set_fill_mesh_offset
|
||||
@export var fill_mesh_material: Material = null : set = set_fill_mesh_material
|
||||
|
||||
## How much to offset all edges
|
||||
@export_range (-1.5, 1.5, 0.1) var render_offset: float = 0.0 : set = set_render_offset
|
||||
|
||||
|
||||
func set_fill_mesh_material(m: Material) -> void:
|
||||
fill_mesh_material = m
|
||||
emit_changed()
|
||||
|
||||
|
||||
func set_fill_mesh_offset(f: float) -> void:
|
||||
fill_mesh_offset = f
|
||||
emit_changed()
|
||||
|
||||
|
||||
func set_render_offset(f: float) -> void:
|
||||
render_offset = f
|
||||
emit_changed()
|
||||
|
||||
|
||||
## Get all valid edge materials for this normal.
|
||||
func get_edge_meta_materials(normal: Vector2) -> Array[SS2D_Material_Edge_Metadata]:
|
||||
var materials: Array[SS2D_Material_Edge_Metadata] = []
|
||||
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[SS2D_Material_Edge_Metadata]:
|
||||
return _edge_meta_materials
|
||||
|
||||
|
||||
func get_all_edge_materials() -> Array[SS2D_Material_Edge]:
|
||||
var materials: Array[SS2D_Material_Edge] = []
|
||||
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) -> void:
|
||||
var new_array := _edge_meta_materials.duplicate()
|
||||
new_array.push_back(e)
|
||||
set_edge_meta_materials(new_array)
|
||||
|
||||
|
||||
func _on_edge_material_changed() -> void:
|
||||
emit_changed()
|
||||
|
||||
|
||||
func set_fill_textures(a: Array[Texture2D]) -> void:
|
||||
fill_textures = a
|
||||
emit_changed()
|
||||
|
||||
|
||||
func set_fill_texture_z_index(i: int) -> void:
|
||||
fill_texture_z_index = i
|
||||
emit_changed()
|
||||
|
||||
|
||||
func set_fill_texture_show_behind_parent(value: bool) -> void:
|
||||
fill_texture_show_behind_parent = value
|
||||
emit_changed()
|
||||
|
||||
|
||||
func set_edge_meta_materials(a: Array[SS2D_Material_Edge_Metadata]) -> void:
|
||||
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_changed()
|
||||
|
||||
|
||||
func set_fill_texture_offset(value: Vector2) -> void:
|
||||
fill_texture_offset = value
|
||||
emit_changed()
|
||||
|
||||
|
||||
func set_fill_texture_scale(value:float) -> void:
|
||||
fill_texture_scale = value
|
||||
emit_changed()
|
||||
|
||||
|
||||
func set_fill_texture_absolute_rotation(value: bool) -> void:
|
||||
fill_texture_absolute_rotation = value
|
||||
emit_changed()
|
||||
|
||||
|
||||
func set_fill_texture_angle_offset(value: float) -> void:
|
||||
fill_texture_angle_offset = value
|
||||
emit_changed()
|
||||
|
||||
|
||||
func set_fill_texture_absolute_position(value: bool) -> void:
|
||||
fill_texture_absolute_position = value
|
||||
emit_changed()
|
||||
Reference in New Issue
Block a user