diff --git a/core/IvmiNode.gd b/core/IvmiNode.gd index a53a245e3547f70f615c1c9064c8ae0ce21d5a9e..cf7cb809962423233811576d078bba70c234ed04 100644 --- a/core/IvmiNode.gd +++ b/core/IvmiNode.gd @@ -46,18 +46,9 @@ func declare() : func _allow_send_data(value : bool): _send_data = value -func _add_property(prop, values) : +func _add_property(prop, values) -> void : _properties[prop] = load("res://addons/ivmi-builder/core/IvmiProperty.gd").new() - _properties[prop].set_values(values) - var tags = "" - for v in values : - if v is float : - tags+="f" - elif v is int : - tags+="f" - elif v is String : - tags+="s" - _properties[prop].set_tags(tags) + _properties[prop].init_values(values) _properties[prop].set_ivmi_node(self) _properties[prop].set_name(prop) diff --git a/core/IvmiProperty.gd b/core/IvmiProperty.gd index 49a26bec2d7c1181fa03dd4f38a1b8aff5d513bb..4316385dcc86814bb43e91539a16415a04041fbf 100644 --- a/core/IvmiProperty.gd +++ b/core/IvmiProperty.gd @@ -11,16 +11,33 @@ var _tags = "" var _immediate = false var _ivmi_node = null -func set_values(vals) : - for v in range(0, min(_values.size(), vals.size())) : - if vals[v] != _values[v] : - _changed=true - _values.assign(vals) + +func set_values(vals : Array) : + if vals.size() == _values.size() : + for v in range(0, min(_values.size(), vals.size())) : + if vals[v] != _values[v] : + _changed=true + _values.assign(vals) + else : + init_values(vals) if _immediate and _listen : _changed = false _ivmi_node.send_prop(_name) +func init_values(vals : Array) : + var tags = "" + for v in vals : + if v is float : + tags+="f" + elif v is int : + tags+="f" + elif v is String : + tags+="s" + set_tags(tags) + _values.assign(vals) + _changed=true + func set_tags(t): _tags=t