- The FlagLists structure cannot be anonymous if I want to use countof with it with GCC.

- Added a stopping check to A_ChangeVelocity.

SVN r1699 (trunk)
This commit is contained in:
Randy Heit 2009-07-01 01:10:29 +00:00
parent 8554ccf2a3
commit 9bf7c02194
2 changed files with 24 additions and 10 deletions

View file

@ -2040,6 +2040,18 @@ DEFINE_ACTION_FUNCTION(AActor, A_Stop)
} }
} }
static void CheckStopped(AActor *self)
{
if (self->player != NULL &&
self->player->mo == self &&
!(self->player->cheats & CF_PREDICTING) &&
!(self->velx | self->vely | self->velz))
{
self->player->mo->PlayIdle();
self->player->velx = self->player->vely = 0;
}
}
//=========================================================================== //===========================================================================
// //
// A_Respawn // A_Respawn
@ -2610,14 +2622,9 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_ScaleVelocity)
// If the actor was previously moving but now is not, and is a player, // If the actor was previously moving but now is not, and is a player,
// update its player variables. (See A_Stop.) // update its player variables. (See A_Stop.)
if (was_moving && if (was_moving)
self->player != NULL &&
self->player->mo == self &&
!(self->player->cheats & CF_PREDICTING) &&
!(self->velx | self->vely | self->velz))
{ {
self->player->mo->PlayIdle(); CheckStopped(self);
self->player->velx = self->player->vely = 0;
} }
} }
@ -2635,6 +2642,8 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_ChangeVelocity)
ACTION_PARAM_FIXED(z, 2); ACTION_PARAM_FIXED(z, 2);
ACTION_PARAM_INT(flags, 3); ACTION_PARAM_INT(flags, 3);
INTBOOL was_moving = self->velx | self->vely | self->velz;
fixed_t vx = x, vy = y, vz = z; fixed_t vx = x, vy = y, vz = z;
fixed_t sina = finesine[self->angle >> ANGLETOFINESHIFT]; fixed_t sina = finesine[self->angle >> ANGLETOFINESHIFT];
fixed_t cosa = finecosine[self->angle >> ANGLETOFINESHIFT]; fixed_t cosa = finecosine[self->angle >> ANGLETOFINESHIFT];
@ -2656,4 +2665,9 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_ChangeVelocity)
self->vely += vy; self->vely += vy;
self->velz += vz; self->velz += vz;
} }
if (was_moving)
{
CheckStopped(self);
}
} }

View file

@ -297,7 +297,7 @@ static FFlagDef PlayerPawnFlags[] =
DEFINE_FLAG(PPF, NOTHRUSTWHENINVUL, APlayerPawn, PlayerFlags), DEFINE_FLAG(PPF, NOTHRUSTWHENINVUL, APlayerPawn, PlayerFlags),
}; };
static const struct { const PClass *Type; FFlagDef *Defs; int NumDefs; } FlagLists[] = static const struct FFlagList { const PClass *Type; FFlagDef *Defs; int NumDefs; } FlagLists[] =
{ {
{ RUNTIME_CLASS(AActor), ActorFlags, countof(ActorFlags) }, { RUNTIME_CLASS(AActor), ActorFlags, countof(ActorFlags) },
{ RUNTIME_CLASS(AInventory), InventoryFlags, countof(InventoryFlags) }, { RUNTIME_CLASS(AInventory), InventoryFlags, countof(InventoryFlags) },
@ -344,7 +344,7 @@ static FFlagDef *FindFlag (FFlagDef *flags, int numflags, const char *flag)
FFlagDef *FindFlag (const PClass *type, const char *part1, const char *part2) FFlagDef *FindFlag (const PClass *type, const char *part1, const char *part2)
{ {
FFlagDef *def; FFlagDef *def;
int i; size_t i;
if (part2 == NULL) if (part2 == NULL)
{ // Search all lists { // Search all lists
@ -534,7 +534,7 @@ static int STACK_ARGS varcmp(const void * a, const void * b)
void InitThingdef() void InitThingdef()
{ {
// Sort the flag lists // Sort the flag lists
for (int i = 0; i < NUM_FLAG_LISTS; ++i) for (size_t i = 0; i < NUM_FLAG_LISTS; ++i)
{ {
qsort (FlagLists[i].Defs, FlagLists[i].NumDefs, sizeof(FFlagDef), flagcmp); qsort (FlagLists[i].Defs, FlagLists[i].NumDefs, sizeof(FFlagDef), flagcmp);
} }