|
|
|
|
@ -48,31 +48,14 @@ impl Plugin for GamePlugin {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, Default, States)]
|
|
|
|
|
pub(crate) enum TurnState {
|
|
|
|
|
SideA,
|
|
|
|
|
// HACK: Opening animation starts on B side
|
|
|
|
|
#[default]
|
|
|
|
|
SideB,
|
|
|
|
|
}
|
|
|
|
|
pub(crate) struct TurnState(pub Side);
|
|
|
|
|
|
|
|
|
|
impl std::ops::Not for TurnState {
|
|
|
|
|
type Output = Self;
|
|
|
|
|
|
|
|
|
|
fn not(self) -> Self::Output {
|
|
|
|
|
match self {
|
|
|
|
|
TurnState::SideA => TurnState::SideB,
|
|
|
|
|
TurnState::SideB => TurnState::SideA,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Allow comparison between turn state and sides
|
|
|
|
|
impl PartialEq<Side> for TurnState {
|
|
|
|
|
fn eq(&self, other: &Side) -> bool {
|
|
|
|
|
match (self, other) {
|
|
|
|
|
(TurnState::SideA, Side::A) | (TurnState::SideB, Side::B) => true,
|
|
|
|
|
(TurnState::SideB, Side::A) | (TurnState::SideA, Side::B) => false,
|
|
|
|
|
}
|
|
|
|
|
let TurnState(side) = self;
|
|
|
|
|
TurnState(!side)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -207,9 +190,11 @@ pub(crate) struct BoardIndex {
|
|
|
|
|
pub y: usize,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, Component, PartialEq, Clone, Copy)]
|
|
|
|
|
#[derive(Debug, Component, PartialEq, Clone, Copy, Eq, Hash, Default)]
|
|
|
|
|
pub(crate) enum Side {
|
|
|
|
|
A,
|
|
|
|
|
// HACK: Opening animation starts on B side
|
|
|
|
|
#[default]
|
|
|
|
|
B,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|