bevy/examples/scene/props.rs
2020-05-22 15:25:31 -07:00

61 lines
1.4 KiB
Rust

use bevy::prelude::*;
use bevy_props::SerializableProps;
use bevy_scene::{DynamicScene, SceneEntity};
use serde::ser::Serialize;
fn main() {
App::build()
.add_default_plugins()
.add_startup_system(setup.system())
.run();
}
#[derive(Properties)]
pub struct Test {
a: usize,
b: String,
c: f32,
}
fn setup() {
let mut test = Test {
a: 1,
b: "hi".to_string(),
c: 1.0,
};
test.set_prop_val::<usize>("a", 2);
assert_eq!(test.a, 2);
let x: u32 = 3;
test.set_prop("a", &x);
assert_eq!(test.a, 3);
test.set_prop_val::<f32>("c", 2.0);
let x: f64 = 3.0;
test.set_prop("c", &x);
assert_eq!(test.c, 3.0);
let mut patch = DynamicProperties::default();
patch.set::<usize>("a", 3);
test.apply(&patch);
assert_eq!(test.a, 3);
let ser = SerializableProps { props: &test };
let mut serializer = ron::ser::Serializer::new(Some(ron::ser::PrettyConfig::default()), false);
ser.serialize(&mut serializer).unwrap();
println!("{}", serializer.into_output_string());
let dynamic_scene = DynamicScene {
entities: vec![SceneEntity {
entity: 12345,
components: vec![patch],
}],
};
let mut serializer = ron::ser::Serializer::new(Some(ron::ser::PrettyConfig::default()), false);
dynamic_scene.entities.serialize(&mut serializer).unwrap();
println!("{}", serializer.into_output_string());
}