From 65b75814ab9de5b3667324dc01f53a7224a5ee37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Lu=C3=ADs=20Vaz=20Silva?= Date: Sun, 26 Jan 2025 20:10:35 -0300 Subject: [PATCH] update walls on texZ change --- src/gamedata/r_defs.h | 10 +--------- src/levelmeshhelper.cpp | 6 ++++++ src/levelmeshhelper.h | 2 ++ src/rendering/hwrenderer/doom_levelmesh.cpp | 12 ++++++++++++ src/rendering/hwrenderer/doom_levelmesh.h | 1 + 5 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/gamedata/r_defs.h b/src/gamedata/r_defs.h index b94ec5cc3..b93ef24ff 100644 --- a/src/gamedata/r_defs.h +++ b/src/gamedata/r_defs.h @@ -1008,15 +1008,7 @@ public: if (val != old) { - //not sure actually what TexZ does, so changing passing this as "Other" - if(pos) - { - LevelMeshUpdater->SectorChangedOther(this); - } - else - { - LevelMeshUpdater->SectorChangedOther(this); - } + LevelMeshUpdater->SectorChangedTexZ(this); } } diff --git a/src/levelmeshhelper.cpp b/src/levelmeshhelper.cpp index dbe7f3a31..b798bd7cd 100644 --- a/src/levelmeshhelper.cpp +++ b/src/levelmeshhelper.cpp @@ -49,6 +49,11 @@ void UpdateLevelMesh::SectorChangedOther(sector_t* sector) PropagateCorrelations(this, &UpdateLevelMesh::OnSectorChangedOther, sector); } +void UpdateLevelMesh::SectorChangedTexZ(sector_t* sector) +{ + PropagateCorrelations(this, &UpdateLevelMesh::OnSectorChangedTexZ, sector); +} + void UpdateLevelMesh::SideTextureChanged(side_t* side, int section) { OnSideTextureChanged(side, section); @@ -98,6 +103,7 @@ struct NullLevelMeshUpdater : UpdateLevelMesh void OnCeilingTextureChanged(sector_t* sector) override {} void OnSectorChangedOther(sector_t* sector) override {} + void OnSectorChangedTexZ(sector_t* sector) override {} void OnSideTextureChanged(side_t* side, int section) override {} void OnSideDecalsChanged(side_t* side) override {} diff --git a/src/levelmeshhelper.h b/src/levelmeshhelper.h index 89611cfca..6698f1ffe 100644 --- a/src/levelmeshhelper.h +++ b/src/levelmeshhelper.h @@ -17,6 +17,7 @@ struct UpdateLevelMesh void CeilingTextureChanged(sector_t *sector); void SectorChangedOther(sector_t *sector); + void SectorChangedTexZ(sector_t *sector); void SideTextureChanged(side_t *side, int section); void SideDecalsChanged(side_t* side); @@ -34,6 +35,7 @@ struct UpdateLevelMesh virtual void OnCeilingTextureChanged(sector_t *sector) = 0; virtual void OnSectorChangedOther(sector_t *sector) = 0; + virtual void OnSectorChangedTexZ(sector_t *sector) = 0; virtual void OnSideTextureChanged(side_t *side, int section) = 0; virtual void OnSideDecalsChanged(side_t* side) = 0; diff --git a/src/rendering/hwrenderer/doom_levelmesh.cpp b/src/rendering/hwrenderer/doom_levelmesh.cpp index d7ee8d2f7..d559ee249 100644 --- a/src/rendering/hwrenderer/doom_levelmesh.cpp +++ b/src/rendering/hwrenderer/doom_levelmesh.cpp @@ -626,6 +626,18 @@ void DoomLevelMesh::OnSectorChangedOther(sector_t* sector) UpdateFlat(sector->Index(), SurfaceUpdateType::Full); } +void DoomLevelMesh::OnSectorChangedTexZ(sector_t* sector) +{ + UpdateFlat(sector->Index(), SurfaceUpdateType::Full); + for (line_t* line : sector->Lines) + { + if (line->sidedef[0]) + UpdateSide(line->sidedef[0]->Index(), SurfaceUpdateType::Full); + else if (line->sidedef[1]) + UpdateSide(line->sidedef[1]->Index(), SurfaceUpdateType::Full); + } +} + void DoomLevelMesh::OnSideTextureChanged(side_t* side, int section) { UpdateSide(side->Index(), SurfaceUpdateType::Full); diff --git a/src/rendering/hwrenderer/doom_levelmesh.h b/src/rendering/hwrenderer/doom_levelmesh.h index f569e27a2..8cbc0b63f 100644 --- a/src/rendering/hwrenderer/doom_levelmesh.h +++ b/src/rendering/hwrenderer/doom_levelmesh.h @@ -120,6 +120,7 @@ public: void OnFloorTextureChanged(sector_t* sector) override; void OnCeilingTextureChanged(sector_t* sector) override; void OnSectorChangedOther(sector_t* sector) override; + void OnSectorChangedTexZ(sector_t* sector) override; void OnSideTextureChanged(side_t* side, int section) override; void OnSideDecalsChanged(side_t* side) override; void OnSectorLightChanged(sector_t* sector) override;