This repository has been archived on 2025-02-27. You can view files and clone it, but cannot push or open issues or pull requests.
CnC_Renegade/Code/Scripts/actionparams.h

228 lines
7.9 KiB
C++

/*
** 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