moved simulate and render to world
This commit is contained in:
+48
-1
@@ -1,5 +1,6 @@
|
||||
use crate::Screen;
|
||||
use crate::{Screen, BoardCommand};
|
||||
use crate::Point;
|
||||
use crate::{Entities, Queen};
|
||||
use std::collections::HashSet;
|
||||
|
||||
#[derive(Clone)]
|
||||
@@ -29,3 +30,49 @@ impl World {
|
||||
.collect()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn render(e: &Entities, w: &World, b: &Screen) {
|
||||
|
||||
for c in w.cleared.iter() {
|
||||
b.render(c, "x");
|
||||
}
|
||||
|
||||
for a in e.data.values() {
|
||||
a.render(b);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn simulate(e: &mut Entities, w: &mut World, b: &mut Screen) {
|
||||
let cmds: Vec<BoardCommand> = e
|
||||
.data
|
||||
.values_mut()
|
||||
.map(|a| a.step(b, &w))
|
||||
.collect();
|
||||
|
||||
for cmd in cmds {
|
||||
match cmd {
|
||||
BoardCommand::Move(old_pos, pos) => {
|
||||
// still makes no difference
|
||||
// occupied needs to be updated as soon as the move is made...
|
||||
w.occupied.remove(&old_pos);
|
||||
w.occupied.insert(pos);
|
||||
}
|
||||
BoardCommand::Dig(pos) => {
|
||||
w.clear(pos);
|
||||
}
|
||||
BoardCommand::LayEgg(pos, id) => {
|
||||
e.add_egg(pos.0, pos.1, id);
|
||||
}
|
||||
BoardCommand::Hatch(egg_id, queen_id) => {
|
||||
let egg = e.data.remove(&egg_id);
|
||||
let pos = egg.unwrap().get_position();
|
||||
|
||||
let q = e.data.get_mut(&queen_id).unwrap();
|
||||
let queen: &mut Queen = q.downcast_mut::<Queen>().unwrap();
|
||||
queen.egg_count -= 1;
|
||||
e.add_ant(pos.0, pos.1);
|
||||
}
|
||||
BoardCommand::Noop => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-47
@@ -16,55 +16,9 @@ mod lib {
|
||||
|
||||
use lib::point::Point;
|
||||
use lib::screen::{init_screen, BoardCommand, Screen};
|
||||
use lib::world::World;
|
||||
use lib::world::{World, simulate, render};
|
||||
use lib::entity::{Queen, Entities};
|
||||
|
||||
fn render(e: &Entities, w: &World, b: &Screen) {
|
||||
for c in w.cleared.iter() {
|
||||
b.render(c, "x");
|
||||
}
|
||||
|
||||
for a in e.data.values() {
|
||||
a.render(b);
|
||||
}
|
||||
}
|
||||
|
||||
fn simulate(e: &mut Entities, w: &mut World, b: &mut Screen) {
|
||||
let cmds: Vec<BoardCommand> = e
|
||||
.data
|
||||
.values_mut()
|
||||
.map(|a| a.step(b, &w))
|
||||
.collect();
|
||||
|
||||
for cmd in cmds {
|
||||
match cmd {
|
||||
BoardCommand::Move(old_pos, pos) => {
|
||||
// still makes no difference
|
||||
// occupied needs to be updated as soon as the move is made...
|
||||
w.occupied.remove(&old_pos);
|
||||
w.occupied.insert(pos);
|
||||
}
|
||||
BoardCommand::Dig(pos) => {
|
||||
w.clear(pos);
|
||||
}
|
||||
BoardCommand::LayEgg(pos, id) => {
|
||||
e.add_egg(pos.0, pos.1, id);
|
||||
}
|
||||
BoardCommand::Hatch(egg_id, queen_id) => {
|
||||
let egg = e.data.remove(&egg_id);
|
||||
let pos = egg.unwrap().get_position();
|
||||
|
||||
let q = e.data.get_mut(&queen_id).unwrap();
|
||||
let queen: &mut Queen = q.downcast_mut::<Queen>().unwrap();
|
||||
queen.egg_count -= 1;
|
||||
e.add_ant(pos.0, pos.1);
|
||||
}
|
||||
BoardCommand::Noop => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fn main() {
|
||||
let mut board = init_screen();
|
||||
let mut world = World::new();
|
||||
|
||||
Reference in New Issue
Block a user