1
2
Fork 0
mirror of https://github.com/mat-1/azalea.git synced 2025-08-02 06:16:04 +00:00

Wait for plugins to load before starting the ECS (#212)

* Wait for plugins to load before starting the ECS

Also runs `App:finish()` after plugins finish loading.

* Forgot to run `App::cleanup()`

Oops haha

* copy a check from bevy and don't busywait

---------

Co-authored-by: mat <git@matdoes.dev>
This commit is contained in:
EightFactorial 2025-03-24 21:30:33 -07:00 committed by GitHub
parent 656162d218
commit b25474ad66
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -4,6 +4,7 @@ use std::{
io,
net::SocketAddr,
sync::Arc,
thread,
time::{Duration, Instant},
};
@ -39,7 +40,7 @@ use azalea_protocol::{
resolver,
};
use azalea_world::{Instance, InstanceContainer, InstanceName, PartialInstance};
use bevy_app::{App, Plugin, PluginGroup, PluginGroupBuilder, Update};
use bevy_app::{App, Plugin, PluginGroup, PluginGroupBuilder, PluginsState, Update};
use bevy_ecs::{
bundle::Bundle,
component::Component,
@ -60,7 +61,7 @@ use tokio::{
},
time,
};
use tracing::{debug, error};
use tracing::{debug, error, info};
use uuid::Uuid;
use crate::{
@ -880,6 +881,21 @@ pub fn start_ecs_runner(
run_schedule_receiver: mpsc::Receiver<()>,
run_schedule_sender: mpsc::Sender<()>,
) -> Arc<Mutex<World>> {
// this block is based on Bevy's default runner:
// https://github.com/bevyengine/bevy/blob/390877cdae7a17095a75c8f9f1b4241fe5047e83/crates/bevy_app/src/schedule_runner.rs#L77-L85
if app.plugins_state() != PluginsState::Cleaned {
// Wait for plugins to load
if app.plugins_state() == PluginsState::Adding {
info!("Waiting for plugins to load ...");
while app.plugins_state() == PluginsState::Adding {
thread::yield_now();
}
}
// Finish adding plugins and cleanup
app.finish();
app.cleanup();
}
// all resources should have been added by now so we can take the ecs from the
// app
let ecs = Arc::new(Mutex::new(std::mem::take(app.world_mut())));