1#![doc = include_str!("../README.md")]
2
3pub mod deserialiser;
4pub mod serialiser;
5pub mod gdlevel;
6pub mod gdobj;
7pub mod utils;
8
9#[cfg(test)]
10mod tests {
11 use crate::{
12 deserialiser::decode_levels_to_string,
13 gdlevel::{Level, Levels},
14 gdobj::{misc::{self, default_block}, triggers::{self, move_trigger, DefaultMove, MoveEasing}, GDObjConfig}, utils::{b64_decode, vec_as_str}
15 };
16
17 #[test]
18 fn decode_savefile_test() {
19 assert!(decode_levels_to_string().is_ok())
21 }
22
23 #[test]
24 fn parse_to_levels_obj() {
25 let raw_levels_savefile = decode_levels_to_string().unwrap();
26 Levels::from_decrypted(raw_levels_savefile).unwrap();
28 }
29
30 #[test]
31 fn add_level_and_export() {
32 let mut levels = Levels::from_local().unwrap();
33 let mut new_level = Level::new("rust websocket tutorial 2", "arrowslasharrow", Some("dont use rust"), Some(857925));
34
35 new_level.add_object(triggers::move_trigger(
36 GDObjConfig::default().pos(45.0, 45.0).groups([1234]),
37 triggers::MoveMode::Default(triggers::DefaultMove {
38 dx: 45.0,
39 dy: 54.0,
40 x_lock: None,
41 y_lock: None
42 }),
43 0.50, 1, false, true, Some((MoveEasing::ElasticInOut, 1.50))
44 ));
45
46 new_level.add_object(misc::default_block(GDObjConfig::default().x(15.0).y(15.0)));
47
48 levels.add_level(new_level);
49 levels.export_to_savefile_with_backup().unwrap();
50 }
51
52 #[test]
53 fn read_objs() {
54 let mut levels = Levels::from_local().unwrap();
55 let first_level = levels.levels.first_mut().unwrap();
56 let data = first_level.get_decrypted_data().unwrap();
57
58 for (idx, obj) in data.objects.iter().enumerate() {
59 println!("{idx}: {obj:?}");
60 }
61 }
62
63 #[test]
64 fn gmd_conversion() {
65 let level = Level::from_gmd("GMDS/level.gmd").unwrap();
66 level.export_to_gmd("GMDS/level_export.gmd").unwrap();
67 }
68
69 #[test]
70 fn trigger() {
71 let mut level = Level::from_gmd("GMDS/Unnamed 25.gmd").unwrap();
72 let objects = &level.get_decrypted_data().unwrap().objects;
73 for obj in objects {
74 println!("{obj:?}");
75 }
76
77 }
85
86 #[test]
87 fn move_constructor_test() {
88 let mut level = Level::new("move trigger t3st", "arrowslasharrow", None, None);
89 level.add_object(move_trigger(
90 GDObjConfig::default().pos(45.0, 45.0),
91 triggers::MoveMode::Default(DefaultMove {
92 dx: 45.0,
93 dy: 54.0,
94 x_lock: None,
95 y_lock: None
96 }),
97 17.38,
98 679,
99 false,
100 true,
101 Some((MoveEasing::ElasticInOut, 1.50))
102 ));
103
104 level.export_to_gmd("GMD_tests/move_trigger.gmd").unwrap();
105 }
106
107 #[test]
108 fn level_display_test() {
109 let mut levels = Levels::from_local().unwrap();
110 let level = levels.levels.get_mut(0).unwrap();
111 println!("Level info: {level}");
112 println!("Unused groups: {:?}", level.get_decrypted_data().unwrap().get_unused_groups());
113 println!("Used groups: {:?}", level.get_decrypted_data().unwrap().get_used_groups());
114 }
115
116}