adventure-sim-rs/src/sim/world.rs

74 lines
2.6 KiB
Rust

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<Site>,
pub travel_groups: Vec<TravelGroup>,
}
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::<Vec<_>>());
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],
}
}
}