Skip to content

Commit

Permalink
fix: Load player containment volumes individually
Browse files Browse the repository at this point in the history
  • Loading branch information
cohaereo committed Jul 22, 2024
1 parent f690fa9 commit b506495
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 31 deletions.
1 change: 1 addition & 0 deletions crates/alkahest-data/src/map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -544,6 +544,7 @@ pub struct SUnk808068d4 {
pub struct SUnk80808604 {
pub unk0: [u32; 4],
pub unk10: Tag<SUnk80808724>,
pub index: u32,
}

#[derive(Clone, Debug)]
Expand Down
56 changes: 25 additions & 31 deletions crates/alkahest-renderer/src/loaders/map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1071,15 +1071,12 @@ fn load_datatable_into_scene<R: Read + Seek>(

let d: SUnk80808604 = TigerReadable::read_ds(table_data)?;

let (havok_debugshape, new_transform) = if let Ok(havok_data) =
package_manager().read_tag(d.unk10.havok_file)
{
let mut cur = Cursor::new(&havok_data);
match destiny_havok::shape_collection::read_shape_collection(&mut cur) {
Ok(shapes) => {
let mut final_shape = destiny_havok::shape_collection::Shape::default();

for t in &d.unk10.unk8 {
let (havok_debugshape, new_transform) =
if let Ok(havok_data) = package_manager().read_tag(d.unk10.havok_file) {
let mut cur = Cursor::new(&havok_data);
match destiny_havok::shape_collection::read_shape_collection(&mut cur) {
Ok(shapes) => {
let t = &d.unk10.unk8[d.index as usize];
if t.shape_index as usize >= shapes.len() {
error!(
"Shape index out of bounds for Unk80808604 (table {}, {} \
Expand All @@ -1100,31 +1097,28 @@ fn load_datatable_into_scene<R: Read + Seek>(
let mut shape = shapes[t.shape_index as usize].clone();
shape.apply_transform(transform.local_to_world());

final_shape.combine(&shape);
}

// Re-center the shape
let center = final_shape.center();
final_shape.apply_transform(Mat4::from_translation(-center));
// Re-center the shape
let center = shape.center();
shape.apply_transform(Mat4::from_translation(-center));

let new_transform = Transform {
translation: center,
..Default::default()
};
let new_transform = Transform {
translation: center,
..Default::default()
};

(
HavokShapeRenderer::new(renderer.gpu.clone(), &final_shape).ok(),
Some(new_transform),
)
}
Err(e) => {
error!("Failed to read shapes: {e}");
(None, None)
(
HavokShapeRenderer::new(renderer.gpu.clone(), &shape).ok(),
Some(new_transform),
)
}
Err(e) => {
error!("Failed to read shapes: {e}");
(None, None)
}
}
}
} else {
(None, None)
};
} else {
(None, None)
};

if let Some(havok_debugshape) = havok_debugshape {
let filter = NodeFilter::PlayerContainmentVolume;
Expand Down

0 comments on commit b506495

Please sign in to comment.