use crate::bitboard::BitBoard;
use super::{PieceType};
#[derive(Debug)]
pub enum UndoMoveError {
NoHistoryMoves,
}
pub type ActionInfo = u16;
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub struct Action {
pub from: Option<u16>,
pub to: u16,
pub team: u16,
pub piece_type: PieceType,
pub info: ActionInfo,
pub move_type: ActionInfo
}
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub struct TheoreticalAction {
pub from: Option<u16>,
pub to: u16,
pub info: ActionInfo
}
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub struct PreviousBoard<const T: usize>(pub BitBoard<T>);
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub struct IndexedPreviousBoard<const T: usize>(pub usize, pub BitBoard<T>);
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum HistoryUpdate<const T: usize> {
Team(IndexedPreviousBoard<T>),
Piece(IndexedPreviousBoard<T>),
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum HistoryState<const T: usize> {
Any {
all_pieces: PreviousBoard<T>,
first_move: PreviousBoard<T>,
updates: Vec<HistoryUpdate<T>>,
},
Single {
all_pieces: PreviousBoard<T>,
first_move: PreviousBoard<T>,
team: IndexedPreviousBoard<T>,
piece: IndexedPreviousBoard<T>,
},
None,
}
pub enum CounterUpdate {
Next,
To(u16)
}
pub struct TurnUpdate {
pub turns: CounterUpdate,
pub sub_moves: CounterUpdate,
pub full_moves: CounterUpdate
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct TurnInfo {
pub turns: u16,
pub sub_moves: u16,
pub full_moves: u16,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct HistoryMove<const T: usize> {
pub action: Move,
pub first_history_move: Option<Move>,
pub turn_info: TurnInfo,
pub state: HistoryState<T>
}
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub enum SimpleMove<T> {
Pass,
Action(T)
}
impl<T> SimpleMove<T> {
pub fn is_pass(&self) -> bool {
match self {
SimpleMove::Pass => true,
SimpleMove::Action(_) => false
}
}
pub fn is_action(&self) -> bool {
match self {
SimpleMove::Pass => false,
SimpleMove::Action(_) => true
}
}
}
pub type Move = SimpleMove<Action>;
pub type TheoreticalMove = SimpleMove<TheoreticalAction>;