Merge branch 'main' of ssh://gavania.de:62/hodasemi/ecs
This commit is contained in:
commit
540be64f6a
2 changed files with 24 additions and 6 deletions
|
@ -1,5 +1,8 @@
|
|||
use anyhow::Result;
|
||||
use std::any::{Any, TypeId};
|
||||
use std::{
|
||||
any::{Any, TypeId},
|
||||
time::Duration,
|
||||
};
|
||||
|
||||
use crate::{resources::Resource, world::ComponentChange, *};
|
||||
|
||||
|
@ -13,12 +16,23 @@ enum CommandTypes {
|
|||
InsertResource(TypeId, Box<dyn Resource>),
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct Commands {
|
||||
commands: Vec<CommandTypes>,
|
||||
now: Duration,
|
||||
}
|
||||
|
||||
impl Commands {
|
||||
pub(crate) fn new(now: Duration) -> Self {
|
||||
Self {
|
||||
commands: Vec::new(),
|
||||
now,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn now(&self) -> Duration {
|
||||
self.now
|
||||
}
|
||||
|
||||
pub fn insert_entity(&mut self, entity_object: EntityObject) -> Entity {
|
||||
let entity = entity_object.as_entity();
|
||||
|
||||
|
|
|
@ -493,12 +493,14 @@ impl Archetype {
|
|||
}
|
||||
|
||||
pub fn execute(&self, world: &mut World) -> Result<()> {
|
||||
let mut commands = Commands::new(world.now());
|
||||
|
||||
for (entity, callback) in self.entities.iter() {
|
||||
let mut commands = Commands::default();
|
||||
callback(*entity, &mut commands, world)?;
|
||||
commands.apply_deferred(world)?;
|
||||
}
|
||||
|
||||
commands.apply_deferred(world)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -576,12 +578,14 @@ impl ArchetypePair {
|
|||
}
|
||||
|
||||
pub(crate) fn execute(&self, world: &mut World) -> Result<()> {
|
||||
let mut commands = Commands::new(world.now());
|
||||
|
||||
for ((left_entity, right_entity), callback) in self.entities.iter() {
|
||||
let mut commands = Commands::default();
|
||||
callback(*left_entity, *right_entity, &mut commands)?;
|
||||
commands.apply_deferred(world)?;
|
||||
}
|
||||
|
||||
commands.apply_deferred(world)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue