From Bromeon:
"Small API change with https://github.com/godot-rust/gdext/pull/370.
There is no more implicit base in user methods, to make a clearer separation between the Rust object (
self
) and the Godot one (self.base
).
fn method(&self) {
// instead of:
let pos = self.get_position();
// now:
let pos = self.base.get_position();
}
On the other hand,
Gd
now always hasDeref
andDerefMut
, not only for Godot objects.
fn free_function() {
let obj: Gd = ...;
// instead of:
let pos = obj.bind().get_position(); // or
let pos = obj.upcast::().get_position();
// now:
let pos = obj.get_position();
}
I also improved some safety around the internal instance storage in the process.
In the near future, we need to observe whether the slightly more verbose
self.base
instead ofself
is a real issue in practice. However, it comes with quite a few advantages:
- It’s easier to keep the user object
self
and the Godot objectself.base
apart, when not all symbols are in one namespace.- It’s less tempting to do
gd.bind_mut().get_position()
.
- Now it would be
gd.bind_mut().base.get_position()
– however one can as well dogd.get_position()
directly. The user is encouraged in the right direction.- Users can implement their own custom
Deref
/DerefMut
onT
, we don’t impose an implementation.- We don’t cause compilation errors due to orphan rule, if
T
lives in another crate.So if you want to update, keep in mind that this has not yet fully settled and may see some changes again 😉"
You must log in or register to comment.