Tiberian Technologies Scripts Reference Revision: 9000
Loading...
Searching...
No Matches
HumanStateClass.h
1/* Renegade Scripts.dll
2 Copyright 2013 Tiberian Technologies
3
4 This file is part of the Renegade scripts.dll
5 The Renegade scripts.dll is free software; you can redistribute it and/or modify it under
6 the terms of the GNU General Public License as published by the Free
7 Software Foundation; either version 2, or (at your option) any later
8 version. See the file COPYING for more details.
9 In addition, an exemption is given to allow Run Time Dynamic Linking of this code with any closed source module that does not contain code covered by this licence.
10 Only the source code to the module(s) containing the licenced code has to be released.
11*/
12#ifndef TT_INCLUDE__HUMANSTATECLASS_H
13#define TT_INCLUDE__HUMANSTATECLASS_H
14
15#include "Matrix3D.h"
16#include "engine_io.h"
17class WeaponClass;
18class HumanPhysClass;
19class HumanAnimControlClass;
20class HumanAnimOverrideDef;
21class HumanLoiterGlobalSettingsDef;
22class HumanStateClass
23{
24
25public:
26
27 typedef enum {
28 // Interruptable states
29 UPRIGHT,
30 LAND,
31 ANIMATION,
32 WOUNDED,
33 LOITER,
34
35 // Uninterruptable states
36 AIRBORNE,
37 DIVE,
38 DEATH,
39 LADDER,
40 IN_VEHICLE,
41 TRANSITION,
42 TRANSITION_COMPLETE,
43 DESTROY,
44 DEBUG_FLY,
45 ON_FIRE,
46 ON_CHEM,
47 ON_ELECTRIC,
48 ON_CNC_FIRE,
49 ON_CNC_CHEM,
50 LOCKED_ANIMATION,
51
52 HIGHEST_HUMAN_STATE = LOCKED_ANIMATION
53
54 } HumanStateType;
55
56 typedef enum {
57 CROUCHED_FLAG = 1 << 0,
58 SNIPING_FLAG = 1 << 1,
59 HIGHEST_HUMAN_STATE_FLAGS = (1 << 2) - 1
60 } HumanStateFlagsType;
61
62 typedef enum {
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
73 } HumanSubStateType;
74
75 typedef enum {
76 HEAD_FROM_BEHIND,
77 HEAD_FROM_FRONT,
78 TORSO_FROM_BEHIND,
79 TORSO_FROM_FRONT,
80 LEFT_ARM_FROM_BEHIND,
81 LEFT_ARM_FROM_FRONT,
82 RIGHT_ARM_FROM_BEHIND,
83 RIGHT_ARM_FROM_FRONT,
84 LEFT_LEG_FROM_BEHIND,
85 LEFT_LEG_FROM_FRONT,
86 RIGHT_LEG_FROM_BEHIND,
87 RIGHT_LEG_FROM_FRONT,
88 GROIN,
89 OUCH_FIRE,
90 OUCH_CHEM,
91 OUCH_ELECTRIC,
92 OUCH_SUPER_FIRE,
93 } HumanOuchType;
94
95 HumanStateClass( void );
96 ~HumanStateClass( void );
97 void Init( HumanPhysClass * human_phys );
98 void Reset(void);
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 );
135private:
136 bool StateLocked;
137 HumanStateType State;
138 float StateTimer;
139 int StateFlags;
140 int SubState;
141 int WeaponHoldStyle;
142 float WeaponHoldTimer;
143 bool LoitersAllowed;
144 float LoiterDelay;
145 float AimingTilt;
146 float AimingTurn;
147 HumanPhysClass * HumanPhys;
148 HumanAnimControlClass * AnimControl;
149 float TurnVelocity;
150 float LegRotation;
151 Matrix3D JumpTM;
152 float RecoilTimer;
153 float RecoilScale;
154 bool NoAnimBlend;
155 bool WeaponFired;
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);
164};
165
166
167
168#endif