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,
Gdnow always hasDerefandDerefMut, 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.baseinstead ofselfis a real issue in practice. However, it comes with quite a few advantages:
- It’s easier to keep the user object
selfand the Godot objectself.baseapart, 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/DerefMutonT, we don’t impose an implementation.- We don’t cause compilation errors due to orphan rule, if
Tlives 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 # to comment.


