cavestory_save/items/
equipment.rs

1use strum::{Display, EnumIter, FromRepr};
2
3#[derive(Clone, Copy, PartialEq, Eq, Debug)]
4pub struct Equip(pub(crate) u16);
5
6pub trait EquipOpt {
7    fn check(&self, equip: Equipment) -> bool;
8    fn switch(&mut self, equip: Equipment, state: bool);
9}
10
11#[derive(Clone, Copy, Debug, PartialEq, Eq, Display, EnumIter, FromRepr)]
12#[strum(serialize_all = "title_case")]
13pub enum Equipment {
14    Boosterv08, //(ignored if v2.0 equipped)
15    MapSystem,
16    ArmsBarrier,
17    Turbocharge,
18    CurlysAirTank,
19    Boosterv20,
20    MaPignon,
21    WhimsicalStar,
22    NikumaruCounter,
23}
24
25impl EquipOpt for Equip {
26    fn check(&self, equip: Equipment) -> bool {
27        2_u16.pow(equip as u32) & self.0 != 0
28    }
29
30    fn switch(&mut self, equip: Equipment, state: bool) {
31        if state {
32            self.0 |= 2_u16.pow(equip as u32)
33        } else {
34            self.0 &= !(2_u16.pow(equip as u32))
35        }
36    }
37}