Browse Source

Reuse EntranceBoundaryContains in portal logic

pull/2849/head
Anders Jenbo 5 years ago
parent
commit
e68c8cc834
  1. 16
      Source/cursor.cpp
  2. 12
      Source/quests.cpp
  3. 6
      Source/quests.h
  4. 10
      Source/trigs.cpp
  5. 6
      Source/trigs.h

16
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"));

12
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

6
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 {

10
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

6
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

Loading…
Cancel
Save