diff --git a/src/ui/app.rs b/src/ui/app.rs index 979cd87..46f6758 100644 --- a/src/ui/app.rs +++ b/src/ui/app.rs @@ -6,48 +6,12 @@ use crate::{ game::{self, Color::*}, ray::Rays, }, - ui::{draw, piece}, + ui::{ + draw, piece, + worker::{ThreadState, WorkerState}, + }, }; -#[derive(Clone, Debug)] -pub struct ThreadState(Arc>); - -impl Default for ThreadState { - fn default() -> Self { - Self::new() - } -} - -impl ThreadState { - fn new() -> Self { - Self(Arc::new(Mutex::new(ThreadData::new()))) - } - - fn get(&self) -> WorkerState { - self.0.lock().worker_state - } - - fn set_ready(&self, state: game::State) { - let mut lock = self.0.lock(); - lock.worker_state = WorkerState::Ready; - lock.new_state = state; - } - - fn set_working(&self) { - self.0.lock().worker_state = WorkerState::Working; - } - - fn set_done(&self) { - self.0.lock().worker_state = WorkerState::Done; - } - - fn set_and_fetch(&self, worker_state: WorkerState) -> game::State { - let mut lock = self.0.lock(); - lock.worker_state = worker_state; - lock.new_state.clone() - } -} - #[derive(Debug, Default)] pub struct Konego { pub state: game::State, @@ -78,30 +42,6 @@ impl UIState { } } -#[repr(u8)] -#[derive(Copy, Clone, Debug, PartialEq)] -pub enum WorkerState { - Idle, - Working, - Ready, - Done, -} - -#[derive(Debug)] -pub struct ThreadData { - pub new_state: game::State, - pub worker_state: WorkerState, -} - -impl ThreadData { - fn new() -> Self { - Self { - new_state: game::State::new(), - worker_state: WorkerState::Idle, - } - } -} - impl GameLoop for Konego { fn new(_c: &mut EngineState) -> Self { Rays::build_lut(); diff --git a/src/ui/mod.rs b/src/ui/mod.rs index 1ca26be..1be72d4 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -1,3 +1,4 @@ pub mod app; pub mod draw; pub mod piece; +pub mod worker; diff --git a/src/ui/worker.rs b/src/ui/worker.rs new file mode 100644 index 0000000..c5367ce --- /dev/null +++ b/src/ui/worker.rs @@ -0,0 +1,66 @@ +use crate::core::game; + +use std::sync::{Arc, Mutex}; + +#[repr(u8)] +#[derive(Copy, Clone, Debug, PartialEq)] +pub enum WorkerState { + Idle, + Working, + Ready, + Done, +} + +#[derive(Debug)] +pub struct ThreadData { + pub new_state: game::State, + pub worker_state: WorkerState, +} + +impl ThreadData { + fn new() -> Self { + Self { + new_state: game::State::new(), + worker_state: WorkerState::Idle, + } + } +} + +#[derive(Clone, Debug)] +pub struct ThreadState(Arc>); + +impl Default for ThreadState { + fn default() -> Self { + Self::new() + } +} + +impl ThreadState { + pub fn new() -> Self { + Self(Arc::new(Mutex::new(ThreadData::new()))) + } + + pub fn get(&self) -> WorkerState { + self.0.lock().unwrap().worker_state + } + + pub fn set_ready(&self, state: game::State) { + let mut lock = self.0.lock().unwrap(); + lock.worker_state = WorkerState::Ready; + lock.new_state = state; + } + + pub fn set_working(&self) { + self.0.lock().unwrap().worker_state = WorkerState::Working; + } + + pub fn set_done(&self) { + self.0.lock().unwrap().worker_state = WorkerState::Done; + } + + pub fn set_and_fetch(&self, worker_state: WorkerState) -> game::State { + let mut lock = self.0.lock().unwrap(); + lock.worker_state = worker_state; + lock.new_state.clone() + } +}