Attention | Topic was automatically imported from the old Question2Answer platform. | |
Asked By | thornySoap |
What do I do wrong or misunderstand here?
Node1:
extends Node
var my_var: int
func _set(property: StringName, value: Variant) -> bool:
print(property, " ", value)
if property == "my_var" and value is int:
my_var = 5
return true
RootNode:
extends Node
func _ready() -> void:
$Node1.my_var = 7
print($Node1.my_var)
output:
7
output I would like to have:
my_var 7
5
You didn’t actually call _set
, which is defined as a (private) function of whatever the script is attached to (Node1
).
Perhaps you meant to write a setter and getter? The syntax is as described in the doc.
var my_var: int:
get:
return my_var
set(value):
my_var = 5 # ignoring 'value' here, seems you want to '5'?
spaceyjase | 2023-05-26 14:59
Of course everything works fine, if I directly call _set, but I thought _set is called automatically to “customize the behavior of set” (docs).
thornySoap | 2023-05-26 15:17
Ah, I see. Not quite… you still need to call set
for the property.
func _ready() -> void:
$Node1.set("my_var", 7)
print($Node1.my_var) # prints 5
Node1:
var _my_var: int
func _set(property, _value):
if property == "my_var":
_my_var = 5
func _get(property):
if property == "my_var":
return _my_var
The previous code ($Node1.my_var
) pokes directly at the index member and won’t run the _set
override. I believe a combination of tool scripts and _get_property_list
might allow some sensible syntax (e.g. node.my_var
) but I’m not sure.
spaceyjase | 2023-05-26 16:00
Thank you so much. Adding this allowed me to do node.my_var
:
func _get_property_list() -> Array[Dictionary]:
return [{"name": "my_var", "type": TYPE_INT}]
It seems like I have confused some things in my actual project (not this test thing) where I already used _get_property_list()
for something. But because I wanted to use _set()
for another real attribute which of course doesn’t work because you then have to define a setter, I thought those fake attributes also wouldn’t work, even though they actually did.
thornySoap | 2023-05-26 17:55