Skip to content

Commit 6f2faf6

Browse files
authored
Merge pull request #40 from lufterc/property-export-options
Add info about property attribute options
2 parents 7df7ad9 + c1641f2 commit 6f2faf6

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

src/rust-binding/properties.md

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,71 @@ print("enemies: ", api.enemy_count)
1818
```
1919

2020
That's it.
21+
22+
## Export options
23+
24+
The `#[property]` attribute can accept a several options to refine the export behavior.
25+
26+
You can specify default property value with the following argument:
27+
28+
```rust
29+
#[property(default = 10)]
30+
enemy_count: i32,
31+
```
32+
33+
If you need to hide this property in Godot editor, use `no_editor` option:
34+
35+
```rust
36+
#[property(no_editor)]
37+
enemy_count: i32,
38+
```
39+
40+
## Property access hooks
41+
42+
You can add hooks to call methods before and after property value was retrieved or changed.
43+
44+
Note that unlike [GDScript's `setget` keyword](https://docs.godotengine.org/en/3.3/getting_started/scripting/gdscript/gdscript_basics.html?#setters-getters), this does _not_ register a custom setter or getter. Instead, it registers a callback which is invoked _before or after_ the set/get occurs, and lacks both parameter and return value.
45+
46+
```rust
47+
#[derive(NativeClass, Default)]
48+
#[inherit(Node)]
49+
struct GodotApi {
50+
// before get
51+
#[property(before_get = "Self::before_get")]
52+
prop_before_get: i32,
53+
54+
// before set
55+
#[property(before_set = "Self::before_set")]
56+
prop_before_set: i32,
57+
58+
// after get
59+
#[property(after_get = "Self::after_get")]
60+
prop_after_get: i32,
61+
62+
// after set
63+
#[property(after_set = "Self::after_set")]
64+
prop_after_set: i32,
65+
}
66+
67+
impl GodotApi {
68+
fn new(_owner: &Node) -> Self {
69+
Self::default()
70+
}
71+
72+
fn before_get(&self, _owner: TRef<Node>) {
73+
godot_print!("Before get");
74+
}
75+
76+
fn before_set(&self, _owner: TRef<Node>) {
77+
godot_print!("Before set");
78+
}
79+
80+
fn after_get(&self, _owner: TRef<Node>) {
81+
godot_print!("After get");
82+
}
83+
84+
fn after_set(&self, _owner: TRef<Node>) {
85+
godot_print!("After set");
86+
}
87+
}
88+
```

0 commit comments

Comments
 (0)