|
|
|
@ -82,12 +82,12 @@ mod parse {
|
|
|
|
tag(l)(s)
|
|
|
|
tag(l)(s)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fn parse_xyz<'a>(i: &'a str) -> IResult<&'a str, (f32, f32, f32)> {
|
|
|
|
fn parse_xyz(i: &str) -> IResult<&str, (f32, f32, f32)> {
|
|
|
|
tuple((float, take(1usize), float, take(1usize), float))(i)
|
|
|
|
tuple((float, take(1usize), float, take(1usize), float))(i)
|
|
|
|
.map(|(s, (x, _, y, _, z))| (s, (x, y, z)))
|
|
|
|
.map(|(s, (x, _, y, _, z))| (s, (x, y, z)))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fn parse_wxyz<'a>(i: &'a str) -> IResult<&'a str, (f32, f32, f32, f32)> {
|
|
|
|
fn parse_wxyz(i: &str) -> IResult<&str, (f32, f32, f32, f32)> {
|
|
|
|
tuple((
|
|
|
|
tuple((
|
|
|
|
float,
|
|
|
|
float,
|
|
|
|
take(1usize),
|
|
|
|
take(1usize),
|
|
|
|
@ -100,7 +100,7 @@ mod parse {
|
|
|
|
.map(|(s, (w, _, x, _, y, _, z))| (s, (w, x, y, z)))
|
|
|
|
.map(|(s, (w, _, x, _, y, _, z))| (s, (w, x, y, z)))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fn parse_string<'a>(i: &'a str) -> IResult<&'a str, &'a str> {
|
|
|
|
fn parse_string(i: &str) -> IResult<&str, &str> {
|
|
|
|
let (rem, (_, out, _)) = tuple((tag("\""), take_until1("\""), tag("\"")))(i)?;
|
|
|
|
let (rem, (_, out, _)) = tuple((tag("\""), take_until1("\""), tag("\"")))(i)?;
|
|
|
|
Ok((rem, out))
|
|
|
|
Ok((rem, out))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -167,7 +167,7 @@ mod parse {
|
|
|
|
pub(crate) fn parse_save_name(line: &str) -> Result<Name, SaveEntityParseError> {
|
|
|
|
pub(crate) fn parse_save_name(line: &str) -> Result<Name, SaveEntityParseError> {
|
|
|
|
let (remainder, _) = tag("name")(line)?;
|
|
|
|
let (remainder, _) = tag("name")(line)?;
|
|
|
|
let n = remainder.trim().to_string();
|
|
|
|
let n = remainder.trim().to_string();
|
|
|
|
if n.len() == 0 {
|
|
|
|
if n.is_empty() {
|
|
|
|
Err(SaveEntityParseError::Name)
|
|
|
|
Err(SaveEntityParseError::Name)
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
let name = Name::new(n);
|
|
|
|
let name = Name::new(n);
|
|
|
|
@ -241,7 +241,7 @@ mod parse {
|
|
|
|
|
|
|
|
|
|
|
|
pub(crate) fn parse_save_camera(line: &str) -> Result<bool, SaveEntityParseError> {
|
|
|
|
pub(crate) fn parse_save_camera(line: &str) -> Result<bool, SaveEntityParseError> {
|
|
|
|
let (_rem, cam) = tag("camera")(line)?;
|
|
|
|
let (_rem, cam) = tag("camera")(line)?;
|
|
|
|
Ok(cam.len() > 0)
|
|
|
|
Ok(!cam.is_empty())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
#[test]
|
|
|
|
@ -318,61 +318,58 @@ fn check_loaded_entity_assets(
|
|
|
|
gltfs: Res<Assets<Gltf>>,
|
|
|
|
gltfs: Res<Assets<Gltf>>,
|
|
|
|
) {
|
|
|
|
) {
|
|
|
|
events.read().for_each(|event| {
|
|
|
|
events.read().for_each(|event| {
|
|
|
|
match event {
|
|
|
|
if let AssetEvent::LoadedWithDependencies { id } = event {
|
|
|
|
AssetEvent::LoadedWithDependencies { id } => {
|
|
|
|
query
|
|
|
|
query
|
|
|
|
.iter()
|
|
|
|
.iter()
|
|
|
|
.filter(|(_, handle)| handle.id() == *id)
|
|
|
|
.filter(|(_, handle)| handle.id() == *id)
|
|
|
|
.for_each(|(entity, _handle)| {
|
|
|
|
.for_each(|(entity, _handle)| {
|
|
|
|
let saved = save_entities.get(*id).unwrap();
|
|
|
|
let saved = save_entities.get(*id).unwrap();
|
|
|
|
debug!(
|
|
|
|
debug!(
|
|
|
|
"Updating entity {:?} ({:?}) because asset changed",
|
|
|
|
"Updating entity {:?} ({:?}) because asset changed",
|
|
|
|
saved.name, saved.uuid
|
|
|
|
saved.name, saved.uuid
|
|
|
|
);
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
let mut e = commands.entity(entity);
|
|
|
|
let mut e = commands.entity(entity);
|
|
|
|
// Apply camera
|
|
|
|
// Apply camera
|
|
|
|
// Should be applied early to avoid clobbering transform
|
|
|
|
// Should be applied early to avoid clobbering transform
|
|
|
|
if let Some(is_camera) = &saved.camera {
|
|
|
|
if let Some(is_camera) = &saved.camera {
|
|
|
|
if *is_camera {
|
|
|
|
if *is_camera {
|
|
|
|
e.insert(Camera3dBundle { ..default() });
|
|
|
|
e.insert(Camera3dBundle { ..default() });
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
e.remove::<(Camera, Camera3d)>();
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Apply transform
|
|
|
|
} else {
|
|
|
|
if let Some(transform) = &saved.transform {
|
|
|
|
e.remove::<(Camera, Camera3d)>();
|
|
|
|
// TODO: Only update if different
|
|
|
|
}
|
|
|
|
e.insert(transform.clone());
|
|
|
|
// Apply transform
|
|
|
|
} else {
|
|
|
|
if let Some(transform) = &saved.transform {
|
|
|
|
e.remove::<Transform>();
|
|
|
|
// TODO: Only update if different
|
|
|
|
}
|
|
|
|
e.insert(*transform);
|
|
|
|
// Apply Name
|
|
|
|
} else {
|
|
|
|
if let Some(name) = &saved.name {
|
|
|
|
e.remove::<Transform>();
|
|
|
|
// TODO: Only update if different
|
|
|
|
}
|
|
|
|
e.insert(name.clone());
|
|
|
|
// Apply Name
|
|
|
|
} else {
|
|
|
|
if let Some(name) = &saved.name {
|
|
|
|
e.remove::<Name>();
|
|
|
|
// TODO: Only update if different
|
|
|
|
}
|
|
|
|
e.insert(name.clone());
|
|
|
|
// Apply Uuid
|
|
|
|
} else {
|
|
|
|
if let Some(uuid) = &saved.uuid {
|
|
|
|
e.remove::<Name>();
|
|
|
|
// TODO: Only update if different
|
|
|
|
}
|
|
|
|
e.insert(uuid.clone());
|
|
|
|
// Apply Uuid
|
|
|
|
} else {
|
|
|
|
if let Some(uuid) = &saved.uuid {
|
|
|
|
e.remove::<EntityUuid>();
|
|
|
|
// TODO: Only update if different
|
|
|
|
}
|
|
|
|
e.insert(uuid.clone());
|
|
|
|
// Apply Model
|
|
|
|
} else {
|
|
|
|
if let Some((gltf_handle, scene_name)) = &saved.model {
|
|
|
|
e.remove::<EntityUuid>();
|
|
|
|
// Find scene and update
|
|
|
|
}
|
|
|
|
let gltf = gltfs.get(gltf_handle).unwrap();
|
|
|
|
// Apply Model
|
|
|
|
let scene_handle = gltf.named_scenes.get(scene_name).unwrap();
|
|
|
|
if let Some((gltf_handle, scene_name)) = &saved.model {
|
|
|
|
e.insert(scene_handle.clone());
|
|
|
|
// Find scene and update
|
|
|
|
} else {
|
|
|
|
let gltf = gltfs.get(gltf_handle).unwrap();
|
|
|
|
e.remove::<Handle<Scene>>();
|
|
|
|
let scene_handle = gltf.named_scenes.get(scene_name).unwrap();
|
|
|
|
}
|
|
|
|
e.insert(scene_handle.clone());
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
}
|
|
|
|
e.remove::<Handle<Scene>>();
|
|
|
|
_ => (),
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|