12#ifndef TT_INCLUDE__HUMANSTATECLASS_H
13#define TT_INCLUDE__HUMANSTATECLASS_H
19class HumanAnimControlClass;
20class HumanAnimOverrideDef;
21class HumanLoiterGlobalSettingsDef;
52 HIGHEST_HUMAN_STATE = LOCKED_ANIMATION
57 CROUCHED_FLAG = 1 << 0,
58 SNIPING_FLAG = 1 << 1,
59 HIGHEST_HUMAN_STATE_FLAGS = (1 << 2) - 1
60 } HumanStateFlagsType;
63 SUB_STATE_FORWARD = 1 << 0,
64 SUB_STATE_BACKWARD = 1 << 1,
65 SUB_STATE_UP = 1 << 2,
66 SUB_STATE_DOWN = 1 << 3,
67 SUB_STATE_LEFT = 1 << 4,
68 SUB_STATE_RIGHT = 1 << 5,
69 SUB_STATE_TURN_LEFT = 1 << 6,
70 SUB_STATE_TURN_RIGHT = 1 << 7,
71 SUB_STATE_SLOW = 1 << 8,
72 HIGHEST_HUMAN_SUB_STATE = (1 << 9) - 1
82 RIGHT_ARM_FROM_BEHIND,
86 RIGHT_LEG_FROM_BEHIND,
95 HumanStateClass(
void );
96 ~HumanStateClass(
void );
97 void Init( HumanPhysClass * human_phys );
99 void Set_Anim_Control( HumanAnimControlClass * anim_control );
100 void Set_Human_Anim_Override(
const char * name );
101 void Set_Human_Anim_Override(
int def_id );
102 void Set_Human_Loiter_Collection(
int def_id );
103 bool Save( ChunkSaveClass & csave );
104 bool Load( ChunkLoadClass & cload );
105 void Set_State( HumanStateType state,
int sub_state = 0 );
106 HumanStateType Get_State(
void ) {
return State; }
107 const char * Get_State_Name(
void );
108 bool Is_State_Interruptable(
void );
109 void Set_Sub_State(
int sub_state );
110 int Get_Sub_State(
void ) {
return SubState; }
111 bool Is_Sub_State_Adjustable(
void );
112 float Get_State_Timer(
void ) {
return StateTimer; }
113 void Set_State_Timer(
float timer ) { StateTimer = timer; }
114 void Toggle_State_Flag(
int flag ) { StateFlags ^= flag; }
115 bool Get_State_Flag(
int flag ) {
return (StateFlags & flag) != 0; }
116 void Drop_Weapon(
void ) { WeaponHoldTimer = 0.001f; }
117 void Raise_Weapon(
void ) { WeaponHoldTimer = 10; }
118 void Start_Transition_Animation(
const char * anim_name,
bool blend =
true );
119 void Start_Scripted_Animation(
const char * anim_name,
bool blend =
true,
bool looping =
true );
120 void Stop_Scripted_Animation(
void );
121 void Force_Animation(
const char * anim_name,
bool blend =
true );
122 void Set_Turn_Velocity(
float vel ) { TurnVelocity = vel; }
123 void Update_Weapon( WeaponClass * weapon,
bool new_weapon );
124 void Update_Aiming(
float tilt,
float facing );
125 void Update_State(
void );
126 void Post_Think(
void );
127 void Update_Animation(
void );
128 bool Is_Locked(
void ) {
return StateLocked; }
129 bool Get_Leg_Mode(
void );
130 int Get_Ouch_Type(
const Vector3 & direction,
const char * collision_box_name );
131 static void Set_Precision(
void);
132 void Reset_Loiter_Delay(
void );
133 void Set_Loiters_Allowed(
bool allowed ) { LoitersAllowed = allowed; }
134 void Get_Information( StringClass &
string );
137 HumanStateType State;
142 float WeaponHoldTimer;
147 HumanPhysClass * HumanPhys;
148 HumanAnimControlClass * AnimControl;
156 HumanAnimOverrideDef * HumanAnimOverride;
157 HumanLoiterGlobalSettingsDef * HumanLoiterCollection;
158 static const char * Get_Wound_Anim(
int ouch_type );
159 static const char * Get_Death_Anim(
int ouch_type );
160 void Update_Recoil(WeaponClass * weapon);
161 void Begin_Jump(
void );
162 void Complete_Jump(
void );
163 void GetLegAndHoldStyle (
int *leg_style,
int *hold_style);