From 38b8c7bed928d6a5f5bf5488bd459fb81fbb94d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Lu=C3=ADs=20Vaz=20Silva?= Date: Tue, 15 Oct 2024 14:32:41 -0300 Subject: [PATCH] switch defines to template --- src/levelmeshhelper.cpp | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/src/levelmeshhelper.cpp b/src/levelmeshhelper.cpp index 04e4b8b2a..dbe7f3a31 100644 --- a/src/levelmeshhelper.cpp +++ b/src/levelmeshhelper.cpp @@ -3,43 +3,50 @@ #include "r_defs.h" #include "g_levellocals.h" -#define PROPAGATE_CORRELATIONS_SECTOR(func)\ - func(sector);\ - TArray* c = sector->Level->SecCorrelations.CheckKey(sector->Index());\ - if(c) for(int index : *c) func(§or->Level->sectors[index]); +template +void PropagateCorrelations(Self self, Fn fn, sector_t *sector, Args... args) +{ + (self->*fn)(sector, args...); + + TArray* c = sector->Level->SecCorrelations.CheckKey(sector->Index()); -#define PROPAGATE_CORRELATIONS_SECTOR2(func, arg2)\ - func(sector, arg2);\ - TArray* c = sector->Level->SecCorrelations.CheckKey(sector->Index());\ - if(c) for(int index : *c) func(§or->Level->sectors[index], arg2); + if(c) + { + for(int index : *c) + { + (self->*fn)(§or->Level->sectors[index], args...); + } + } + +} void UpdateLevelMesh::FloorHeightChanged(sector_t* sector) { - PROPAGATE_CORRELATIONS_SECTOR(OnFloorHeightChanged); + PropagateCorrelations(this, &UpdateLevelMesh::OnFloorHeightChanged, sector); } void UpdateLevelMesh::CeilingHeightChanged(sector_t* sector) { - PROPAGATE_CORRELATIONS_SECTOR(OnCeilingHeightChanged); + PropagateCorrelations(this, &UpdateLevelMesh::OnCeilingHeightChanged, sector); } void UpdateLevelMesh::MidTex3DHeightChanged(sector_t* sector) { - PROPAGATE_CORRELATIONS_SECTOR(OnMidTex3DHeightChanged); + PropagateCorrelations(this, &UpdateLevelMesh::OnMidTex3DHeightChanged, sector); } void UpdateLevelMesh::FloorTextureChanged(sector_t* sector) { - PROPAGATE_CORRELATIONS_SECTOR(OnFloorTextureChanged); + PropagateCorrelations(this, &UpdateLevelMesh::OnFloorTextureChanged, sector); } void UpdateLevelMesh::CeilingTextureChanged(sector_t* sector) { - PROPAGATE_CORRELATIONS_SECTOR(OnCeilingTextureChanged); + PropagateCorrelations(this, &UpdateLevelMesh::OnCeilingTextureChanged, sector); } void UpdateLevelMesh::SectorChangedOther(sector_t* sector) { - PROPAGATE_CORRELATIONS_SECTOR(OnSectorChangedOther); + PropagateCorrelations(this, &UpdateLevelMesh::OnSectorChangedOther, sector); } void UpdateLevelMesh::SideTextureChanged(side_t* side, int section) @@ -68,17 +75,17 @@ void UpdateLevelMesh::SideDecalsChanged(side_t* side) void UpdateLevelMesh::SectorLightChanged(sector_t* sector) { - PROPAGATE_CORRELATIONS_SECTOR(OnSectorLightChanged); + PropagateCorrelations(this, &UpdateLevelMesh::OnSectorLightChanged, sector); } void UpdateLevelMesh::SectorLightThinkerCreated(sector_t* sector, DLighting* lightthinker) { - PROPAGATE_CORRELATIONS_SECTOR2(OnSectorLightThinkerCreated, lightthinker); + PropagateCorrelations(this, &UpdateLevelMesh::OnSectorLightThinkerCreated, sector, lightthinker); } void UpdateLevelMesh::SectorLightThinkerDestroyed(sector_t* sector, DLighting* lightthinker) { - PROPAGATE_CORRELATIONS_SECTOR2(OnSectorLightThinkerDestroyed, lightthinker); + PropagateCorrelations(this, &UpdateLevelMesh::OnSectorLightThinkerDestroyed, sector, lightthinker); } struct NullLevelMeshUpdater : UpdateLevelMesh