dzura/game/src/piece/mod.rs
2024-08-15 22:38:05 -07:00

136 lines
2.6 KiB
Rust

use crate::{
consts::*,
util::bit,
};
#[derive(Clone, Copy)]
pub struct MoveSet {
pub direction:u32,
pub stride:u32,
}
impl MoveSet {
pub fn rotate(&self) -> Self
{
Self {
direction:0,
stride:0,
}
}
}
#[derive(Clone, Copy)]
pub struct PieceClass {
pub name:&'static str,
pub moves:MoveSet,
pub pmoves:MoveSet,
}
pub const PIECES :[PieceClass; PIECES_COUNT] = [
PieceClass {
name: "Militia",
moves: MoveSet {
direction:bit(0) | bit(1) | bit(5),
stride:0,
},
pmoves: MoveSet{
direction:bit(0) | bit(1) | bit(2) | bit(4) | bit(5),
stride:0,
},
},
PieceClass {
name: "Knight",
moves: MoveSet {
direction:bit(3) | bit(6) | bit(11) | bit(13) | bit(17),
stride:0,
},
pmoves: MoveSet{
direction:bit(3) | bit(6) | bit(7) | bit(10) | bit(11) | bit(13) | bit(14) | bit(16) | bit(17),
stride:0,
},
},
PieceClass {
name: "Lance",
moves: MoveSet {
direction:0,
stride:0,
},
pmoves: MoveSet {
direction:0,
stride:0,
},
},
PieceClass {
name: "Tower",
moves: MoveSet {
direction:0,
stride:0,
},
pmoves: MoveSet {
direction:0,
stride:0,
},
},
PieceClass {
name: "Castle",
moves: MoveSet {
direction:0,
stride:0,
},
pmoves: MoveSet {
direction:0,
stride:0,
},
},
PieceClass {
name: "Dragon",
moves: MoveSet {
direction:0,
stride:0,
},
pmoves: MoveSet {
direction:0,
stride:0,
},
},
PieceClass {
name: "King",
moves: MoveSet {
direction:0,
stride:0,
},
pmoves: MoveSet {
direction:0,
stride:0,
},
},
];
#[derive(Clone, Copy)]
pub struct Piece {
pub class:u8,
pub promoted:bool,
pub player:u8,
pub tile:u8,
}
impl Piece {
pub fn new(class:u8, player:u8) -> Self
{
Self {
class,
promoted:false,
player,
tile:0,
}
}
pub fn new_at(class:u8, player:u8, tile:u8) -> Self
{
Self {
class,
promoted:false,
player,
tile,
}
}
}