| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- /*
- ** Command & Conquer Renegade(tm)
- ** Copyright 2025 Electronic Arts Inc.
- **
- ** This program is free software: you can redistribute it and/or modify
- ** it under the terms of the GNU General Public License as published by
- ** the Free Software Foundation, either version 3 of the License, or
- ** (at your option) any later version.
- **
- ** This program is distributed in the hope that it will be useful,
- ** but WITHOUT ANY WARRANTY; without even the implied warranty of
- ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ** GNU General Public License for more details.
- **
- ** You should have received a copy of the GNU General Public License
- ** along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- /***********************************************************************************************
- *** Confidential - Westwood Studios ***
- ***********************************************************************************************
- * *
- * Project Name : Commando *
- * *
- * $Archive:: /Commando/Code/Combat/actionparams.h $*
- * *
- * $Author:: Byon_g $*
- * *
- * $Modtime:: 3/19/02 11:31a $*
- * *
- * $Revision:: 30 $*
- * *
- *---------------------------------------------------------------------------------------------*
- * Functions: *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- #ifndef ACTIONPARAMS_H
- #define ACTIONPARAMS_H
- #ifndef ALWAYS_H
- #include "always.h"
- #endif
- #ifndef VECTOR3_H
- #include "vector3.h"
- #endif
- #ifndef GAMEOBJOBSERVER_H
- #include "gameobjobserver.h"
- #endif
- /*
- **
- */
- class ScriptableGameObj;
- typedef ScriptableGameObj GameObject;
- /*
- **
- */
- typedef enum {
- NO_AI_STATE_CHANGE = -1,
- AI_STATE_IDLE = 0,
- AI_STATE_SECONDARY_IDLE,
- AI_STATE_SEARCH,
- AI_STATE_COMBAT
- } SoldierAIState;
- /*
- **
- */
- const float DONT_MOVE_ARRIVED_DIST = 1000.0F;
- /*
- **
- */
- class ActionParamsStruct {
- public:
- ActionParamsStruct( void );
- void Set_Basic( GameObjObserverClass * script, float priority, int action_id, SoldierAIState ai_state = NO_AI_STATE_CHANGE ) { ObserverID = script->Get_ID(); Priority = priority; ActionID = action_id; AIState = ai_state; }
- void Set_Basic( long observer_id, float priority, int action_id, SoldierAIState ai_state = NO_AI_STATE_CHANGE ) { ObserverID = observer_id; Priority = priority; ActionID = action_id; AIState = ai_state; }
- void Set_Look( const Vector3 & location, float duration ) { LookLocation = location; LookDuration = duration; }
- void Set_Look( GameObject * object, float duration ) { LookObject = object; LookDuration = duration; }
- void Set_Look( const Vector3 & obj_pos, float angle, float duration );
- void Set_Movement( const Vector3 & location, float speed, float arrived_distance, bool crouched = false ) { MoveLocation = location; MoveSpeed = speed; MoveArrivedDistance = arrived_distance; MoveCrouched = crouched; }
- void Set_Movement( GameObject * object, float speed, float arrived_distance, bool crouched = false ) { MoveObject = object; MoveSpeed = speed; MoveArrivedDistance = arrived_distance; MoveCrouched = crouched; }
- void Set_Attack( const Vector3 & location, float range, float error, bool primary_fire ) { AttackLocation = location; AttackRange = range; AttackError = error; AttackPrimaryFire = primary_fire; }
- void Set_Attack( GameObject * object, float range, float error, bool primary_fire ) { AttackObject = object; AttackRange = range; AttackError = error; AttackPrimaryFire = primary_fire; }
- void Set_Animation( const char * name, bool looping ) { AnimationName = name; AnimationLooping = looping; }
- void Set_Face_Location( const Vector3 &location, float duration ) { FaceLocation = location; FaceDuration = duration; }
- void Set_Face_Location( const Vector3 & obj_pos, float angle, float duration );
- void Join_Conversation( int active_conversation_id ) { ActiveConversationID = active_conversation_id; }
- void Start_Conversation( const char * name ) { ConversationName = name; }
- void Dock_Vehicle( const Vector3 &dock_location, const Vector3 &dock_entrance ) { DockLocation = dock_location; DockEntrance = dock_entrance; }
- //protected:
- // Note: all of these must be saved in SafeActionParamsStruct::Save
- int Priority;
- int ActionID;
- long ObserverID;
- Vector3 LookLocation;
- GameObject * LookObject;
- float LookDuration;
- Vector3 MoveLocation;
- GameObject * MoveObject;
- Vector3 MoveObjectOffset;
- float MoveSpeed;
- float MoveArrivedDistance;
- bool MoveBackup;
- bool MoveFollow;
- bool MoveCrouched;
- bool MovePathfind;
- bool ShutdownEngineOnArrival;
- float AttackRange;
- float AttackError;
- bool AttackErrorOverride;
- GameObject * AttackObject;
- bool AttackPrimaryFire;
- bool AttackCrouched;
- Vector3 AttackLocation;
- bool AttackCheckBlocked;
- bool AttackActive;
- bool AttackWanderAllowed;
- bool AttackFaceTarget; // (gth) control over whether VTOL vehicles face their target when attacking
- bool AttackForceFire;
- bool ForceFacing;
- Vector3 FaceLocation;
- float FaceDuration;
- bool IgnoreFacing;
- int WaypathID;
- int WaypointStartID;
- int WaypointEndID;
- bool WaypathSplined;
- const char * AnimationName;
- bool AnimationLooping;
- int ActiveConversationID;
- const char * ConversationName;
- SoldierAIState AIState;
- Vector3 DockLocation;
- Vector3 DockEntrance;
- };
- inline ActionParamsStruct::ActionParamsStruct( void ) :
- Priority( 0 ),
- ActionID( 0 ),
- ObserverID( 0 ),
- LookLocation( 0,0,0 ),
- LookObject( NULL ),
- LookDuration( 0 ),
- MoveLocation( 0,0,0 ),
- MoveObject( NULL ),
- MoveObjectOffset( 0,0,0 ),
- MoveSpeed( 1 ),
- MoveArrivedDistance( DONT_MOVE_ARRIVED_DIST ),
- MoveBackup( false ),
- MoveFollow( false ),
- MoveCrouched( false ),
- MovePathfind( true ),
- ShutdownEngineOnArrival( false ),
- AttackRange( 20 ),
- AttackError( 0 ),
- AttackErrorOverride( false ),
- AttackObject( NULL ),
- AttackPrimaryFire( true ),
- AttackCrouched( false ),
- AttackLocation( 0,0,0 ),
- AttackCheckBlocked( true ),
- AttackActive( true ),
- AttackWanderAllowed( false ),
- AttackFaceTarget( true ),
- AttackForceFire( false ),
- ForceFacing( false ),
- IgnoreFacing( false ),
- FaceLocation( 0, 0, 0 ),
- FaceDuration( 2.0F ),
- WaypathID( 0 ),
- WaypointStartID( 0 ),
- WaypointEndID( 0 ),
- WaypathSplined( false ),
- AnimationName( NULL ),
- AnimationLooping( false ),
- ActiveConversationID( 0 ),
- ConversationName( NULL ),
- AIState( NO_AI_STATE_CHANGE ),
- DockLocation( 0,0,0 ),
- DockEntrance( 0,0,0 )
- {
- }
- void inline ActionParamsStruct::Set_Face_Location( const Vector3 &obj_pos, float angle, float duration )
- {
- FaceLocation = obj_pos;
- FaceLocation.X += ::cos( angle );
- FaceLocation.Y += ::sin( angle );
- FaceDuration = duration;
- return ;
- }
- void inline ActionParamsStruct::Set_Look( const Vector3 &obj_pos, float angle, float duration )
- {
- LookLocation = obj_pos;
- LookLocation.X += ::cos( angle );
- LookLocation.Y += ::sin( angle );
- LookDuration = duration;
- return ;
- }
- #endif // ACTIONPARAMS_H
|