Skip to main content

sokoban_elements/piece/
board_pieces.rs

1use super::{BoxID, GoalID, PusherID};
2use crate::PlusID;
3
4/// Pusher on game board.
5#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7pub struct Pusher {
8    pub id: PusherID,
9    pub x:  usize,
10    pub y:  usize,
11}
12
13/// Box (crate, container) on game board.
14///
15/// Yes, Rust already has a `Box` type.
16#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
17#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
18pub struct Boxbox {
19    pub id:      BoxID,
20    pub x:       usize,
21    pub y:       usize,
22    pub plus_id: Option<PlusID>,
23}
24
25/// Goal on game board.
26#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
27#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
28pub struct Goal {
29    pub id:      GoalID,
30    pub x:       usize,
31    pub y:       usize,
32    pub plus_id: Option<PlusID>,
33}