|
|
|
use antf::lib::ai::AIGoal;
|
|
|
|
use antf::lib::entity::{Ant, Entities, Food, FoodGenerator};
|
|
|
|
use antf::lib::point::Point;
|
|
|
|
use antf::lib::screen::{init_screen, Screen};
|
|
|
|
use antf::lib::world::{render, simulate, World};
|
|
|
|
|
|
|
|
use ncurses::*;
|
|
|
|
use std::thread::sleep;
|
|
|
|
use std::time;
|
|
|
|
|
|
|
|
// make sure to run with --test-threads 1! otherwise output will be bugged
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_reach_astar() {
|
|
|
|
let mut board = init_screen(); //Screen::new(40,40);
|
|
|
|
let mut world = World::new(&Point(board.max_x, board.max_y));
|
|
|
|
|
|
|
|
let mut entities = Entities::new();
|
|
|
|
|
|
|
|
let a = Ant::new(0, 0);
|
|
|
|
let id = entities.add_entity(&a);
|
|
|
|
|
|
|
|
let a = entities.data.get_mut(&id).unwrap();
|
|
|
|
let ant: &mut Ant = a.downcast_mut::<Ant>().unwrap();
|
|
|
|
/*ant.plan.push(AIGoal::Reach(Point(0, 0)));
|
|
|
|
ant.plan.push(AIGoal::Reach(Point(20, 20)));
|
|
|
|
ant.plan.push(AIGoal::Reach(Point(0, 0)));
|
|
|
|
ant.plan.push(AIGoal::Reach(Point(20, 20)));*/
|
|
|
|
|
|
|
|
// craps out... need to make sure unwrap() is safe
|
|
|
|
for t in 0..420 {
|
|
|
|
// TODO: add way to break out of the loop by hitting a random key
|
|
|
|
simulate(&mut entities, &mut world, &mut board, t);
|
|
|
|
render(&entities, &world, &board);
|
|
|
|
sleep(time::Duration::from_millis(100));
|
|
|
|
refresh();
|
|
|
|
}
|
|
|
|
clear();
|
|
|
|
endwin();
|
|
|
|
}
|
|
|
|
|
|
|
|
/*#[test]
|
|
|
|
fn test_drag() {
|
|
|
|
let mut board = init_screen();
|
|
|
|
let mut world = World::new();
|
|
|
|
|
|
|
|
let mut entities = Entities::new();
|
|
|
|
|
|
|
|
let f = Food::new(10,10);
|
|
|
|
let a = Ant::new(0,0);
|
|
|
|
let fid = entities.add_entity(&f);
|
|
|
|
let id = entities.add_entity(&a);
|
|
|
|
|
|
|
|
let a = entities.data.get_mut(&id).unwrap();
|
|
|
|
let ant: &mut Ant = a.downcast_mut::<Ant>().unwrap();
|
|
|
|
|
|
|
|
//ant.goal =
|
|
|
|
|
|
|
|
for _ in 0..60 {
|
|
|
|
// TODO: add way to break out of the loop by hitting a random key
|
|
|
|
simulate(&mut entities, &mut world, &mut board);
|
|
|
|
render(&entities, &world, &board);
|
|
|
|
sleep(time::Duration::from_millis(100));
|
|
|
|
refresh();
|
|
|
|
}
|
|
|
|
clear();
|
|
|
|
endwin();
|
|
|
|
}*/
|