diff --git a/Cargo.toml b/Cargo.toml index 1981e05..a725d41 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,6 +15,7 @@ serde = { version = "1.0.93", features = ["derive"]} serde_json = "1.0.39" toml = "0.5" lazy_static = "1.4.0" +bincode = "1.3.3" [dev-dependencies] criterion = { version = "^0.5" } diff --git a/src/saveload_system.rs b/src/saveload_system.rs index 1712add..e3d49a7 100644 --- a/src/saveload_system.rs +++ b/src/saveload_system.rs @@ -1,6 +1,5 @@ use super::components::*; use bracket_lib::prelude::*; -use specs::error::NoError; use specs::prelude::*; use specs::saveload::{ DeserializeComponents, @@ -12,11 +11,12 @@ use specs::saveload::{ use std::fs; use std::fs::File; use std::path::Path; +use std::convert::Infallible; macro_rules! serialize_individually { ($ecs:expr, $ser:expr, $data:expr, $($type:ty),*) => { $( - SerializeComponents::>::serialize( + SerializeComponents::>::serialize( &( $ecs.read_storage::<$type>(), ), &$data.0, &$data.1, @@ -61,8 +61,8 @@ pub fn save_game(ecs: &mut World) { { let data = (ecs.entities(), ecs.read_storage::>()); - let writer = File::create("./savegame.json").unwrap(); - let mut serializer = serde_json::Serializer::new(writer); + let writer = File::create("./savegame.bin").unwrap(); + let mut serializer = bincode::Serializer::new(writer, bincode::options()); serialize_individually!( ecs, serializer, @@ -162,13 +162,13 @@ pub fn save_game(ecs: &mut World) { } pub fn does_save_exist() -> bool { - Path::new("./savegame.json").exists() + Path::new("./savegame.bin").exists() } macro_rules! deserialize_individually { ($ecs:expr, $de:expr, $data:expr, $($type:ty),*) => { $( - DeserializeComponents::::deserialize( + DeserializeComponents::::deserialize( &mut ( &mut $ecs.write_storage::<$type>(), ), &$data.0, // entities &mut $data.1, // marker @@ -192,8 +192,8 @@ pub fn load_game(ecs: &mut World) { } } - let data = fs::read_to_string("./savegame.json").unwrap(); - let mut de = serde_json::Deserializer::from_str(&data); + let data = fs::read("./savegame.bin").unwrap(); + let mut de = bincode::Deserializer::with_reader(&*data, bincode::options()); { let mut d = ( @@ -329,7 +329,7 @@ pub fn load_game(ecs: &mut World) { } pub fn delete_save() { - if Path::new("./savegame.json").exists() { - std::fs::remove_file("./savegame.json").expect("Unable to delete file"); + if Path::new("./savegame.bin").exists() { + std::fs::remove_file("./savegame.bin").expect("Unable to delete file"); } }