rapier_testbed2d/
save.rs

1use crate::settings::ExampleSettings;
2use crate::testbed::{RunMode, TestbedStateFlags};
3use crate::{Camera, TestbedState};
4use serde::{Deserialize, Serialize};
5
6#[derive(Serialize, Deserialize, PartialEq, Debug, Default, Clone)]
7pub struct SerializableTestbedState {
8    pub running: RunMode,
9    pub flags: TestbedStateFlags,
10    pub selected_example: usize,
11    pub selected_backend: usize,
12    pub example_settings: ExampleSettings,
13    pub physx_use_two_friction_directions: bool,
14    pub camera: Camera,
15}
16
17impl TestbedState {
18    pub fn save_data(&self, camera: Camera) -> SerializableTestbedState {
19        SerializableTestbedState {
20            running: self.running,
21            flags: self.flags,
22            selected_example: self.selected_display_index,
23            selected_backend: self.selected_backend,
24            example_settings: self.example_settings.clone(),
25            physx_use_two_friction_directions: self.physx_use_two_friction_directions,
26            camera,
27        }
28    }
29
30    pub fn apply_saved_data(&mut self, state: SerializableTestbedState, camera: &mut Camera) {
31        self.prev_save_data = state.clone();
32        self.running = state.running;
33        self.flags = state.flags;
34        self.selected_display_index = state.selected_example;
35        self.selected_backend = state.selected_backend;
36        self.example_settings = state.example_settings;
37        self.physx_use_two_friction_directions = state.physx_use_two_friction_directions;
38        *camera = state.camera;
39    }
40}