diff options
Diffstat (limited to 'engine-ecs/src/lib.rs')
| -rw-r--r-- | engine-ecs/src/lib.rs | 39 |
1 files changed, 33 insertions, 6 deletions
diff --git a/engine-ecs/src/lib.rs b/engine-ecs/src/lib.rs index a752f6a..f9e8143 100644 --- a/engine-ecs/src/lib.rs +++ b/engine-ecs/src/lib.rs @@ -22,6 +22,7 @@ use crate::component::{ Info as ComponentInfo, IntoParts as IntoComponentParts, Parts as ComponentParts, + WithAssociatedId, }; use crate::entity::{ Declaration as EntityDeclaration, @@ -59,10 +60,10 @@ use crate::sole::{Single, Sole}; use crate::system::observer::Observer; use crate::system::{ Callbacks, + Function as SystemFunction, Metadata as SystemMetadata, Param as SystemParam, System, - SystemComponent, }; use crate::uid::Uid; @@ -252,6 +253,7 @@ impl World [ sole.into_parts(), EntityName { name: name.into() }.into_parts(), + crate::sole::Is.into_parts(), ], &ComponentAddingFlags { allow_soles: true }, ); @@ -271,7 +273,7 @@ impl World self.create_ent( ent_id, - [SystemComponent { system }.into_parts()].into_iter().chain( + [SystemFunction { system }.into_parts()].into_iter().chain( ObserverT::observed_events() .into_iter() .map(IntoComponentParts::into_parts), @@ -290,7 +292,7 @@ impl World { let (type_erased_system, mut system_callbacks) = system.finish(); - let system_ent_id = self.spawn((SystemComponent { system: type_erased_system },)); + let system_ent_id = self.spawn((SystemFunction { system: type_erased_system },)); system_callbacks.on_created(self, SystemMetadata { ent_id: system_ent_id }); @@ -490,7 +492,7 @@ impl World .into_iter() .filter_map(|phase_has_system| phase_has_system.get_target_ent()) { - let Some(system) = system_entity.get::<SystemComponent>() else { + let Some(system) = system_entity.get::<SystemFunction>() else { cold_path(); continue; }; @@ -666,6 +668,31 @@ impl World &ComponentAddingFlags { allow_soles: false }, ); } + Action::CreateSole(sole_parts) => { + if let Err(EntityAlreadyExistsError) = + self.data.component_storage.create_entity(sole_parts.id) + { + tracing::error!( + name = sole_parts.name, + "Can not create sole that already exists" + ); + continue; + } + + let name = sole_parts.name; + + Self::add_entity_components( + sole_parts.id, + [ + sole_parts, + EntityName { name: name.into() }.into_parts(), + crate::sole::Is.into_parts(), + ], + &mut self.data.component_storage, + &EventSubmitter::new(&self.data.new_events), + &ComponentAddingFlags { allow_soles: true }, + ); + } Action::Stop => { self.stop.store(true, Ordering::Relaxed); } @@ -873,10 +900,10 @@ impl World { assert!(event_id.is_pair()); - let query = Query::<(&SystemComponent,)>::from_flexible_query( + let query = Query::<(&SystemFunction,)>::from_flexible_query( self.flexible_query( QueryTerms::<QUERY_MAX_TERM_CNT>::builder() - .present([SystemComponent::id(), event_id]) + .present([SystemFunction::id(), event_id]) .build(), ), ); |
