diff --git a/Source/cursor.cpp b/Source/cursor.cpp index 6077c0c08..5d1650040 100644 --- a/Source/cursor.cpp +++ b/Source/cursor.cpp @@ -205,13 +205,7 @@ void CheckTown() int mx = ActiveMissiles[i]; auto &missile = Missiles[mx]; if (missile._mitype == MIS_TOWN) { - if ((cursPosition == (missile.position.tile + Displacement { -1, 0 }) - || (cursPosition == (missile.position.tile + Displacement { 0, -1 }) - || (cursPosition == (missile.position.tile + Displacement { -1, -1 })) - || (cursPosition == (missile.position.tile + Displacement { -2, -1 })) - || (cursPosition == (missile.position.tile + Displacement { -2, -2 })) - || (cursPosition == (missile.position.tile + Displacement { -1, -2 })) - || (cursPosition == missile.position.tile)))) { + if (EntranceBoundaryContains(missile.position.tile, cursPosition)) { trigflag = true; ClearPanel(); strcpy(infostr, _("Town Portal")); @@ -229,13 +223,7 @@ void CheckRportal() int mx = ActiveMissiles[i]; auto &missile = Missiles[mx]; if (missile._mitype == MIS_RPORTAL) { - if ((cursPosition == (missile.position.tile + Displacement { -1, 0 })) - || (cursPosition == (missile.position.tile + Displacement { 0, -1 })) - || (cursPosition == (missile.position.tile + Displacement { -1, -1 })) - || (cursPosition == (missile.position.tile + Displacement { -2, -1 })) - || (cursPosition == (missile.position.tile + Displacement { -2, -2 })) - || (cursPosition == (missile.position.tile + Displacement { -1, -2 })) - || (cursPosition == missile.position.tile)) { + if (EntranceBoundaryContains(missile.position.tile, cursPosition)) { trigflag = true; ClearPanel(); strcpy(infostr, _("Portal to")); diff --git a/Source/quests.cpp b/Source/quests.cpp index 34654c5d5..f9969d4ab 100644 --- a/Source/quests.cpp +++ b/Source/quests.cpp @@ -445,7 +445,7 @@ bool ForceQuests() if (quest._qidx != Q_BETRAYER && currlevel == quest._qlevel && quest._qslvl != 0) { int ql = quest._qslvl - 1; - if (quest.EntranceBoundaryContains(cursPosition)) { + if (EntranceBoundaryContains(quest.position, cursPosition)) { strcpy(infostr, fmt::format(_(/* TRANSLATORS: Used for Quest Portals. {:s} is a Map Name */ "To {:s}"), _(QuestTriggerNames[ql])).c_str()); cursPosition = quest.position; return true; @@ -881,14 +881,4 @@ bool Quest::IsAvailable() return true; } -bool Quest::EntranceBoundaryContains(Point position) const -{ - constexpr Displacement questEntranceOffsets[7] = { { 0, 0 }, { -1, 0 }, { 0, -1 }, { -1, -1 }, { -2, -1 }, { -1, -2 }, { -2, -2 } }; - - return std::any_of( - std::begin(questEntranceOffsets), - std::end(questEntranceOffsets), - [&](auto offset) { return this->position + offset == position; }); -} - } // namespace devilution diff --git a/Source/quests.h b/Source/quests.h index 90e0789f4..acec3bf0f 100644 --- a/Source/quests.h +++ b/Source/quests.h @@ -57,12 +57,6 @@ struct Quest { uint8_t _qvar2; bool IsAvailable(); - - /** - * @brief Gets a value indicating whether the provided position is in the entrance boundary of the quest. - * @param position The position to check against this quest's entrance boundary. - */ - bool EntranceBoundaryContains(Point position) const; }; struct QuestData { diff --git a/Source/trigs.cpp b/Source/trigs.cpp index 6586869d9..c9e774e93 100644 --- a/Source/trigs.cpp +++ b/Source/trigs.cpp @@ -866,4 +866,14 @@ void CheckTriggers() } } +bool EntranceBoundaryContains(Point entrance, Point position) +{ + constexpr Displacement entranceOffsets[7] = { { 0, 0 }, { -1, 0 }, { 0, -1 }, { -1, -1 }, { -2, -1 }, { -1, -2 }, { -2, -2 } }; + + return std::any_of( + std::begin(entranceOffsets), + std::end(entranceOffsets), + [&](auto offset) { return entrance + offset == position; }); +} + } // namespace devilution diff --git a/Source/trigs.h b/Source/trigs.h index 5be2e444b..66c694dc1 100644 --- a/Source/trigs.h +++ b/Source/trigs.h @@ -39,4 +39,10 @@ void Freeupstairs(); void CheckTrigForce(); void CheckTriggers(); +/** + * @brief Check if the provided position is in the entrance boundary of the entrance. + * @param position The position to check against the entrance boundary. + */ +bool EntranceBoundaryContains(Point entrance, Point position); + } // namespace devilution