From 5af1552635810b4b8f72d39c8348653e6a88b9da Mon Sep 17 00:00:00 2001 From: aprzn Date: Thu, 26 Jan 2023 17:10:02 -0500 Subject: [PATCH] working on gd.rs and ui and stuff --- Cargo.lock | 18 ++++++++++++++++ Cargo.toml | 3 +++ mockup.png | Bin 0 -> 52770 bytes src/gd.rs | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 46 +++++++++++++++++++++++++-------------- 5 files changed, 112 insertions(+), 16 deletions(-) create mode 100644 mockup.png create mode 100644 src/gd.rs diff --git a/Cargo.lock b/Cargo.lock index 20c48e2..b6a40c2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -114,6 +114,12 @@ version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" +[[package]] +name = "base64" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" + [[package]] name = "bindgen" version = "0.61.0" @@ -1018,8 +1024,11 @@ dependencies = [ name = "guider" version = "0.1.0" dependencies = [ + "base64", + "flate2", "home", "iced", + "quick-xml", "rodio", ] @@ -1943,6 +1952,15 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74605f360ce573babfe43964cbe520294dcb081afbf8c108fc6e23036b4da2df" +[[package]] +name = "quick-xml" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc053f057dd768a56f62cd7e434c42c831d296968997e9ac1f76ea7c2d14c41" +dependencies = [ + "memchr", +] + [[package]] name = "quote" version = "1.0.23" diff --git a/Cargo.toml b/Cargo.toml index 2e0be58..0acd499 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,3 +9,6 @@ edition = "2021" iced = {version = "0.7.0"} rodio = {version = "0.16.0"} home = {version = "0.5.4"} +base64 = {version = "0.21.0"} +flate2 = {version = "1.0.25"} +quick-xml = {version = "0.27.1"} diff --git a/mockup.png b/mockup.png new file mode 100644 index 0000000000000000000000000000000000000000..0ef2ed4473e0b72a530fbb72524c58f869a62cc0 GIT binary patch literal 52770 zcmeFZ-QDan z@qXUtykE|LaQyx55BJ)8tv%PA*SxNAjWH&ns>*V>Sd>^01mP;k%cw&T1{{LWgfLOS z6^kEQ#1I4vvXYioRgjjZcX(%SZuQm-f|$Sfe0d_@s!ANB@-p+jCI)tx(3>2**JQB^ zI{B*avC_3HN1B&1{RX}>C^$M28(`zzuxrs6e06bgAVF)UBhV&$^o)#UzaeYjemi!= zspHI(;L{z{_nwJXTG}`R&XX^g7G6KBWkoldZzZ_k@z3dDH&u>`+AApb+Q_Q;xW~TR zAd#=qtBbQ2`isXrL0})<(RoNfX!l;Qj+$0zf9NBn8v6YQVqi)dkZ#mL*pIFQzaO%gAKkJ&Cg?`fL(UmLJ|(lsx^o==}-iZ-`KH z`nqe{Vf7Wdv6xe|zhrYUIf*{f)5oTRp-winx#+(A zxr1)+Kf~{4SLpOr9I{H%JU|x`LTks4so&Y(N$sn?o*YV=#a}OZH)@9Gb^_Mru7kX; z69jQSxcv|2o+;r9E@C(x|Np=Lj~NIr&BX*C z!IKn+j^I^VoAp`1tagPl<%)-xYhssHL`#WJB)^ z3=Pe6;}}EVq2FG&{KBXpn=x2Uw77q^u<&hmch!TF5%>0!fj7%3o_Kte;Wg7m@_e^f zBs0LhN~TOU7?SBq&u*{CFn5>wo$lUDr--^)?_0@b44%&V8E+H|{h#3s3&1G};kUoE z@MrV*dx*i8wP@Ohxs;}&=XlDDQCYNTpb6WXAM~;Wrd-Hq}>|;A4w8t z4dp&f7+cBui$`$Eo%!#*EAIIiC6MzGJZ2FBUx8OB{ClzIvT4Ds^XK|F!O}rE;5szG znWAhVMynEkF9AbXX~?Kp(3Z3J?(HWgrWq3hP9cm6HPbtmd_-_`9btt4a2+02z^ZYv zHD1QmaQ1qcj!Pk`BZ5xCeb27L6^?%XWVbhHR-%+pIW_s|LqKPVFnd4bH78FO_YgBLJ z=jg~o8a-mc@`e}dcy0Zu;BU*@C9DgS4$|0xRPwNgeQc$0qJ-cgj_cn~i zmE8C!HP1I&!aEj~vop}K4ULV1V^)ukD@svxcxH1^*h$$5Ak8}v8%6H~OTSYGPN<^1 zj5|}ffI^gJ{VDyCn0+S(X@UBkkk^C-Yw#0p@;nrHsa)A8WwG@mI~VtiRO9Sv?|mEMcVZs?P8|wS21Z6T=G?R% zskMA0^hM$I!uZ_sl=zykrk3x%uJlPYn4K*=_J0ycj0Bih+p&VuWVN**wvxY&ILqke z?{6O(^W^jV8N)tv9qr!M7WYvq_{`;=o~-iwF&jfZjJ5SN~rB^{Ks`HJaq} zZ|LpPnovmzpAtSE-hE_b#^BoJZlm9%-}KCk@9DJLSoJY)-^=u}vNC*$D~D~m#qlx= zl{E1uA|mP!mMJ1S+;*mTuwWWh>?b?;O|M%s)LD~Rp^3^rMNJMuJ%`>irm+f9Z*=2U zJsM}}@PdOdo@vWVf8%BANl34d>tnEluT`FQXE&f&F8$4k88yNV!weZWfUON$4sW|s zxel9ZGPv7@TEGA9&l$?$dR$aoj4K5Vw&~6|xVU6a!Q+B)h=(V#A3YoXbfHOH?m?|T z$Ng@5$%7M8GSu*>L5{?$81Wi?+}ov!A!+Kmo!c<7Ij!F`g^IZ-*6Eu3`8wR6`E{Zg zxs2)v0w4Nz`x*1b+g0WFj4^YshXtVMw9Z|A0P(a2|FC{~sr8LV727snD=5&hU_6R( z-L*DjP##LM)QqdSzPOlhEUFoHZ=BUuh1iUUyR`49lEW);3O~5ZOy+6M541QIq!8vX zDy%%Q$m1YXsWSZYhSxDH-<5x6^O%^p=^|Udm1lqvWxypdiuj92P)*hOzWdb5!QD;| zvp0y>nY00YhX!}Y%G(Q(Fjhk*s?YxI_uxg{G2cUmS@=w>w%Ok#WtCYN;f8KZzM&Yj z=%}P5Kvx*jaD-`y93;K;&m#Ko%Nv

p3qc9x^r?cH>Kt;a!FWCE11F;k04gv&E6Z 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, +} + +struct InnerLevel; // TODO: write this + +type Difficulty = u8; + +enum Song { + Official{id: i32 /*k8*/}, + Newgrounds{id: i32 /*k45*/}, +} + +struct Level { + name: String, // k2 + song: Song, +} + +pub fn gd_path() -> PathBuf { + let mut path_buf = home::home_dir().unwrap(); + #[cfg(unix)] + path_buf.extend([".local", "share", "Steam", "steamapps", + "compatdata", "322170", "pfx", "drive_c", + "users", "steamuser", "AppData", "Local", + "GeometryDash"].iter()); + #[cfg(windows)] + path_buf.extend(["AppData", "Local", "GeometryDash"].iter()); + path_buf +} + +fn load_levels() -> Vec { + let raw_save_data = { + let mut save_file = File::open(gd_path().join("CCLocalLevels.dat")).expect("No save file found!"); + let mut sd = Vec::new(); + save_file.read_to_end(&mut sd); + sd + }; + let data_post_xor: Vec = raw_save_data.iter().map(|b| b ^ 11).collect(); + let data_post_b64 = URL_SAFE.decode(data_post_xor).unwrap(); + let plist = { + let mut decoder = GzDecoder::<&[u8]>::new(data_post_b64.as_ref()); + let mut plist = String::new(); + if let Err(_) = decoder.read_to_string(&mut plist) { + println!("Warning: Game save likely corrupted (gzip decode failed)"); + } + plist + }; + let reader = Reader::from_str(plist.as_ref()); + let mut out = vec![]; + loop { + break out; + } +} diff --git a/src/main.rs b/src/main.rs index a342656..20aa413 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,15 @@ +mod gd; + use iced::{ - widget::{button, column, text}, + widget::{ + button, + column, + row, + text, + scrollable, + radio::Radio, + Column + }, Sandbox, Settings, Element, @@ -16,19 +26,7 @@ use std::{ io::BufReader, path::PathBuf, }; - - -fn gd_path() -> PathBuf { - let mut path_buf = home::home_dir().unwrap(); - #[cfg(unix)] - path_buf.extend([".local", "share", "Steam", "steamapps", - "compatdata", "322170", "pfx", "drive_c", - "users", "steamuser", "AppData", "Local", - "GeometryDash"].iter()); - #[cfg(windows)] - path_buf.extend(["AppData", "Local", "GeometryDash"].iter()); - path_buf -} +use gd::gd_path; struct Guider { @@ -47,7 +45,6 @@ impl Sandbox for Guider { let gd_path = gd_path(); let (_stream, stream_handle) = OutputStream::try_default().unwrap(); let sink = Sink::try_new(&stream_handle).unwrap(); - println!("{:?}", gd_path.as_os_str()); let music_file = BufReader::new(File::open(gd_path.join("613929.mp3")).unwrap()); let source = Decoder::new(music_file).unwrap(); //sink.append(source); @@ -56,7 +53,24 @@ impl Sandbox for Guider { } fn view(&self) -> Element { - column![button("pause").on_press(Message::Pause), button("play").on_press(Message::Play)].into() + // column![button("pause").on_press(Message::Pause), button("play").on_press(Message::Play)].into() + row![ + scrollable(["lvl 1", "lvl 2", "lvl 3"].iter().fold( + Column::new(), |col, item| col.push(button(*item).on_press(Message::Pause)) + )), + column![ + row![ + column![text("Title"), text("Song Title & ID")], + column![ + text("G"), + text("Y"), + text("O"), + ] + ], + row![text("zoom in"), text("zoom out"), text("delete"), text("add"), text("edit")], + text("view canvas"), + ] + ].into() } fn update(&mut self, message: Message) {