From 6d577223d06d87d7ec27e0ac97cec185804864f7 Mon Sep 17 00:00:00 2001 From: Rostyslav Hnatyshyn Date: Tue, 2 Jan 2024 22:55:36 -0700 Subject: [PATCH] cleaner screen init --- src/lib/ai.rs | 6 ++++-- src/lib/screen.rs | 15 +++++++++++++++ src/main.rs | 22 ++++++++-------------- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/lib/ai.rs b/src/lib/ai.rs index 2b53bfa..e519938 100644 --- a/src/lib/ai.rs +++ b/src/lib/ai.rs @@ -26,8 +26,9 @@ impl AI for Ant { } else { let pos = choice.unwrap(); if w.cleared.contains(&pos) { + let old_pos = self.pos; self.pos = pos; - return BoardCommand::Noop; + return BoardCommand::Move(old_pos, pos); } else { return BoardCommand::Dig(pos); } @@ -70,8 +71,9 @@ impl AI for Queen { self.egg_count += 1; return BoardCommand::LayEgg(pos, self.id); } else { + let old_pos = self.pos; self.pos = pos; - return BoardCommand::Noop; + return BoardCommand::Move(old_pos, pos); } } else { return BoardCommand::Noop; diff --git a/src/lib/screen.rs b/src/lib/screen.rs index 51e55b0..ecd94c3 100644 --- a/src/lib/screen.rs +++ b/src/lib/screen.rs @@ -8,6 +8,20 @@ pub struct Screen { use ncurses::*; +pub fn init_screen() -> Screen { + initscr(); + + /* Invisible cursor. */ + curs_set(CURSOR_VISIBILITY::CURSOR_INVISIBLE); + + let mut max_x = 0; + let mut max_y = 0; + + getmaxyx(stdscr(), &mut max_y, &mut max_x); + + Screen::new(max_x, max_y) +} + impl Screen { pub fn new(max_x: i32, max_y: i32) -> Screen { Screen { @@ -60,6 +74,7 @@ fn test_get_valid_movements_board() { pub enum BoardCommand { Dig(Point), + Move(Point, Point), LayEgg(Point, u32), Hatch(u32, u32), Noop, diff --git a/src/main.rs b/src/main.rs index 3bebd96..747faa8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,7 +15,7 @@ mod lib { } use lib::point::Point; -use lib::screen::{BoardCommand, Screen}; +use lib::screen::{init_screen, BoardCommand, Screen}; use lib::world::World; use lib::entity::{Queen, Entities}; @@ -38,6 +38,12 @@ fn simulate(e: &mut Entities, w: &mut World, b: &mut Screen) { 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); } @@ -56,23 +62,11 @@ fn simulate(e: &mut Entities, w: &mut World, b: &mut Screen) { BoardCommand::Noop => {} } } - w.occupied.clear(); - let _ = e.data.values().map(|p| w.occupied.insert(p.get_position())); } fn main() { - initscr(); - - /* Invisible cursor. */ - curs_set(CURSOR_VISIBILITY::CURSOR_INVISIBLE); - - let mut max_x = 0; - let mut max_y = 0; - - getmaxyx(stdscr(), &mut max_y, &mut max_x); - - let mut board = Screen::new(max_x, max_y); + let mut board = init_screen(); let mut world = World::new(); let mut entities = Entities::new();