cavestory_save/items/
teleporter.rs

1use strum::{Display, EnumIter, FromRepr};
2
3#[derive(Default, Clone, Copy, Debug, PartialEq, Eq)]
4pub struct Teleporter {
5    pub menu: TeleporterMenu,
6    pub location: TeleporterLocation,
7}
8
9#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Display, EnumIter, FromRepr)]
10#[strum(serialize_all = "title_case")]
11#[repr(u32)]
12pub enum TeleporterMenu {
13    #[default]
14    Nothing,
15    EggCorridor,
16    Grasstown,
17    SandZone,
18    Labyrinth,
19    Plantation,
20}
21
22#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Display, EnumIter, FromRepr)]
23#[strum(serialize_all = "title_case")]
24#[repr(u16)]
25pub enum TeleporterLocation {
26    #[default]
27    EggCorridor = 0x17_71,
28    Grasstown,
29    SandZone,
30    Labyrinth,
31    Plantation,
32}
33
34impl From<i32> for TeleporterMenu {
35    fn from(v: i32) -> Self {
36        TeleporterMenu::from_repr(v as u32).unwrap_or_default()
37    }
38}
39
40impl From<i16> for TeleporterLocation {
41    fn from(v: i16) -> Self {
42        TeleporterLocation::from_repr(v as u16).unwrap_or(TeleporterLocation::EggCorridor)
43    }
44}