Browse Source

Introduce Player::plrIsOnSetLevel

pull/4727/head
obligaron 4 years ago committed by Anders Jenbo
parent
commit
ceb08d783f
  1. 6
      Source/loadsave.cpp
  2. 1
      Source/player.cpp
  3. 14
      Source/player.h

6
Source/loadsave.cpp

@ -544,6 +544,12 @@ void LoadPlayer(LoadHelper &file, Player &player)
// Omit pointer _pDData
// Omit pointer _pBData
// Omit pointer pReserved
// Ensure plrIsOnSetLevel and plrlevel is correctly initialized, cause in vanilla sometimes plrlevel is not updated to setlvlnum
if (setlevel)
player.setLevel(setlvlnum);
else
player.setLevel(currlevel);
}
bool gbSkipSync = false;

1
Source/player.cpp

@ -3267,6 +3267,7 @@ StartNewLvl(int pnum, interface_mode fom, int lvl)
break;
case WM_DIABSETLVL:
setlvlnum = (_setlevels)lvl;
player.setLevel(setlvlnum);
break;
case WM_DIABTWARPUP:
myPlayer.pTownWarps |= 1 << (leveltype - 2);

14
Source/player.h

@ -223,6 +223,7 @@ struct Player {
int destParam3;
int destParam4;
uint8_t plrlevel;
bool plrIsOnSetLevel;
ActorPosition position;
Direction _pdir; // Direction faced by player (direction enum)
int _pgfxnum; // Bitmask indicating what variant of the sprite the player is using. Lower byte define weapon (PlayerWeaponGraphic) and higher values define armour (starting with PlayerArmorGraphic)
@ -710,21 +711,30 @@ struct Player {
/** @brief Checks if the player is on the same level as the local player (MyPlayer). */
bool isOnActiveLevel() const
{
return currlevel == this->plrlevel;
if (setlevel)
return isOnLevel(setlvlnum);
return isOnLevel(currlevel);
}
/** @brief Checks if the player is on the correspondig level. */
bool isOnLevel(uint8_t level) const
{
return this->plrlevel == level;
return !this->plrIsOnSetLevel && this->plrlevel == level;
}
/** @brief Checks if the player is on the correspondig level. */
bool isOnLevel(_setlevels level) const
{
return this->plrIsOnSetLevel && this->plrlevel == static_cast<uint8_t>(level);
}
void setLevel(uint8_t level)
{
this->plrlevel = level;
this->plrIsOnSetLevel = false;
}
void setLevel(_setlevels level)
{
this->plrlevel = static_cast<uint8_t>(level);
this->plrIsOnSetLevel = true;
}
};

Loading…
Cancel
Save