- Changed P_CheckPlayerSprites() so that it does not alter any actor data. It is now called by
R_ProjectSprite() to modify the appropriate data right before it is needed for rendering. SVN r4004 (trunk)
This commit is contained in:
parent
db01832519
commit
67eda6b1ad
5 changed files with 58 additions and 74 deletions
100
src/p_user.cpp
100
src/p_user.cpp
|
|
@ -1483,77 +1483,55 @@ DEFINE_ACTION_FUNCTION(AActor, A_CheckPlayerDone)
|
|||
//
|
||||
// P_CheckPlayerSprites
|
||||
//
|
||||
// Here's the place where crouching sprites are handled
|
||||
// This must be called each frame before rendering
|
||||
// Here's the place where crouching sprites are handled.
|
||||
// R_ProjectSprite() calls this for any players.
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
void P_CheckPlayerSprites()
|
||||
void P_CheckPlayerSprite(AActor *actor, unsigned &spritenum, fixed_t &scalex, fixed_t &scaley)
|
||||
{
|
||||
for(int i=0; i<MAXPLAYERS; i++)
|
||||
player_t *player = actor->player;
|
||||
fixed_t defscaleY = actor->GetDefault()->scaleY;
|
||||
fixed_t defscaleX = actor->GetDefault()->scaleX;
|
||||
int crouchspriteno;
|
||||
|
||||
if (player->userinfo.skin != 0 && !(actor->flags4 & MF4_NOSKIN))
|
||||
{
|
||||
player_t * player = &players[i];
|
||||
APlayerPawn * mo = player->mo;
|
||||
defscaleY = skins[player->userinfo.skin].ScaleY;
|
||||
defscaleX = skins[player->userinfo.skin].ScaleX;
|
||||
}
|
||||
|
||||
if (playeringame[i] && mo != NULL)
|
||||
// Set the crouch sprite?
|
||||
if (player->crouchfactor < FRACUNIT*3/4)
|
||||
{
|
||||
if (spritenum == actor->SpawnState->sprite || spritenum == player->mo->crouchsprite)
|
||||
{
|
||||
int crouchspriteno;
|
||||
fixed_t defscaleY = mo->GetDefault()->scaleY;
|
||||
fixed_t defscaleX = mo->GetDefault()->scaleX;
|
||||
|
||||
if (player->userinfo.skin != 0 && !(player->mo->flags4 & MF4_NOSKIN))
|
||||
{
|
||||
defscaleY = skins[player->userinfo.skin].ScaleY;
|
||||
defscaleX = skins[player->userinfo.skin].ScaleX;
|
||||
}
|
||||
|
||||
// Set the crouch sprite
|
||||
if (player->crouchfactor < FRACUNIT*3/4)
|
||||
{
|
||||
if (mo->sprite == mo->SpawnState->sprite || mo->sprite == mo->crouchsprite)
|
||||
{
|
||||
crouchspriteno = mo->crouchsprite;
|
||||
}
|
||||
else if (!(player->mo->flags4 & MF4_NOSKIN) &&
|
||||
(mo->sprite == skins[player->userinfo.skin].sprite ||
|
||||
mo->sprite == skins[player->userinfo.skin].crouchsprite))
|
||||
{
|
||||
crouchspriteno = skins[player->userinfo.skin].crouchsprite;
|
||||
}
|
||||
else
|
||||
{
|
||||
// no sprite -> squash the existing one
|
||||
crouchspriteno = -1;
|
||||
}
|
||||
crouchspriteno = player->mo->crouchsprite;
|
||||
}
|
||||
else if (!(actor->flags4 & MF4_NOSKIN) &&
|
||||
(spritenum == skins[player->userinfo.skin].sprite ||
|
||||
spritenum == skins[player->userinfo.skin].crouchsprite))
|
||||
{
|
||||
crouchspriteno = skins[player->userinfo.skin].crouchsprite;
|
||||
}
|
||||
else
|
||||
{ // no sprite -> squash the existing one
|
||||
crouchspriteno = -1;
|
||||
}
|
||||
|
||||
if (crouchspriteno > 0)
|
||||
{
|
||||
mo->sprite = crouchspriteno;
|
||||
mo->scaleY = defscaleY;
|
||||
}
|
||||
else if (player->playerstate != PST_DEAD)
|
||||
{
|
||||
mo->scaleY = player->crouchfactor < FRACUNIT*3/4 ? defscaleY/2 : defscaleY;
|
||||
}
|
||||
}
|
||||
else // Set the normal sprite
|
||||
{
|
||||
if (mo->sprite != 0)
|
||||
{
|
||||
if (mo->sprite == mo->crouchsprite)
|
||||
{
|
||||
mo->sprite = mo->SpawnState->sprite;
|
||||
}
|
||||
else if (mo->sprite != 0 && mo->sprite == skins[player->userinfo.skin].crouchsprite)
|
||||
{
|
||||
mo->sprite = skins[player->userinfo.skin].sprite;
|
||||
}
|
||||
}
|
||||
mo->scaleY = defscaleY;
|
||||
}
|
||||
mo->scaleX = defscaleX;
|
||||
if (crouchspriteno > 0)
|
||||
{
|
||||
spritenum = crouchspriteno;
|
||||
}
|
||||
else if (player->playerstate != PST_DEAD)
|
||||
{
|
||||
if (player->crouchfactor < FRACUNIT*3/4)
|
||||
defscaleY /= 2;
|
||||
}
|
||||
}
|
||||
// Scale the sprite by the actor, skin, and crouch values
|
||||
scalex = FixedMul(scalex, defscaleX);
|
||||
scaley = FixedMul(scaley, defscaleY);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue