summaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/teleia/Cargo.toml2
-rw-r--r--crates/teleia/src/lib.rs28
-rw-r--r--crates/teleia/src/save.rs13
3 files changed, 25 insertions, 18 deletions
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"))]