mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-12-01 00:21:43 +00:00
- 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:
parent
8554ccf2a3
commit
9bf7c02194
2 changed files with 24 additions and 10 deletions
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue