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