/*
* Copyright (C) Oscar Shrimpton 2020
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see .
*/
//! The thing you play on and all the associated state.
use legion::systems::Builder;
use legion::*;
/// A loaded world.
pub struct Session {
pub world: World,
resources: Resources,
schedule: Schedule,
}
impl Session {
/// Create a new world from a level.
/// The level can be any format, as long as it has the required features of a bsp.
pub fn new(
add_resources: R,
add_systems: S,
) -> Session {
let world = World::default();
let mut resources = Resources::default();
add_resources(&mut resources);
let mut schedule = Schedule::builder();
add_systems(&mut schedule);
let schedule = schedule.build();
Session {
world,
resources,
schedule,
}
}
pub fn do_update(&mut self) {
self.schedule.execute(&mut self.world, &mut self.resources);
}
}