use std::time::Duration; use bevy::prelude::*; use serde::{Deserialize, Serialize}; use super::prelude::*; #[derive(Debug, Default, Resource, Serialize, Deserialize, Reflect)] #[reflect(Resource)] pub struct GameWorld { pub sites: Vec, pub travel_groups: Vec, } impl GameWorld { pub fn advance_time(&mut self, time: Duration) { for site in self.sites.iter_mut() { site.advance_time(time); } for travel_group in self.travel_groups.iter_mut() { travel_group.advance_time(time); } } pub fn generate_mock(defs: &Definitions) -> Self { let cave_def = defs.sites.get("CAVE").unwrap(); let mut site = Site::generate_from_def(cave_def); site.populate_randomly(&defs.creatures.values().collect::>()); let bandit_def = defs.creatures.get("BANDIT").unwrap(); let spider_def = defs.creatures.get("SPIDER").unwrap(); let cave = Site::new( cave_def.clone(), "Gorbo's cave", vec![ SiteArea::from_creatures(&vec![ Creature::generate_from_def(defs.creatures.get("DRAGON").unwrap().clone()), Creature::generate_from_def( defs.creatures.get("INDESTRUCTIBLE").unwrap().clone(), ), ]), SiteArea::from_creatures(&vec![ Creature::generate_from_def(bandit_def.clone()), Creature::generate_from_def(spider_def.clone()), ]), SiteArea::from_creatures(&vec![ Creature::generate_from_def(bandit_def.clone()), Creature::generate_from_def(bandit_def.clone()), Creature::generate_from_def(bandit_def.clone()), ]), SiteArea::from_creatures(&vec![ Creature::generate_from_def(spider_def.clone()), Creature::generate_from_def(spider_def.clone()), ]), ], ); let group = TravelGroup::new( vec![ Creature::generate_from_def(bandit_def.clone()), Creature::generate_from_def(bandit_def.clone()), Creature::generate_from_def(bandit_def.clone()), ], WorldCoords { x: 0, y: 0 }, Some(WorldPoint::Coords(WorldCoords { x: 0, y: 0 })), Some(WorldPoint::Site(cave.id())), ); Self { sites: vec![cave], travel_groups: vec![group], } } }