Skip to main content

gd_levels/
start_level_string.rs

1use std::collections::HashMap;
2use crate::property_types::PropertyValueType;
3
4pub struct StartLevelString {
5    map: HashMap<String, String>
6}
7
8impl StartLevelString {
9    pub fn new() -> Self {
10        StartLevelString {
11            map: HashMap::new()
12        }
13    }
14
15    pub fn set_property(&mut self, key: impl ToStartLevelStringKey, value: impl PropertyValueType) {
16        self.map.insert(String::from(key.to_start_level_string_key()), value.to_object_string());
17    }
18
19    pub fn to_start_level_string(&self) -> String {
20        let mut obj_string = String::new();
21
22        for prop in self.map.iter() {
23            if !obj_string.is_empty() {
24                obj_string.push_str(",");
25            }
26
27            obj_string.push_str(prop.0.to_string().as_str());
28            obj_string.push_str(",");
29            obj_string.push_str(prop.1);
30
31        }
32
33        obj_string
34    }
35}
36
37pub trait ToStartLevelStringKey {
38    fn to_start_level_string_key(&self) -> &str;
39}
40
41pub enum StartLevelStringKeys {
42    AudioTrack,
43    Gamemode,
44    MiniMode,
45    Speed,
46    Obj2Blending,
47    BackgroundTextureId,
48    GroundTextureId,
49    DualMode,
50    LevelStartPosObject,
51    /// 2 Player Mode
52    PlayerMode2,
53    FlipGravity,
54    SongOffset,
55    Guidelines,
56    FadeIn,
57    FadeOut,
58    GroundLine,
59    Font,
60    ReverseGameplay,
61    PlatformerMode,
62    MiddlegroundTextureId,
63    AllowMultiRotation,
64    MirrorMode,
65    RotateGameplay,
66    EnablePlayerSqueeze,
67    FixGravityBug,
68    FixNegativeScale,
69    FixRobotJump,
70    SpawnGroup,
71    DynamicLevelHeight,
72    SortGroups,
73    FixRadiusCollision,
74    /// Enable 2.2 changes
75    Enable22Changes,
76    AllowStaticRotate,
77    ReverseSync,
78    NoTimePenalty,
79    DecreaseBoostSlide,
80    Colors,
81    ColorPage
82}
83
84impl ToStartLevelStringKey for StartLevelStringKeys {
85    fn to_start_level_string_key(&self) -> &str {
86        match self {
87            StartLevelStringKeys::AudioTrack => "kA1",
88            StartLevelStringKeys::Gamemode => "kA2",
89            StartLevelStringKeys::MiniMode => "kA3",
90            StartLevelStringKeys::Speed => "kA4",
91            StartLevelStringKeys::Obj2Blending => "kA5",
92            StartLevelStringKeys::BackgroundTextureId => "kA6",
93            StartLevelStringKeys::GroundTextureId => "kA7",
94            StartLevelStringKeys::DualMode => "kA8",
95            StartLevelStringKeys::LevelStartPosObject => "kA9",
96            StartLevelStringKeys::PlayerMode2 => "kA10",
97            StartLevelStringKeys::FlipGravity => "kA11",
98            StartLevelStringKeys::SongOffset => "kA13",
99            StartLevelStringKeys::Guidelines => "kA14",
100            StartLevelStringKeys::FadeIn => "kA15",
101            StartLevelStringKeys::FadeOut => "kA16",
102            StartLevelStringKeys::GroundLine => "kA17",
103            StartLevelStringKeys::Font => "kA18",
104            StartLevelStringKeys::ReverseGameplay => "kA20",
105            StartLevelStringKeys::PlatformerMode => "kA22",
106            StartLevelStringKeys::MiddlegroundTextureId => "kA25",
107            StartLevelStringKeys::AllowMultiRotation => "kA27",
108            StartLevelStringKeys::MirrorMode => "kA28",
109            StartLevelStringKeys::RotateGameplay => "kA29",
110            StartLevelStringKeys::EnablePlayerSqueeze => "kA31",
111            StartLevelStringKeys::FixGravityBug => "kA32",
112            StartLevelStringKeys::FixNegativeScale => "kA33",
113            StartLevelStringKeys::FixRobotJump => "kA34",
114            StartLevelStringKeys::SpawnGroup => "kA36",
115            StartLevelStringKeys::DynamicLevelHeight => "kA37",
116            StartLevelStringKeys::SortGroups => "kA38",
117            StartLevelStringKeys::FixRadiusCollision => "kA39",
118            StartLevelStringKeys::Enable22Changes => "kA40",
119            StartLevelStringKeys::AllowStaticRotate => "kA41",
120            StartLevelStringKeys::ReverseSync => "kA42",
121            StartLevelStringKeys::NoTimePenalty => "kA43",
122            StartLevelStringKeys::DecreaseBoostSlide => "kA45",
123            StartLevelStringKeys::Colors => "kS38",
124            StartLevelStringKeys::ColorPage => "kS39",
125        }
126    }
127}