157 lines
4.3 KiB
GDScript
157 lines
4.3 KiB
GDScript
@tool
|
|
extends Resource
|
|
class_name SS2D_Material_Edge
|
|
|
|
## This material represents the set of textures used for a single edge.
|
|
##
|
|
## This consists of: [br]
|
|
## - textures [br]
|
|
## - corner_textures [br]
|
|
## - taper_textures [br]
|
|
|
|
## All variations of the main edge texture.[br]
|
|
## _textures[0] is considered the "main" texture for the EdgeMaterial.[br][br]
|
|
## [b]Note:[/b] Will be used to generate an icon representing an edge texture.[br]
|
|
@export var textures: Array[Texture2D] = [] : set = _set_textures
|
|
|
|
# Textures for the final left and right quad of the edge when the angle is steep
|
|
@export var textures_corner_outer: Array[Texture2D] = [] : set = _set_textures_corner_outer
|
|
@export var textures_corner_inner: Array[Texture2D] = [] : set = _set_textures_corner_inner
|
|
|
|
# Textures for the final left and right quad of the edge when the angle is shallow
|
|
# Named as such because the desired look is that the texture "tapers-off"
|
|
@export var textures_taper_left: Array[Texture2D] = [] : set = _set_textures_taper_left
|
|
@export var textures_taper_right: Array[Texture2D] = [] : set = _set_textures_taper_right
|
|
|
|
## Textures that will be used for the sharp_corner_tapering feature
|
|
@export var textures_taper_corner_left: Array[Texture2D] = [] : set = _set_textures_taper_corner_left
|
|
@export var textures_taper_corner_right: Array[Texture2D] = [] : set = _set_textures_taper_corner_right
|
|
|
|
## If the texture choice should be randomized instead of the choice by point setup
|
|
@export var randomize_texture: bool = false : set = _set_randomize_texture
|
|
## If corner textures should be used
|
|
@export var use_corner_texture: bool = true : set = _set_use_corner
|
|
## If taper textures should be used
|
|
@export var use_taper_texture: bool = true : set = _set_use_taper
|
|
|
|
## Whether squishing can occur when texture doesn't fit nicely into total length.
|
|
enum FITMODE {SQUISH_AND_STRETCH, CROP}
|
|
@export var fit_mode: FITMODE = FITMODE.SQUISH_AND_STRETCH : set = _set_fit_texture
|
|
|
|
@export var material: Material = null : set = _set_material
|
|
|
|
|
|
###########
|
|
# SETTERS #
|
|
###########
|
|
func _set_textures(ta: Array[Texture2D]) -> void:
|
|
textures = ta
|
|
emit_changed()
|
|
|
|
|
|
func _set_textures_corner_outer(a: Array[Texture2D]) -> void:
|
|
textures_corner_outer = a
|
|
emit_changed()
|
|
|
|
|
|
func _set_textures_corner_inner(a: Array[Texture2D]) -> void:
|
|
textures_corner_inner = a
|
|
emit_changed()
|
|
|
|
|
|
func _set_textures_taper_left(a: Array[Texture2D]) -> void:
|
|
textures_taper_left = a
|
|
emit_changed()
|
|
|
|
|
|
func _set_textures_taper_right(a: Array[Texture2D]) -> void:
|
|
textures_taper_right = a
|
|
emit_changed()
|
|
|
|
func _set_textures_taper_corner_left(a: Array[Texture2D]) -> void:
|
|
textures_taper_corner_left = a
|
|
emit_changed()
|
|
|
|
func _set_textures_taper_corner_right(a: Array[Texture2D]) -> void:
|
|
textures_taper_corner_right = a
|
|
emit_changed()
|
|
|
|
func _set_randomize_texture(b: bool) -> void:
|
|
randomize_texture = b
|
|
emit_changed()
|
|
|
|
|
|
func _set_use_corner(b: bool) -> void:
|
|
use_corner_texture = b
|
|
emit_changed()
|
|
|
|
|
|
func _set_use_taper(b: bool) -> void:
|
|
use_taper_texture = b
|
|
emit_changed()
|
|
|
|
|
|
func _set_fit_texture(fitmode: FITMODE) -> void:
|
|
fit_mode = fitmode
|
|
emit_changed()
|
|
|
|
|
|
func _set_material(m: Material) -> void:
|
|
material = m
|
|
emit_changed()
|
|
|
|
|
|
###########
|
|
# GETTERS #
|
|
###########
|
|
func get_texture(idx: int) -> Texture2D:
|
|
return _get_element(idx, textures)
|
|
|
|
|
|
func get_texture_corner_inner(idx: int) -> Texture2D:
|
|
return _get_element(idx, textures_corner_inner)
|
|
|
|
|
|
func get_texture_corner_outer(idx: int) -> Texture2D:
|
|
return _get_element(idx, textures_corner_outer)
|
|
|
|
|
|
func get_texture_taper_left(idx: int) -> Texture2D:
|
|
return _get_element(idx, textures_taper_left)
|
|
|
|
|
|
func get_texture_taper_right(idx: int) -> Texture2D:
|
|
return _get_element(idx, textures_taper_right)
|
|
|
|
|
|
func get_texture_taper_corner_left(idx: int) -> Texture2D:
|
|
return _get_element(idx, textures_taper_corner_left)
|
|
|
|
|
|
func get_texture_taper_corner_right(idx: int) -> Texture2D:
|
|
return _get_element(idx, textures_taper_corner_right)
|
|
|
|
|
|
#########
|
|
# USAGE #
|
|
#########
|
|
|
|
## Returns main texture used to visually identify this edge material
|
|
func get_icon_texture() -> Texture2D:
|
|
if not textures.is_empty():
|
|
return textures[0]
|
|
return null
|
|
|
|
|
|
############
|
|
# INTERNAL #
|
|
############
|
|
func _get_element(idx: int, a: Array) -> Variant:
|
|
if a.is_empty():
|
|
return null
|
|
return a[_adjust_idx(idx, a)]
|
|
|
|
|
|
func _adjust_idx(idx: int, a: Array) -> int:
|
|
return idx % a.size()
|