TitanNano

joined 2 years ago
 

Godot Fest in Munich just ended, and it was a blast. There were numerous great talks, and you can already see most of them on the media site of the Chaos Computer Club, as they were providing the recording infrastructure and team.

https://media.ccc.de/c/godotfest2025

I met plenty of interesting people there who were eager to talk about a wide range of topics.

[โ€“] TitanNano@vger.social 1 points 1 month ago

In the initial implementation, export groups have been added as an independent attribute. One attribute creates groups, and the other marks fields for exporting. So yes, this is not being auto-inferred right now, but it could probably be added.

 

๐ŸŒป Highlights

  • PhantomVar<T> for properties without a backing field
  • Base::to_init_gd() to access pointer during initialization
  • Gd::try_dynify() for runtime trait downcast
  • Further improvements to match_class! dispatch

๐Ÿ“š Further reading

Full Changelog.

 

godot-rust v0.3 brings type-safe signals to the table.
If you register a signal:

#[signal]
fn damage_taken(amount: i32);

you can now freely connect it with other Rust functions:

fn ready(&mut self) {
    // Connect signal to the method:
    self.signals().damage_taken().connect(Self::on_damage_taken);
    
    // Or to an ad-hoc closure:
    self.signals().damage_taken().connect(|amount| {
        println!("Damage taken: {}", amount);
    });
    
    // Or to a method of another object:
    let stats: Gd<Stats>;
    self.signals().damage_taken().connect_other(&stats, |stats, amount| {
        stats.update_total_damage(amount);
    });
}

Emitting is also type-safe:

self.signals().damage_taken().emit(42);

Furthermore, you can now await signals, effectively introducing async tasks:

godot::task::spawn(async move {
    godot_print!("Wait for damage to occur...");
    
    let (dmg,) = player.signals().damage_taken().to_future().await;
    godot_print!("Player took {dmg} damage.");
});

There are many other improvements, see devlog and feel free to ask me anything :)

Huge thanks to all the contributors who helped ship these features!

~this was originally posted by @bromeon@mastodon.gamedev.place the project author on reddit. I'm just maintaining some parts of the project.~