diff --git a/src/board.rs b/src/board.rs index 56dd2d2..884b39e 100644 --- a/src/board.rs +++ b/src/board.rs @@ -10,6 +10,10 @@ use crate::{game::MillGame, objects::Objects}; #[derive(Debug, PartialEq, Clone, Copy)] pub struct BoardSlot { + pub x: usize, + pub y: usize, + pub z: usize, + pub state: BoardSlotState, pub position: Vector2, pub slot_marker: Option, @@ -18,7 +22,13 @@ pub struct BoardSlot { impl BoardSlot { pub const SLOT_MARKER_SIZE: f32 = 1.5; - pub fn new(position: Vector2, scene: &mut Scene) -> Result { + pub fn new( + x: usize, + y: usize, + z: usize, + position: Vector2, + scene: &mut Scene, + ) -> Result { let mut marker = scene.engine().assets().empty_entity(); let meshes = vec![Self::create_mesh(&scene.engine(), Color::Black)?]; @@ -31,14 +41,22 @@ impl BoardSlot { marker.insert_component(location); Ok(Self { + x, + y, + z, + state: BoardSlotState::default(), position, slot_marker: Some(scene.add_entity(marker)?), }) } - pub fn invalid() -> Self { + pub fn invalid(x: usize, y: usize, z: usize) -> Self { Self { + x, + y, + z, + state: BoardSlotState::Invalid, position: vec2(0.0, 0.0), slot_marker: None, @@ -147,53 +165,53 @@ impl Board { slots = Some([ [ [ - BoardSlot::new(vec2(-15.0, -15.0), scene)?, // 0 0 0 - BoardSlot::new(vec2(-10.0, -10.0), scene)?, // 0 0 1 - BoardSlot::new(vec2(-5.0, -5.0), scene)?, // 0 0 2 + BoardSlot::new(0, 0, 0, vec2(-15.0, -15.0), scene)?, // 0 0 0 + BoardSlot::new(0, 0, 1, vec2(-10.0, -10.0), scene)?, // 0 0 1 + BoardSlot::new(0, 0, 2, vec2(-5.0, -5.0), scene)?, // 0 0 2 ], [ - BoardSlot::new(vec2(-15.0, 0.0), scene)?, // 0 1 0 - BoardSlot::new(vec2(-10.0, 0.0), scene)?, // 0 1 1 - BoardSlot::new(vec2(-5.0, 0.0), scene)?, // 0 1 2 + BoardSlot::new(0, 1, 0, vec2(-15.0, 0.0), scene)?, // 0 1 0 + BoardSlot::new(0, 1, 1, vec2(-10.0, 0.0), scene)?, // 0 1 1 + BoardSlot::new(0, 1, 2, vec2(-5.0, 0.0), scene)?, // 0 1 2 ], [ - BoardSlot::new(vec2(-15.0, 15.0), scene)?, // 0 2 0 - BoardSlot::new(vec2(-10.0, 10.0), scene)?, // 0 2 1 - BoardSlot::new(vec2(-5.0, 5.0), scene)?, // 0 2 2 + BoardSlot::new(0, 2, 0, vec2(-15.0, 15.0), scene)?, // 0 2 0 + BoardSlot::new(0, 2, 1, vec2(-10.0, 10.0), scene)?, // 0 2 1 + BoardSlot::new(0, 2, 2, vec2(-5.0, 5.0), scene)?, // 0 2 2 ], ], [ [ - BoardSlot::new(vec2(0.0, -15.0), scene)?, // 1 0 0 - BoardSlot::new(vec2(0.0, -10.0), scene)?, // 1 0 1 - BoardSlot::new(vec2(0.0, -5.0), scene)?, // 1 0 2 + BoardSlot::new(1, 0, 0, vec2(0.0, -15.0), scene)?, // 1 0 0 + BoardSlot::new(1, 0, 1, vec2(0.0, -10.0), scene)?, // 1 0 1 + BoardSlot::new(1, 0, 2, vec2(0.0, -5.0), scene)?, // 1 0 2 ], [ - BoardSlot::invalid(), // 1 1 0 - BoardSlot::invalid(), // 1 1 1 - BoardSlot::invalid(), // 1 1 2 + BoardSlot::invalid(1, 1, 0), // 1 1 0 + BoardSlot::invalid(1, 1, 1), // 1 1 1 + BoardSlot::invalid(1, 1, 2), // 1 1 2 ], [ - BoardSlot::new(vec2(0.0, 15.0), scene)?, // 1 2 0 - BoardSlot::new(vec2(0.0, 10.0), scene)?, // 1 2 1 - BoardSlot::new(vec2(0.0, 5.0), scene)?, // 1 2 2 + BoardSlot::new(1, 2, 0, vec2(0.0, 15.0), scene)?, // 1 2 0 + BoardSlot::new(1, 2, 1, vec2(0.0, 10.0), scene)?, // 1 2 1 + BoardSlot::new(1, 2, 2, vec2(0.0, 5.0), scene)?, // 1 2 2 ], ], [ [ - BoardSlot::new(vec2(15.0, -15.0), scene)?, // 2 0 0 - BoardSlot::new(vec2(10.0, -10.0), scene)?, // 2 0 1 - BoardSlot::new(vec2(5.0, -5.0), scene)?, // 2 0 2 + BoardSlot::new(2, 0, 0, vec2(15.0, -15.0), scene)?, // 2 0 0 + BoardSlot::new(2, 0, 1, vec2(10.0, -10.0), scene)?, // 2 0 1 + BoardSlot::new(2, 0, 2, vec2(5.0, -5.0), scene)?, // 2 0 2 ], [ - BoardSlot::new(vec2(15.0, 0.0), scene)?, // 2 1 0 - BoardSlot::new(vec2(10.0, 0.0), scene)?, // 2 1 1 - BoardSlot::new(vec2(5.0, 0.0), scene)?, // 2 1 2 + BoardSlot::new(2, 1, 0, vec2(15.0, 0.0), scene)?, // 2 1 0 + BoardSlot::new(2, 1, 1, vec2(10.0, 0.0), scene)?, // 2 1 1 + BoardSlot::new(2, 1, 2, vec2(5.0, 0.0), scene)?, // 2 1 2 ], [ - BoardSlot::new(vec2(15.0, 15.0), scene)?, // 2 2 0 - BoardSlot::new(vec2(10.0, 10.0), scene)?, // 2 2 1 - BoardSlot::new(vec2(5.0, 5.0), scene)?, // 2 2 2 + BoardSlot::new(2, 2, 0, vec2(15.0, 15.0), scene)?, // 2 2 0 + BoardSlot::new(2, 2, 1, vec2(10.0, 10.0), scene)?, // 2 2 1 + BoardSlot::new(2, 2, 2, vec2(5.0, 5.0), scene)?, // 2 2 2 ], ], ]); diff --git a/src/game.rs b/src/game.rs index b4b307f..a001139 100644 --- a/src/game.rs +++ b/src/game.rs @@ -1,5 +1,5 @@ use std::sync::{ - atomic::{AtomicU32, Ordering::SeqCst}, + atomic::{AtomicBool, AtomicU32, Ordering::SeqCst}, Arc, Mutex, MutexGuard, }; @@ -76,6 +76,8 @@ pub struct MillGame { mouse_x: AtomicU32, mouse_y: AtomicU32, + turn_finished: AtomicBool, + simple_ai: SimpleAI, white_player_label: Arc