refactoring 2

This commit is contained in:
Niko Abeler 2023-01-01 21:11:38 +01:00
parent 26700b9277
commit f8b994e6b2
2 changed files with 104 additions and 0 deletions

46
Arch.md Normal file
View File

@ -0,0 +1,46 @@
- Use ECS?
- World
- Creatures
- Human
- Animal
- Monster
- Sites
- Towns
- Dungeons
- Caves
- Ruins
- Tavern
- Items
- Weapons
- Armor
- Food
- Potions
- Scrolls
- Books
- Gems
- Artifacts
- Creatures need agency
- Need to be able to move around
- Need to be able to interact with the world
- Need to be able to interact with other creatures
- Need to be able to interact with items
- Need to be able to interact with sites
- Need an inventory
- Sites
- Need an inventory
- Items
- Need to know their history
## Step System
- For each creature
- create clone
- run creature step
- return list of actions
- run actions
- update creature

58
src/game.rs Normal file
View File

@ -0,0 +1,58 @@
use crate::state::GameState;
/**
* This is the main game struct.
* It takes care of stepping the game forward.
* Changes are made to the state struct through the step function.
*/
pub struct Game {
pub state: GameState,
}
impl Game {
pub fn new(state: GameState) -> Game {
Game {
state: state,
}
}
pub fn step(&mut self) {
// get list of all people ids
let ids: Vec<u32> = self.state.people.keys().map(|id| *id).collect();
// step each person
for id in ids {
let person = self.state.people.get_mut(&id);
match person {
Some(p) => {
let mut p = p.clone();
p.step(&mut self.state);
self.state.people.insert(id, p);
},
// person is dead
None => (),
}
}
// increment time
self.state.time.time += 1;
}
}
#[cfg(test)]
mod tests {
use crate::world::World;
use super::*;
#[test]
fn test_step() {
let state = GameState::new(World::new(100));
let mut game = Game::new(state);
game.step();
assert_eq!(game.state.time.time, 1);
}
}