Add lever and jump pad components with activation logic
This commit is contained in:
156
addons/rmsmartshape/materials/edge_material.gd
Normal file
156
addons/rmsmartshape/materials/edge_material.gd
Normal file
@@ -0,0 +1,156 @@
|
||||
@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()
|
Reference in New Issue
Block a user