summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2025-12-15 21:14:51 -0500
committerLLLL Colonq <llll@colonq>2025-12-15 21:14:51 -0500
commit02e1491d0a0ad2ca73dc2cc36a33c3aed50a801e (patch)
treebd1730b4d356527a64dd2a7bac858d7b59ebf825
parent1736fec8c78cc30c62f78410f0ad3f187c072d59 (diff)
Fix saving
-rw-r--r--Cargo.lock31
-rw-r--r--crates/teleia/Cargo.toml2
-rw-r--r--crates/teleia/src/lib.rs28
-rw-r--r--crates/teleia/src/save.rs13
4 files changed, 33 insertions, 41 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 7edc46b..2ef0a87 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -196,6 +196,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
[[package]]
+name = "base64"
+version = "0.22.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
+
+[[package]]
name = "bimap"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -916,7 +922,7 @@ name = "gltf"
version = "1.4.1"
source = "git+https://github.com/lcolonq/gltf#9763a5abe8c168eb1282a037ff16668542fe2a6d"
dependencies = [
- "base64",
+ "base64 0.13.1",
"byteorder",
"gltf-json",
"image",
@@ -1126,27 +1132,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
-name = "lexpr"
-version = "0.2.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a84de6a9df442363b08f5dbf0cd5b92edc70097b89c4ce4bfea4679fe48bc67"
-dependencies = [
- "itoa",
- "lexpr-macros",
- "ryu",
-]
-
-[[package]]
-name = "lexpr-macros"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "36b5cb8bb985c81a8ac1a0f8b5c4865214f574ddd64397ef7a99c236e21f35bb"
-dependencies = [
- "proc-macro2",
- "quote",
-]
-
-[[package]]
name = "libc"
version = "0.2.153"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2268,6 +2253,7 @@ dependencies = [
name = "teleia"
version = "0.1.0"
dependencies = [
+ "base64 0.22.1",
"bimap",
"bincode",
"bitflags 2.6.0",
@@ -2287,7 +2273,6 @@ dependencies = [
"image",
"js-sys",
"kira",
- "lexpr",
"log",
"nalgebra",
"parry3d",
diff --git a/crates/teleia/Cargo.toml b/crates/teleia/Cargo.toml
index 5382630..5784ca9 100644
--- a/crates/teleia/Cargo.toml
+++ b/crates/teleia/Cargo.toml
@@ -30,7 +30,7 @@ rapier3d = "*" # rigid-body physics
parry3d = "*" # collision detection
nalgebra = {version = "0.33.2", features = ["convert-glam029"]} # linear algebra library for rapier3d
byteorder = "*" # read numbers in particular endianness
-lexpr = "*" # parse s-expressions
+base64 = "0.22.1" # encode/decode base64
[target.'cfg(target_arch = "wasm32")'.dependencies]
winit = {version = "=0.29.15", features = ["serde"]} # windowing and events
diff --git a/crates/teleia/src/lib.rs b/crates/teleia/src/lib.rs
index 5e13cbb..81bc617 100644
--- a/crates/teleia/src/lib.rs
+++ b/crates/teleia/src/lib.rs
@@ -14,6 +14,8 @@ pub mod net;
pub mod physics;
pub mod save;
pub mod level2d;
+
+#[cfg(not(target_arch = "wasm32"))]
pub mod fig;
pub use utils::{erm, install_error_handler, Erm};
@@ -295,19 +297,19 @@ where
ctx.maximize_canvas();
st.handle_resize(&ctx);
}
- if let Some(f) = &mut st.request {
- match std::future::Future::poll(f.as_mut(), &mut st.waker_ctx) {
- std::task::Poll::Pending => {},
- std::task::Poll::Ready(res) => {
- st.request = None;
- match res {
- Ok(r) => st.request_returned(&ctx, game, r),
- Err(e) => log::warn!("error during HTTP request: {}", e),
- }
- },
- }
- // f.poll();
- }
+ // if let Some(f) = &mut st.request {
+ // match std::future::Future::poll(f.as_mut(), &mut st.waker_ctx) {
+ // std::task::Poll::Pending => {},
+ // std::task::Poll::Ready(res) => {
+ // st.request = None;
+ // match res {
+ // Ok(r) => st.request_returned(&ctx, game, r),
+ // Err(e) => log::warn!("error during HTTP request: {}", e),
+ // }
+ // },
+ // }
+ // // f.poll();
+ // }
st.run_update(&ctx, game)?;
st.run_render(&ctx, game)?;
ctx.window.request_redraw();
diff --git a/crates/teleia/src/save.rs b/crates/teleia/src/save.rs
index 3f244cc..dea4332 100644
--- a/crates/teleia/src/save.rs
+++ b/crates/teleia/src/save.rs
@@ -1,3 +1,5 @@
+use base64::prelude::*;
+
#[cfg(target_arch = "wasm32")]
pub fn save<W>(id: &str, data: &W) where W: serde::Serialize {
let window = web_sys::window().expect("failed to get window object");
@@ -5,8 +7,9 @@ pub fn save<W>(id: &str, data: &W) where W: serde::Serialize {
.expect("failed to get local storage")
.expect("local storage not present");
let key = format!("{}_save", id);
- let val = serde_json::to_string(data).expect("failed to serialize save");
- storage.set_item(&key, &val).expect("failed to set save");
+ let val = bincode::serde::encode_to_vec(data, bincode::config::standard()).expect("failed to serialize save");
+ let str = BASE64_STANDARD.encode(&val);
+ storage.set_item(&key, &str).expect("failed to set save");
}
#[cfg(target_arch = "wasm32")]
@@ -17,8 +20,10 @@ pub fn load<W>(id: &str) -> Option<W> where W: serde::de::DeserializeOwned {
.expect("local storage not present");
let key = format!("{}_save", id);
let s = storage.get_item(&key).expect("failed to get save").expect("save not present");
- let mut cur = std::io::Cursor::new(s);
- serde_json::from_reader(&mut cur).ok()
+ let bytes = BASE64_STANDARD.decode(&s).expect("failed to decode base64 for save");
+ let (ret, _) = bincode::serde::decode_from_slice(&bytes, bincode::config::standard())
+ .expect("failed to deserialize save");
+ Some(ret)
}
#[cfg(not(target_arch = "wasm32"))]