init
This commit is contained in:
87
addons/curved_lines_2d/scalable_arc_list.gd
Normal file
87
addons/curved_lines_2d/scalable_arc_list.gd
Normal file
@@ -0,0 +1,87 @@
|
||||
@tool
|
||||
class_name ScalableArcList
|
||||
extends Resource
|
||||
|
||||
@export var arcs : Array[ScalableArc] = []:
|
||||
set(_arcs):
|
||||
arcs = _arcs
|
||||
for i in arcs.size():
|
||||
if arcs[i] == null:
|
||||
arcs[i] = ScalableArc.new()
|
||||
emit_changed()
|
||||
|
||||
|
||||
func _init(a : Array[ScalableArc] = []) -> void:
|
||||
arcs = a
|
||||
if not changed.is_connected(_on_changed):
|
||||
changed.connect(_on_changed)
|
||||
_on_changed()
|
||||
|
||||
|
||||
func _get(property: StringName) -> Variant:
|
||||
var components := property.split("/", true, 2)
|
||||
if components.size() >= 2:
|
||||
var arc_idx := components[0].trim_prefix("arc_").to_int()
|
||||
if arc_idx >= arcs.size():
|
||||
return null
|
||||
var arc := arcs[arc_idx]
|
||||
if components[1] in arc:
|
||||
return arc[components[1]]
|
||||
return null
|
||||
return null
|
||||
|
||||
|
||||
func _set(property: StringName, value: Variant) -> bool:
|
||||
var components := property.split("/", true, 2)
|
||||
if components.size() >= 2:
|
||||
var arc_idx := components[0].trim_prefix("arc_").to_int()
|
||||
if arc_idx >= arcs.size():
|
||||
return false
|
||||
var arc := arcs[arc_idx]
|
||||
if components[1] in arc:
|
||||
arc[components[1]] = value
|
||||
return true
|
||||
return false
|
||||
|
||||
|
||||
func _on_changed():
|
||||
for a : ScalableArc in arcs:
|
||||
if a and not a.changed.is_connected(_item_changed):
|
||||
a.changed.connect(_item_changed)
|
||||
|
||||
|
||||
func _item_changed():
|
||||
emit_changed()
|
||||
|
||||
|
||||
func remove_arc_for_point(p_idx : int) -> void:
|
||||
arcs = arcs.filter(func(a): return a.start_point != p_idx)
|
||||
emit_changed()
|
||||
|
||||
|
||||
func add_arc(arc : ScalableArc) -> void:
|
||||
arcs.append(arc)
|
||||
_on_changed()
|
||||
emit_changed()
|
||||
|
||||
|
||||
func get_arc_for_point(p_idx : int) -> ScalableArc:
|
||||
var idx = arcs.find_custom(func(a : ScalableArc): return a.start_point == p_idx)
|
||||
if idx > -1:
|
||||
return arcs[idx]
|
||||
else:
|
||||
return null
|
||||
|
||||
|
||||
func handle_point_added_at_index(new_idx) -> void:
|
||||
for a : ScalableArc in arcs:
|
||||
if a.start_point >= new_idx:
|
||||
a.start_point += 1
|
||||
|
||||
|
||||
func handle_point_removed_at_index(removed_idx) -> void:
|
||||
for a : ScalableArc in arcs:
|
||||
if a.start_point == removed_idx or a.start_point + 1 == removed_idx:
|
||||
remove_arc_for_point(a.start_point)
|
||||
elif a.start_point >= removed_idx:
|
||||
a.start_point -= 1
|
||||
Reference in New Issue
Block a user