aboutsummaryrefslogtreecommitdiff
path: root/src/systems.rs
blob: 3f894ec8af4d0b5726fe1c73ae3ea73567248832 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use bevy::{
    prelude::*,
    tasks::{block_on, futures_lite::future},
};

use crate::{components::DirworldEntity, resources::DirworldTasks};

pub fn remove_completed_tasks(mut commands: Commands, mut tasks: ResMut<DirworldTasks>) {
    tasks.retain(|_, task| {
        if task.is_finished() {
            if let Some(Some(mut command_queue)) = block_on(future::poll_once(&mut *task)) {
                commands.append(&mut command_queue);
            }
        }
        !task.is_finished()
    });
}

pub fn sync_entity_transforms(
    mut dirworld_entity_query: Query<(&mut DirworldEntity, Ref<Transform>, &GlobalTransform)>,
) {
    for (mut dirworld_entity, transform, global_transform) in dirworld_entity_query.iter_mut() {
        if transform.is_changed() && !transform.is_added() {
            if let Some(payload) = &mut dirworld_entity.payload {
                let transform = global_transform.compute_transform();
                *payload.transform = transform;
            }
        }
    }
}