mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
objects/mega-barrier.cpp: fix undefined behavior
Calling a class method from a nullptr this is undefined behavior.
This commit is contained in:
parent
db36fc516f
commit
55fddd2132
1 changed files with 4 additions and 5 deletions
|
|
@ -39,7 +39,7 @@ struct Mobj : mobj_t
|
||||||
PosArg(const mobj_t* mobj) : x(mobj->x), y(mobj->y), z(mobj->z) {}
|
PosArg(const mobj_t* mobj) : x(mobj->x), y(mobj->y), z(mobj->z) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
bool valid() const { return !P_MobjWasRemoved(this); }
|
static bool valid(const Mobj* mobj) { return !P_MobjWasRemoved(mobj); }
|
||||||
|
|
||||||
PosArg center() const { return {x, y, z + (height / 2)}; }
|
PosArg center() const { return {x, y, z + (height / 2)}; }
|
||||||
|
|
||||||
|
|
@ -70,10 +70,9 @@ struct Player : player_t
|
||||||
void barrier(Barrier* n) { P_SetTarget(&this->powerupvars_t::barrier, reinterpret_cast<mobj_t*>(n)); }
|
void barrier(Barrier* n) { P_SetTarget(&this->powerupvars_t::barrier, reinterpret_cast<mobj_t*>(n)); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static bool valid(std::size_t i) { return i < MAXPLAYERS && playeringame[i]; }
|
||||||
static Player* at(std::size_t i) { return static_cast<Player*>(&players[i]); }
|
static Player* at(std::size_t i) { return static_cast<Player*>(&players[i]); }
|
||||||
|
|
||||||
bool valid() const { return this >= players && this < &players[MAXPLAYERS] && playeringame[num()]; }
|
|
||||||
|
|
||||||
std::size_t num() const { return this - Player::at(0); }
|
std::size_t num() const { return this - Player::at(0); }
|
||||||
Mobj* mobj() const { return static_cast<Mobj*>(mo); }
|
Mobj* mobj() const { return static_cast<Mobj*>(mo); }
|
||||||
|
|
||||||
|
|
@ -112,7 +111,7 @@ struct Barrier : Mobj
|
||||||
Player* player() const { return Player::at(playernum()); }
|
Player* player() const { return Player::at(playernum()); }
|
||||||
void player(player_t* n) { barrier_player(this) = n - players; }
|
void player(player_t* n) { barrier_player(this) = n - players; }
|
||||||
|
|
||||||
bool valid() const { return Mobj::valid() && player()->valid() && player()->mobj()->valid(); }
|
bool valid() const { return Mobj::valid(this) && Player::valid(playernum()) && Mobj::valid(player()->mobj()); }
|
||||||
|
|
||||||
bool think()
|
bool think()
|
||||||
{
|
{
|
||||||
|
|
@ -149,7 +148,7 @@ void Obj_SpawnMegaBarrier(player_t* p)
|
||||||
{
|
{
|
||||||
Player* player = static_cast<Player*>(p);
|
Player* player = static_cast<Player*>(p);
|
||||||
|
|
||||||
if (!static_cast<Mobj*>(player->powerups().barrier())->valid())
|
if (!Mobj::valid(player->powerups().barrier()))
|
||||||
{
|
{
|
||||||
Barrier::spawn_chain(player);
|
Barrier::spawn_chain(player);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue