From 564e9d2905fa69ed3f3078b63b8aba3aed30a15c Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 11 Dec 2022 00:51:39 +0100 Subject: [PATCH] - use switch types to cut doen the first switch/case block in checkhitswitch --- source/games/duke/src/sectors_d.cpp | 49 +++++----------------- source/games/duke/src/sectors_r.cpp | 65 +++++------------------------ 2 files changed, 21 insertions(+), 93 deletions(-) diff --git a/source/games/duke/src/sectors_d.cpp b/source/games/duke/src/sectors_d.cpp index 9da3ee716..b43b1ad9f 100644 --- a/source/games/duke/src/sectors_d.cpp +++ b/source/games/duke/src/sectors_d.cpp @@ -237,53 +237,24 @@ bool checkhitswitch_d(int snum, walltype* wwal, DDukeActor *act) switchpal = wwal->pal; } texid = tileGetTextureID(picnum); + auto& ext = GetExtInfo(texid); + auto& swdef = switches[ext.switchindex]; - switch (picnum) + switch (swdef.type) { - case DTILE_DIPSWITCH: - case DTILE_DIPSWITCHON: - case DTILE_TECHSWITCH: - case DTILE_TECHSWITCHON: - case DTILE_ALIENSWITCH: - case DTILE_ALIENSWITCHON: + case SwitchDef::Combo: break; - case DTILE_ACCESSSWITCH: - case DTILE_ACCESSSWITCH2: + + case SwitchDef::Access: if (checkaccessswitch_d(snum, switchpal, act, wwal)) return 0; [[fallthrough]]; - case DTILE_DIPSWITCH2: - case DTILE_DIPSWITCH2ON: - case DTILE_DIPSWITCH3: - case DTILE_DIPSWITCH3ON: - case DTILE_MULTISWITCH: - case DTILE_MULTISWITCH_2: - case DTILE_MULTISWITCH_3: - case DTILE_MULTISWITCH_4: - case DTILE_PULLSWITCH: - case DTILE_PULLSWITCHON: - case DTILE_HANDSWITCH: - case DTILE_HANDSWITCHON: - case DTILE_SLOTDOOR: - case DTILE_SLOTDOORON: - case DTILE_LIGHTSWITCH: - case DTILE_LIGHTSWITCHON: - case DTILE_SPACELIGHTSWITCH: - case DTILE_SPACELIGHTSWITCHON: - case DTILE_SPACEDOORSWITCH: - case DTILE_SPACEDOORSWITCHON: - case DTILE_FRANKENSTINESWITCH: - case DTILE_FRANKENSTINESWITCHON: - case DTILE_LIGHTSWITCH2: - case DTILE_LIGHTSWITCH2ON: - case DTILE_POWERSWITCH1: - case DTILE_POWERSWITCH1ON: - case DTILE_LOCKSWITCH1: - case DTILE_LOCKSWITCH1ON: - case DTILE_POWERSWITCH2: - case DTILE_POWERSWITCH2ON: + + case SwitchDef::Regular: + case SwitchDef::Multi: if (check_activator_motion(lotag)) return 0; break; + default: if (isadoorwall(texid) == 0) return 0; break; diff --git a/source/games/duke/src/sectors_r.cpp b/source/games/duke/src/sectors_r.cpp index aa2e2af8b..866508151 100644 --- a/source/games/duke/src/sectors_r.cpp +++ b/source/games/duke/src/sectors_r.cpp @@ -207,73 +207,30 @@ bool checkhitswitch_r(int snum, walltype* wwal, DDukeActor* act) switchpal = wwal->pal; } texid = tileGetTextureID(picnum); + auto& ext = GetExtInfo(texid); + auto& swdef = switches[ext.switchindex]; - switch (picnum) + switch (swdef.type) { - case RTILE_DIPSWITCH: - case RTILE_DIPSWITCHON: - case RTILE_TECHSWITCH: - case RTILE_TECHSWITCHON: - case RTILE_ALIENSWITCH: - case RTILE_ALIENSWITCHON: + case SwitchDef::Combo: break; - case RTILE_ACCESSSWITCH: - case RTILE_ACCESSSWITCH2: + + case SwitchDef::Access: if (checkaccessswitch_r(snum, switchpal, act, wwal)) return 0; - goto goOn1; - - case RTILE_MULTISWITCH2: - case RTILE_MULTISWITCH2_2: - case RTILE_MULTISWITCH2_3: - case RTILE_MULTISWITCH2_4: - case RTILE_IRONWHEELSWITCH: - case RTILE_BELLSWITCH: - if (!isRRRA()) break; [[fallthrough]]; - case RTILE_DIPSWITCH2: - case RTILE_DIPSWITCH2ON: - case RTILE_DIPSWITCH3: - case RTILE_DIPSWITCH3ON: - case RTILE_MULTISWITCH: - case RTILE_MULTISWITCH_2: - case RTILE_MULTISWITCH_3: - case RTILE_MULTISWITCH_4: - case RTILE_PULLSWITCH: - case RTILE_PULLSWITCHON: - case RTILE_HANDSWITCH: - case RTILE_HANDSWITCHON: - case RTILE_SLOTDOOR: - case RTILE_SLOTDOORON: - case RTILE_LIGHTSWITCH: - case RTILE_LIGHTSWITCHON: - case RTILE_SPACELIGHTSWITCH: - case RTILE_SPACELIGHTSWITCHON: - case RTILE_SPACEDOORSWITCH: - case RTILE_SPACEDOORSWITCHON: - case RTILE_FRANKENSTINESWITCH: - case RTILE_FRANKENSTINESWITCHON: - case RTILE_LIGHTSWITCH2: - case RTILE_LIGHTSWITCH2ON: - case RTILE_POWERSWITCH1: - case RTILE_POWERSWITCH1ON: - case RTILE_LOCKSWITCH1: - case RTILE_LOCKSWITCH1ON: - case RTILE_POWERSWITCH2: - case RTILE_POWERSWITCH2ON: - case RTILE_CONTESTSWITCH: - case RTILE_ALERTSWITCH: - case RTILE_ALERTSWITCHON: - case RTILE_HANDLESWITCH: - case RTILE_HANDLESWITCHON: - goOn1: + + case SwitchDef::Regular: + case SwitchDef::Multi: if (check_activator_motion(lotag)) return 0; break; + default: if (isadoorwall(texid) == 0) return 0; break; } + DukeStatIterator it(STAT_DEFAULT); while (auto other = it.Next()) {