From fabcff5a65d273d4255c1af942eb4e365b6db54d Mon Sep 17 00:00:00 2001 From: Michael Huebner Date: Tue, 25 Mar 2025 13:51:08 +0100 Subject: [PATCH] Continue fixing (part 2) --- src/board.rs | 36 ++-- src/game.rs | 497 +++++++++++++++++++++++++-------------------------- 2 files changed, 257 insertions(+), 276 deletions(-) diff --git a/src/board.rs b/src/board.rs index 9737611..06fbb50 100644 --- a/src/board.rs +++ b/src/board.rs @@ -1,4 +1,4 @@ -use std::sync::{Arc, Mutex}; +use std::sync::Arc; use anyhow::Result; use engine::prelude::{ @@ -14,7 +14,7 @@ pub struct BoardSlot { pub y: usize, pub z: usize, - state: Mutex, + state: BoardSlotState, pub position: Vector2, pub slot_marker: Option, } @@ -49,7 +49,7 @@ impl BoardSlot { y, z, - state: Mutex::new(BoardSlotState::default()), + state: BoardSlotState::default(), position, slot_marker: Some(world.add_entity(marker)?), }) @@ -61,7 +61,7 @@ impl BoardSlot { y, z, - state: Mutex::new(BoardSlotState::Invalid), + state: BoardSlotState::Invalid, position: vec2(0.0, 0.0), slot_marker: None, } @@ -106,30 +106,30 @@ impl BoardSlot { } pub fn state(&self) -> BoardSlotState { - *self.state.lock().unwrap() + self.state } - pub fn set_state(&self, state: BoardSlotState) { - *self.state.lock().unwrap() = state; + pub fn set_state(&mut self, state: BoardSlotState) { + self.state = state; } pub fn valid(&self) -> bool { - *self.state.lock().unwrap() != BoardSlotState::Invalid + self.state != BoardSlotState::Invalid } pub fn is_empty(&self) -> bool { - *self.state.lock().unwrap() == BoardSlotState::Empty + self.state == BoardSlotState::Empty } pub fn white(&self) -> bool { - match *self.state.lock().unwrap() { + match self.state { BoardSlotState::White(_) => true, _ => false, } } pub fn black(&self) -> bool { - match *self.state.lock().unwrap() { + match self.state { BoardSlotState::Black(_) => true, _ => false, } @@ -277,13 +277,13 @@ impl Board { &mut self.slots } - pub fn close_to_marker(&mut self, position: Vector2) -> Option<&mut BoardSlot> { + pub fn close_to_marker(&self, position: Vector2) -> Option<&BoardSlot> { const DISTANCE: f32 = 1.25; - for outer in self.slots.iter_mut() { - for inner in outer.iter_mut() { - for slot in inner.iter_mut() { - if *slot.state.lock().unwrap() != BoardSlotState::Invalid { + for outer in self.slots.iter() { + for inner in outer.iter() { + for slot in inner.iter() { + if slot.state != BoardSlotState::Invalid { if (slot.position - position).magnitude() <= DISTANCE { return Some(slot); } @@ -349,9 +349,7 @@ impl Board { _ => unreachable!(), } { - let neighbour_state = neighbour.state.lock().unwrap(); - - match *neighbour_state { + match neighbour.state { BoardSlotState::Empty => { neighbours.push(neighbour); } diff --git a/src/game.rs b/src/game.rs index 296b0dd..10c1772 100644 --- a/src/game.rs +++ b/src/game.rs @@ -244,13 +244,6 @@ impl MillGame { sun_light.set_position(vec3(0.0, 0.0, 100.0))?; sun_light.set_power(10000000000.0)?; - let scene = world.resources.get_mut::(); - scene.add_light(sun_light)?; - - let view = scene.view_mut(); - view.camera_mut().set_center(board.center()); - view.update_buffer()?; - let white_stones = Self::init_nine_stones(world, Color::White)? .into_iter() .enumerate() @@ -283,29 +276,38 @@ impl MillGame { .try_into() .unwrap_or_else(|_: Vec| unreachable!("create array from vec from an array")); - let mut camera_control = TopDownCameraControl::new(&mut scene)?; + let scene = world.resources.get_mut::(); + scene.add_light(sun_light)?; + + let view = scene.view_mut(); + view.camera_mut().set_center(board.center()); + view.update_buffer()?; + + let mut camera_control = TopDownCameraControl::new(view)?; camera_control.set_zoom_levels( (3..60).into_iter().rev().map(|z| z as f32).collect(), 5, - &mut scene, + view, )?; world.resources.insert(camera_control); - let gui = GuiBuilder::new( - engine.gui_handler(), - &AssetPath::from(( - engine.settings().resource_base_path.as_str(), - "mainmenu.xml", - )), - )?; + let path = AssetPath::from(( + world + .resources + .get::() + .resource_base_path + .as_str(), + "mainmenu.xml", + )); + let gui = GuiBuilder::new(world, &path)?; let grid: Arc = gui.element("grid")?; let white_player_label: Arc