From 7456c7685ba04f9fce8421e0f7592ecd233a0a36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Lu=C3=ADs=20Vaz=20Silva?= Date: Sat, 10 Aug 2024 17:12:36 -0300 Subject: [PATCH] make hooks more specific --- .../hwrenderer/data/hw_meshbuilder.cpp | 9 +++++-- src/gamedata/r_defs.h | 27 ++++++++++++++++--- src/levelmeshhelper.h | 9 +++++-- src/playsim/p_map.cpp | 14 ++++++++-- 4 files changed, 50 insertions(+), 9 deletions(-) diff --git a/src/common/rendering/hwrenderer/data/hw_meshbuilder.cpp b/src/common/rendering/hwrenderer/data/hw_meshbuilder.cpp index cfad561b1..83a25200c 100644 --- a/src/common/rendering/hwrenderer/data/hw_meshbuilder.cpp +++ b/src/common/rendering/hwrenderer/data/hw_meshbuilder.cpp @@ -7,9 +7,14 @@ struct NullLevelMeshUpdater : UpdateLevelMesh { - virtual void SectorChanged(void *sector) {}; + virtual void FloorHeightChanged(struct sector_t *sector) {}; + virtual void CeilingHeightChanged(struct sector_t *sector) {}; + virtual void MidTex3DHeightChanged(struct sector_t *sector) {}; - virtual void SideChanged(void *side) {}; + virtual void FloorTextureChanged(struct sector_t *sector) {}; + virtual void CeilingTextureChanged(struct sector_t *sector) {}; + + virtual void SideTextureChanged(struct side_t *side, int section) {}; }; static NullLevelMeshUpdater nullUpdater; diff --git a/src/gamedata/r_defs.h b/src/gamedata/r_defs.h index babb940a5..a50445ded 100644 --- a/src/gamedata/r_defs.h +++ b/src/gamedata/r_defs.h @@ -979,7 +979,17 @@ public: FTextureID old = planes[pos].Texture; planes[pos].Texture = tex; if (floorclip && pos == floor && tex != old) AdjustFloorClip(); - if (tex != old) LevelMeshUpdater->SectorChanged((void*)this); + if (tex != old) + { + if(pos) + { + LevelMeshUpdater->FloorTextureChanged(this); + } + else + { + LevelMeshUpdater->CeilingTextureChanged(this); + } + } } double GetPlaneTexZ(int pos) const @@ -991,7 +1001,18 @@ public: { auto old = planes[pos].TexZ; planes[pos].TexZ = val; - if (val != old) LevelMeshUpdater->SectorChanged((void*)this); + + if (val != old) + { + if(pos) + { + LevelMeshUpdater->FloorHeightChanged(this); + } + else + { + LevelMeshUpdater->CeilingHeightChanged(this); + } + } } void SetPlaneTexZ(int pos, double val, bool dirtify = false) // This mainly gets used by init code. The only place where it must set the vertex to dirty is the interpolation code. @@ -1295,7 +1316,7 @@ struct side_t { auto old = textures[which].texture; textures[which].texture = tex; - if (old != tex) LevelMeshUpdater->SideChanged((void*)this); + if (old != tex) LevelMeshUpdater->SideTextureChanged(this, which); } void SetTextureXOffset(int which, double offset) diff --git a/src/levelmeshhelper.h b/src/levelmeshhelper.h index 6fd72bbcf..69710cff8 100644 --- a/src/levelmeshhelper.h +++ b/src/levelmeshhelper.h @@ -4,9 +4,14 @@ struct UpdateLevelMesh { - virtual void SectorChanged(void *sector) = 0; + virtual void FloorHeightChanged(struct sector_t *sector) = 0; + virtual void CeilingHeightChanged(struct sector_t *sector) = 0; + virtual void MidTex3DHeightChanged(struct sector_t *sector) = 0; - virtual void SideChanged(void *side) = 0; + virtual void FloorTextureChanged(struct sector_t *sector) = 0; + virtual void CeilingTextureChanged(struct sector_t *sector) = 0; + + virtual void SideTextureChanged(struct side_t *side, int section) = 0; }; extern UpdateLevelMesh* LevelMeshUpdater; diff --git a/src/playsim/p_map.cpp b/src/playsim/p_map.cpp index 2a5cc02a4..aca24d5d9 100644 --- a/src/playsim/p_map.cpp +++ b/src/playsim/p_map.cpp @@ -7057,8 +7057,18 @@ bool P_ChangeSector(sector_t *sector, int crunch, double amt, int floorOrCeil, b } } - - LevelMeshUpdater->SectorChanged((void*)sector); // update levelmesh + switch(floorOrCeil) + { // update levelmesh + case 0: + LevelMeshUpdater->FloorHeightChanged(sector); + break; + case 1: + LevelMeshUpdater->CeilingHeightChanged(sector); + break; + case 2: + LevelMeshUpdater->MidTex3DHeightChanged(sector); + break; + } return cpos.nofit; }