Merge remote-tracking branch 'upstream/master' into truecolor

# Conflicts:
#	src/r_things.cpp
This commit is contained in:
Magnus Norddahl 2016-06-17 08:23:42 +02:00
commit 3369a2747c
42 changed files with 1182 additions and 557 deletions

View file

@ -1110,17 +1110,17 @@ void APowerWeaponLevel2::InitEffect ()
Super::InitEffect();
if (Owner->player == NULL)
if (Owner->player == nullptr)
return;
weapon = Owner->player->ReadyWeapon;
if (weapon == NULL)
if (weapon == nullptr)
return;
sister = weapon->SisterWeapon;
if (sister == NULL)
if (sister == nullptr)
return;
if (!(sister->WeaponFlags & WIF_POWERED_UP))
@ -1132,7 +1132,7 @@ void APowerWeaponLevel2::InitEffect ()
if (weapon->GetReadyState() != sister->GetReadyState())
{
P_SetPsprite (Owner->player, ps_weapon, sister->GetReadyState());
P_SetPsprite(Owner->player, PSP_WEAPON, sister->GetReadyState());
}
}
@ -1295,29 +1295,42 @@ void APowerTargeter::Travelled ()
void APowerTargeter::InitEffect ()
{
// Why is this called when the inventory isn't even attached yet
// in APowerup::CreateCopy?
if (!Owner->FindInventory(GetClass(), true))
return;
player_t *player;
Super::InitEffect();
if ((player = Owner->player) == NULL)
if ((player = Owner->player) == nullptr)
return;
FState *state = FindState("Targeter");
if (state != NULL)
if (state != nullptr)
{
P_SetPsprite (player, ps_targetcenter, state + 0);
P_SetPsprite (player, ps_targetleft, state + 1);
P_SetPsprite (player, ps_targetright, state + 2);
P_SetPsprite(player, PSP_TARGETCENTER, state + 0);
P_SetPsprite(player, PSP_TARGETLEFT, state + 1);
P_SetPsprite(player, PSP_TARGETRIGHT, state + 2);
}
player->psprites[ps_targetcenter].sx = (160-3);
player->psprites[ps_targetcenter].sy =
player->psprites[ps_targetleft].sy =
player->psprites[ps_targetright].sy = (100-3);
player->GetPSprite(PSP_TARGETCENTER)->x = (160-3);
player->GetPSprite(PSP_TARGETCENTER)->y =
player->GetPSprite(PSP_TARGETLEFT)->y =
player->GetPSprite(PSP_TARGETRIGHT)->y = (100-3);
PositionAccuracy ();
}
void APowerTargeter::AttachToOwner(AActor *other)
{
Super::AttachToOwner(other);
// Let's actually properly call this for the targeters.
InitEffect();
}
bool APowerTargeter::HandlePickup(AInventory *item)
{
if (Super::HandlePickup(item))
@ -1328,13 +1341,11 @@ bool APowerTargeter::HandlePickup(AInventory *item)
return false;
}
void APowerTargeter::DoEffect ()
{
Super::DoEffect ();
if (Owner != NULL && Owner->player != NULL)
if (Owner != nullptr && Owner->player != nullptr)
{
player_t *player = Owner->player;
@ -1343,17 +1354,17 @@ void APowerTargeter::DoEffect ()
{
FState *state = FindState("Targeter");
if (state != NULL)
if (state != nullptr)
{
if (EffectTics & 32)
{
P_SetPsprite (player, ps_targetright, NULL);
P_SetPsprite (player, ps_targetleft, state+1);
P_SetPsprite(player, PSP_TARGETRIGHT, nullptr);
P_SetPsprite(player, PSP_TARGETLEFT, state + 1);
}
else if (EffectTics & 16)
{
P_SetPsprite (player, ps_targetright, state+2);
P_SetPsprite (player, ps_targetleft, NULL);
P_SetPsprite(player, PSP_TARGETRIGHT, state + 2);
P_SetPsprite(player, PSP_TARGETLEFT, nullptr);
}
}
}
@ -1363,11 +1374,17 @@ void APowerTargeter::DoEffect ()
void APowerTargeter::EndEffect ()
{
Super::EndEffect();
if (Owner != NULL && Owner->player != NULL)
if (Owner != nullptr && Owner->player != nullptr)
{
P_SetPsprite (Owner->player, ps_targetcenter, NULL);
P_SetPsprite (Owner->player, ps_targetleft, NULL);
P_SetPsprite (Owner->player, ps_targetright, NULL);
// Calling GetPSprite here could crash if we're creating a new game.
// This is because P_SetupLevel nulls the player's mo before destroying
// every DThinker which in turn ends up calling this.
// However P_SetupLevel is only called after G_NewInit which calls
// every player's dtor which destroys all their psprites.
DPSprite *pspr;
if ((pspr = Owner->player->FindPSprite(PSP_TARGETCENTER)) != nullptr) pspr->SetState(nullptr);
if ((pspr = Owner->player->FindPSprite(PSP_TARGETLEFT)) != nullptr) pspr->SetState(nullptr);
if ((pspr = Owner->player->FindPSprite(PSP_TARGETRIGHT)) != nullptr) pspr->SetState(nullptr);
}
}
@ -1375,10 +1392,10 @@ void APowerTargeter::PositionAccuracy ()
{
player_t *player = Owner->player;
if (player != NULL)
if (player != nullptr)
{
player->psprites[ps_targetleft].sx = (160-3) - ((100 - player->mo->accuracy));
player->psprites[ps_targetright].sx = (160-3)+ ((100 - player->mo->accuracy));
player->GetPSprite(PSP_TARGETLEFT)->x = (160-3) - ((100 - player->mo->accuracy));
player->GetPSprite(PSP_TARGETRIGHT)->x = (160-3)+ ((100 - player->mo->accuracy));
}
}