cavestory_save/items/
equipment.rs1use 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, 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}