Crates.io | godot_tokio |
lib.rs | godot_tokio |
version | 0.1.4 |
source | src |
created_at | 2024-11-30 17:40:26.138327 |
updated_at | 2024-12-06 04:42:17.800719 |
description | The tokio-async runtime wrapped in a gdextention object to be used as an engine singleton in your gdext project. |
homepage | |
repository | https://github.com/2-3-5-41/godot_tokio |
max_upload_size | |
id | 1466836 |
size | 5,130 |
This was made to prevent re-typing out the boilerplate for creating a tokio runtime godot object.
You can simply create an engine singleton that makes the Tokio runtime accessable by all godot objects.
#[gdextension]
unsafe impl ExtensionLibrary for Metaphy {
fn on_level_init(level: InitLevel) {
match level {
InitLevel::Scene => {
Engine::singleton().register_singleton(AsyncRuntime::SINGLETON, &AsyncRuntime::new_alloc());
}
_ => (),
}
}
fn on_level_deinit(level: InitLevel) {
match level {
InitLevel::Scene => {
let mut engine = Engine::singleton();
if let Some(async_singleton) = engine.get_singleton(AsyncRuntime::SINGLETON) {
engine.unregister_singleton(AsyncRuntime::SINGLETON);
async_singleton.free();
} else {
godot_warn!(
"Failed to find & free singleton -> {}",
AsyncRuntime::SINGLETON
);
}
}
_ => (),
}
}
}
Then you can access the runtime/singleton like other non-builtin engine singletons.
let singleton_access = AsyncRuntime::singleton(); // returns an Option<Gd<AsyncRuntime>> if you need this.
let runtime_access = AsyncRuntime::runtime(); // returns an Option<Rc<Runtime>> if you want to get to the point.