74 lines
2.6 KiB
Rust
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],
|
|
}
|
|
}
|
|
}
|