Fixed some mistakes, generates impacts now

This commit is contained in:
shiiion 2021-10-23 06:28:46 -07:00 committed by Luke Street
parent 8b12a48302
commit 2fcd4717c6
2 changed files with 10 additions and 10 deletions

View File

@ -156,10 +156,10 @@ std::optional<CIceImpact::SImpactSphere> CIceImpact::GenerateNewSphere() {
for (u32 z = 8; loop_cond(fwd_z, z); z = loop_step(fwd_z, z)) { for (u32 z = 8; loop_cond(fwd_z, z); z = loop_step(fwd_z, z)) {
for (u32 y = 8; loop_cond(fwd_y, y); y = loop_step(fwd_y, y)) { for (u32 y = 8; loop_cond(fwd_y, y); y = loop_step(fwd_y, y)) {
for (u32 x = 8; loop_cond(fwd_x, x); x = loop_step(fwd_x, x)) { for (u32 x = 8; loop_cond(fwd_x, x); x = loop_step(fwd_x, x)) {
u32 grid_val = x118_grid.GetValue(z, y, x); u32 grid_val = x118_grid.GetValue(x, y, z);
if (grid_val != 1) { if (grid_val == 1) {
zeus::CVector3f pos = x118_grid.GetWorldPositionForCell(z, y, x); zeus::CVector3f pos = x118_grid.GetWorldPositionForCell(x, y, z);
x118_grid.SetValue(z, y, x, 3); x118_grid.SetValue(x, y, z, 3);
if (PointInSphere(x108_sphereGenRange, pos)) { if (PointInSphere(x108_sphereGenRange, pos)) {
x118_grid.MarkCells(zeus::CSphere(pos, 1.6f), 2); x118_grid.MarkCells(zeus::CSphere(pos, 1.6f), 2);
return SImpactSphere(pos, 1.6f, 1.6f, 0.f, 0.f); return SImpactSphere(pos, 1.6f, 1.6f, 0.f, 0.f);
@ -249,7 +249,7 @@ void CIceImpact::GenerateParticlesAgainstWorld(CStateManager& mgr,
CCollisionSurface surface = node.GetOwner().GetMasterListTriangle(arr.GetAt(i)); CCollisionSurface surface = node.GetOwner().GetMasterListTriangle(arr.GetAt(i));
if (filter.Passes(CMaterialList(surface.GetSurfaceFlags()))) { if (filter.Passes(CMaterialList(surface.GetSurfaceFlags()))) {
subdivide_result = subdivide_result =
SubdivideAndGenerateParticles(mgr, surface.GetVert(0), surface.GetVert(1), surface.GetVert(1), a, b); SubdivideAndGenerateParticles(mgr, surface.GetVert(0), surface.GetVert(1), surface.GetVert(2), a, b);
} }
} }
} }
@ -312,7 +312,7 @@ bool CIceImpact::SubdivideAndGenerateParticles(CStateManager& mgr, zeus::CVector
if (!CollisionUtil::TriSphereOverlap(a, v1, v2, v3)) { if (!CollisionUtil::TriSphereOverlap(a, v1, v2, v3)) {
return false; return false;
} }
if (!PointInSphere(b, v1) && !PointInSphere(b, v2) && !PointInSphere(b, v3)) { if (PointInSphere(b, v1) && PointInSphere(b, v2) && PointInSphere(b, v3)) {
return false; return false;
} }

View File

@ -26,9 +26,9 @@ void CMarkerGrid::MarkCells(const zeus::CSphere& area, u32 val) {
bool CMarkerGrid::GetCoords(zeus::CVector3f const& vec, u32& x, u32& y, u32& z) const { bool CMarkerGrid::GetCoords(zeus::CVector3f const& vec, u32& x, u32& y, u32& z) const {
if (x0_bounds.pointInside(vec)) { if (x0_bounds.pointInside(vec)) {
x = static_cast<u32>((vec.x() - x0_bounds.min.x()) / x); x = static_cast<u32>((vec.x() - x0_bounds.min.x()) / x18_gridUnits.x());
y = static_cast<u32>((vec.y() - x0_bounds.min.y()) / y); y = static_cast<u32>((vec.y() - x0_bounds.min.y()) / x18_gridUnits.y());
z = static_cast<u32>((vec.z() - x0_bounds.min.z()) / z); z = static_cast<u32>((vec.z() - x0_bounds.min.z()) / x18_gridUnits.z());
return true; return true;
} }
return false; return false;
@ -83,4 +83,4 @@ zeus::CVector3f CMarkerGrid::GetWorldPositionForCell(u32 x, u32 y, u32 z) const
return zeus::CVector3f(static_cast<float>(x), static_cast<float>(y), static_cast<float>(z)) * x18_gridUnits + return zeus::CVector3f(static_cast<float>(x), static_cast<float>(y), static_cast<float>(z)) * x18_gridUnits +
x0_bounds.min + (x18_gridUnits / 2.f); x0_bounds.min + (x18_gridUnits / 2.f);
} }
} // namespace urde } // namespace urde