Joey Eamigh 9989fab018
addons?
2025-10-10 14:07:23 -04:00

93 lines
2.4 KiB
GDScript

@tool
extends Resource
class_name SS2D_Point
@export var position: Vector2 : set = _set_position
@export var point_in: Vector2 : set = _set_point_in
@export var point_out: Vector2 : set = _set_point_out
@export var texture_idx: int = 0 : set = set_texture_idx
@export var flip: bool = false : set = set_flip
@export var width: float = 1.0 : set = set_width
## Deprecated. Exists only for backwards compatibility (scene loading).
## Will always be null when accessed!
## @deprecated
@export_storage var properties: SS2D_VertexProperties : set = _set_properties, get = _get_properties
# If class members are written to, the 'changed' signal may not be emitted
# Signal is only emitted when data is actually changed
# If assigned data is the same as the existing data, no signal is emitted
func _init(pos: Vector2 = Vector2.ZERO) -> void:
position = pos
func equals(other: SS2D_Point) -> bool:
return other and \
position == other.position and \
point_in == other.point_in and \
point_out == other.point_out and \
texture_idx == other.texture_idx and \
flip == other.flip and \
width == other.width
func _set_position(v: Vector2) -> void:
if position != v:
position = v
emit_changed()
func _set_point_in(v: Vector2) -> void:
if point_in != v:
point_in = v
emit_changed()
func _set_point_out(v: Vector2) -> void:
if point_out != v:
point_out = v
emit_changed()
func _set_properties(other: SS2D_VertexProperties) -> void:
if not other: # Happens when duplicate()ing an SS2D_Point
return
if texture_idx != other.texture_idx or flip != other.flip or width != other.width:
# This generates warnings upon scene load but it's unavoidable
SS2D_PluginFunctionality.show_deprecation_warning("SS2D_VertexProperties", "SS2D_Point members", "A scene re-save likely fixes this warning.")
# Copy values to members but leave `properties` null to update scene files.
texture_idx = other.texture_idx
flip = other.flip
width = other.width
func _get_properties() -> SS2D_VertexProperties:
# This will break existing user code (if any), but it's the only effective way to prevent saving and ID changing.
return null
func set_texture_idx(i: int) -> void:
if texture_idx != i:
texture_idx = i
emit_changed()
func set_flip(b: bool) -> void:
if flip != b:
flip = b
emit_changed()
func set_width(w: float) -> void:
if width != w:
width = w
emit_changed()
func _to_string() -> String:
return "<SS2D_Point %s>" % [position]