- Added PinkSilver's SetActorVelocity code submission (with optimizations.)

SVN r1799 (trunk)
This commit is contained in:
Christoph Oelckers 2009-09-06 08:27:18 +00:00
parent e8d1416d81
commit 93f6f1d701
4 changed files with 41 additions and 0 deletions

View file

@ -1,3 +1,6 @@
September 6, 2009 (Changes by Graf Zahl)
- Added PinkSilver's SetActorVelocity code submission (with optimizations.)
September 5, 2009 September 5, 2009
- Added the frandom decorate function, which is exactly like random except - Added the frandom decorate function, which is exactly like random except
that it works with floating point instead of integers. that it works with floating point instead of integers.

View file

@ -2873,6 +2873,7 @@ enum EACSFunctions
ACSF_SpawnSpotForced, ACSF_SpawnSpotForced,
ACSF_SpawnSpotFacingForced, ACSF_SpawnSpotFacingForced,
ACSF_CheckActorProperty, ACSF_CheckActorProperty,
ACSF_SetActorVelocity,
}; };
int DLevelScript::SideFromID(int id, int side) int DLevelScript::SideFromID(int id, int side)
@ -3054,6 +3055,22 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, SDWORD *args)
case ACSF_CheckActorProperty: case ACSF_CheckActorProperty:
return (CheckActorProperty(args[0], args[1], args[2])); return (CheckActorProperty(args[0], args[1], args[2]));
case ACSF_SetActorVelocity:
if (args[0] == 0)
{
P_Thing_SetVelocity(activator, args[1], args[2], args[3], !!args[4]);
}
else
{
TActorIterator<AActor> iterator (args[0]);
while ( (actor = iterator.Next ()) )
{
P_Thing_SetVelocity(actor, args[1], args[2], args[3], !!args[4]);
}
}
return 0;
default: default:
break; break;

View file

@ -139,6 +139,7 @@ bool P_Thing_Projectile (int tid, AActor *source, int type, const char * type_na
bool P_MoveThing(AActor *source, fixed_t x, fixed_t y, fixed_t z, bool fog); bool P_MoveThing(AActor *source, fixed_t x, fixed_t y, fixed_t z, bool fog);
bool P_Thing_Move (int tid, AActor *source, int mapspot, bool fog); bool P_Thing_Move (int tid, AActor *source, int mapspot, bool fog);
int P_Thing_Damage (int tid, AActor *whofor0, int amount, FName type); int P_Thing_Damage (int tid, AActor *whofor0, int amount, FName type);
void P_Thing_SetVelocity(AActor *actor, fixed_t vx, fixed_t vy, fixed_t vz, bool add);
void P_RemoveThing(AActor * actor); void P_RemoveThing(AActor * actor);
bool P_Thing_Raise(AActor *thing); bool P_Thing_Raise(AActor *thing);

View file

@ -478,6 +478,26 @@ bool P_Thing_Raise(AActor *thing)
return true; return true;
} }
void P_Thing_SetVelocity(AActor *actor, fixed_t vx, fixed_t vy, fixed_t vz, bool add)
{
if (actor != NULL)
{
if (!add)
{
actor->velx = actor->vely = actor->velz = 0;
if (actor->player != NULL) actor->player->velx = actor->player->vely = 0;
}
actor->velx += vx;
actor->vely += vy;
actor->velz += vz;
if (actor->player != NULL)
{
actor->player->velx += vx;
actor->player->vely += vy;
}
}
}
CCMD (dumpspawnables) CCMD (dumpspawnables)
{ {