Skip to content
Snippets Groups Projects
Verified Commit 2aecc268 authored by João Magalhães's avatar João Magalhães :rocket:
Browse files

chore: better state manager naming

parent f5e7a17c
No related branches found
No related tags found
1 merge request!31System state save
Pipeline #3265 passed
...@@ -14,7 +14,7 @@ use boytacean::{ ...@@ -14,7 +14,7 @@ use boytacean::{
ppu::PaletteInfo, ppu::PaletteInfo,
rom::Cartridge, rom::Cartridge,
serial::{NullDevice, SerialDevice}, serial::{NullDevice, SerialDevice},
state::{load_state_file, save_state_file}, state::StateManager,
util::{replace_ext, write_file}, util::{replace_ext, write_file},
}; };
use chrono::Utc; use chrono::Utc;
...@@ -286,7 +286,7 @@ impl Emulator { ...@@ -286,7 +286,7 @@ impl Emulator {
} }
fn save_state(&mut self, file_path: &str) { fn save_state(&mut self, file_path: &str) {
if let Err(message) = save_state_file(file_path, &mut self.system) { if let Err(message) = StateManager::save_file(file_path, &mut self.system) {
println!("Error saving state: {}", message) println!("Error saving state: {}", message)
} else { } else {
println!("Saved state into: {}", file_path) println!("Saved state into: {}", file_path)
...@@ -294,7 +294,7 @@ impl Emulator { ...@@ -294,7 +294,7 @@ impl Emulator {
} }
fn load_state(&mut self, file_path: &str) { fn load_state(&mut self, file_path: &str) {
if let Err(message) = load_state_file(file_path, &mut self.system) { if let Err(message) = StateManager::load_file(file_path, &mut self.system) {
println!("Error loading state: {}", message) println!("Error loading state: {}", message)
} else { } else {
println!("Loaded state from: {}", file_path) println!("Loaded state from: {}", file_path)
......
...@@ -966,37 +966,41 @@ impl Default for BeesMbc { ...@@ -966,37 +966,41 @@ impl Default for BeesMbc {
} }
} }
pub fn save_state_file(file_path: &str, gb: &mut GameBoy) -> Result<(), String> { pub struct StateManager;
let mut file = match File::create(file_path) {
Ok(file) => file, impl StateManager {
Err(_) => return Err(format!("Failed to open file: {}", file_path)), pub fn save_file(file_path: &str, gb: &mut GameBoy) -> Result<(), String> {
}; let mut file = match File::create(file_path) {
let data = save_state(gb)?; Ok(file) => file,
file.write_all(&data).unwrap(); Err(_) => return Err(format!("Failed to open file: {}", file_path)),
Ok(()) };
} let data = Self::save(gb)?;
file.write_all(&data).unwrap();
pub fn save_state(gb: &mut GameBoy) -> Result<Vec<u8>, String> { Ok(())
let mut data: Vec<u8> = vec![]; }
BeesState::from_gb(gb).write(&mut data);
Ok(data) pub fn save(gb: &mut GameBoy) -> Result<Vec<u8>, String> {
} let mut data: Vec<u8> = vec![];
BeesState::from_gb(gb).write(&mut data);
pub fn load_state_file(file_path: &str, gb: &mut GameBoy) -> Result<(), String> { Ok(data)
let mut file = match File::open(file_path) { }
Ok(file) => file,
Err(_) => return Err(format!("Failed to open file: {}", file_path)), pub fn load_file(file_path: &str, gb: &mut GameBoy) -> Result<(), String> {
}; let mut file = match File::open(file_path) {
let mut data = vec![]; Ok(file) => file,
file.read_to_end(&mut data).unwrap(); Err(_) => return Err(format!("Failed to open file: {}", file_path)),
load_state(&data, gb)?; };
Ok(()) let mut data = vec![];
} file.read_to_end(&mut data).unwrap();
Self::load(&data, gb)?;
pub fn load_state(data: &[u8], gb: &mut GameBoy) -> Result<(), String> { Ok(())
let mut state = BeesState::default(); }
state.read(&mut Cursor::new(data.to_vec()));
state.to_gb(gb)?; pub fn load(data: &[u8], gb: &mut GameBoy) -> Result<(), String> {
print!("{}", state); let mut state = BeesState::default();
Ok(()) state.read(&mut Cursor::new(data.to_vec()));
state.to_gb(gb)?;
print!("{}", state);
Ok(())
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment