|
- use specs::{
- saveload::MarkedBuilder, world::EntitiesRes, Builder, Entity, LazyUpdate, World, WorldExt,
- WriteStorage,
- };
-
- use glc::vector::Vector2f;
-
- use crate::{
- components::{MeetingPoint, Position},
- misc::{Persistence, WorldPersistence},
- };
-
- use super::Error;
-
- #[derive(Default, Clone)]
- pub struct MeetingPointBuilder {
- position: Option<Vector2f>,
- }
-
- impl MeetingPointBuilder {
- pub fn build(&self, world: &mut World) -> Result<Entity, Error> {
- let position = self.position.ok_or(Error::MissingValue("position"))?;
-
- let position = Position::new(position);
- let meeting_point = MeetingPoint::new(0.0, 10.0);
-
- let entity = world
- .create_entity()
- .marked::<<WorldPersistence as Persistence>::Marker>()
- .with(position)
- .with(meeting_point)
- .build();
-
- Ok(entity)
- }
-
- pub fn lazy(
- &self,
- lazy: &LazyUpdate,
- entities: &EntitiesRes,
- positions: &mut WriteStorage<'_, Position>,
- meeting_points: &mut WriteStorage<'_, MeetingPoint>,
- ) -> Result<Entity, Error> {
- let position = self.position.ok_or(Error::MissingValue("position"))?;
-
- let position = Position::new(position);
- let meeting_point = MeetingPoint::new(0.0, 10.0);
-
- let entity = lazy
- .create_entity(entities)
- .marked::<<WorldPersistence as Persistence>::Marker>()
- .build();
-
- positions.insert(entity, position)?;
- meeting_points.insert(entity, meeting_point)?;
-
- Ok(entity)
- }
-
- pub fn position<V: Into<Vector2f>>(mut self, value: V) -> Self {
- self.position = Some(value.into());
-
- self
- }
- }
|