From eab971500b43b6bac77af29aec1c299d68f2710e Mon Sep 17 00:00:00 2001 From: Edoardo Prezioso Date: Sat, 8 Nov 2014 00:31:16 +0100 Subject: [PATCH] Backport 'A_FaceConsolePlayer' from zandronum. By Dusk, who authorized me to do this. --- src/thingdef/thingdef_codeptr.cpp | 30 ++++++++++++++++++++++++++++++ wadsrc/static/actors/actor.txt | 1 + 2 files changed, 31 insertions(+) diff --git a/src/thingdef/thingdef_codeptr.cpp b/src/thingdef/thingdef_codeptr.cpp index 2732337c72..28affbb0f9 100644 --- a/src/thingdef/thingdef_codeptr.cpp +++ b/src/thingdef/thingdef_codeptr.cpp @@ -3781,6 +3781,36 @@ DEFINE_ACTION_FUNCTION(AActor, A_RaiseSiblings) } } +//=========================================================================== +// +// [TP] A_FaceConsolePlayer +// +//=========================================================================== +DEFINE_ACTION_FUNCTION_PARAMS (AActor, A_FaceConsolePlayer) { + ACTION_PARAM_START (1); + ACTION_PARAM_ANGLE (MaxTurnAngle, 0); + + angle_t Angle; + angle_t DeltaAngle; + AActor *pConsolePlayer; + + // Always watch the consoleplayer. + pConsolePlayer = players[consoleplayer].mo; + if (( playeringame[consoleplayer] == false ) || ( pConsolePlayer == NULL )) + return; + + // Find the angle between the actor and the console player. + Angle = R_PointToAngle2( self->x, self->y, pConsolePlayer->x, pConsolePlayer->y ); + DeltaAngle = Angle - self->angle; + + if (( MaxTurnAngle == 0 ) || ( DeltaAngle < MaxTurnAngle ) || ( DeltaAngle > (unsigned)-MaxTurnAngle )) + self->angle = Angle; + else if ( DeltaAngle < ANG180 ) + self->angle += MaxTurnAngle; + else + self->angle -= MaxTurnAngle; +} + //=========================================================================== // // A_MonsterRefire diff --git a/wadsrc/static/actors/actor.txt b/wadsrc/static/actors/actor.txt index e253f53ac9..468b0f7b5c 100644 --- a/wadsrc/static/actors/actor.txt +++ b/wadsrc/static/actors/actor.txt @@ -186,6 +186,7 @@ ACTOR Actor native //: Thinker action native A_ClearSoundTarget(); action native A_FireAssaultGun(); action native A_CheckTerrain(); + action native A_FaceConsolePlayer(float MaxTurnAngle = 0); // [TP] action native A_MissileAttack(); action native A_MeleeAttack();