12#ifndef TT_INCLUDE_PHYSICALGAMEOBJ_H
13#define TT_INCLUDE_PHYSICALGAMEOBJ_H
14#include "DamageableGameObj.h"
15#include "PhysObserverClass.h"
16#include "PhysicalGameObjDef.h"
18#include "AnimControlClass.h"
19class ActiveConversationClass;
24class CinematicGameObj;
28class PhysicalGameObj :
public DamageableGameObj,
public CombatPhysObserverClass {
30 PhysicalGameObj(
void );
31 virtual ~PhysicalGameObj(
void );
32 void Init(
const PhysicalGameObjDef & definition );
33 void Copy_Settings(
const PhysicalGameObjDef & definition );
34 void Re_Init(
const PhysicalGameObjDef & definition );
35 const PhysicalGameObjDef SCRIPTS_API & Get_Definition(
void )
const ;
36 virtual bool Save( ChunkSaveClass & csave );
37 virtual bool Load( ChunkLoadClass & cload );
38 virtual void On_Post_Load(
void);
39 virtual void Startup(
void ) {}
40 inline PhysClass * Peek_Physical_Object(
void )
const {
return PhysObj; }
41 void Attach_To_Object_Bone( PhysicalGameObj * host,
const char * bone_name );
42 bool Is_Attached_To_An_Object(
void ) {
return (HostGameObj.Get_Ptr () != NULL); }
43 void Teleport_To_Host_Bone(
void );
44 SCRIPTS_API
void Set_Transform(
const Matrix3D & tm);
45 SCRIPTS_API
const Matrix3D & Get_Transform(
void)
const;
46 virtual void Get_Position(Vector3 * set_pos)
const;
47 SCRIPTS_API Vector3 Get_Position() { Vector3 Return; Peek_Physical_Object()->Get_Position(&Return);
return Return; }
48 SCRIPTS_API
void Set_Position(
const Vector3 & pos);
49 SCRIPTS_API
float Get_Facing(
void)
const;
50 inline RenderObjClass * Peek_Model(
void ) {
return Peek_Physical_Object()->Peek_Model(); }
51 SCRIPTS_API AnimControlClass* Get_Anim_Control(
void );
52 void Set_Anim_Control( AnimControlClass * anim_control );
53 virtual void Set_Animation(
const char *animation_name,
bool looping =
true,
float frame_offset = 0.0f );
54 virtual void Set_Animation_Frame (
const char *animation_name,
int frame );
55 float Get_Bullseye_Offset_Z(
void )
const {
return Get_Definition().BullseyeOffsetZ; }
56 virtual Vector3 Get_Bullseye_Position(
void );
57 virtual void Get_Information( StringClass &
string );
58 virtual void Apply_Damage(
const OffenseObjectClass & damager,
float scale = 1.0f,
int alternate_skin = -1 );
59 virtual void Apply_Damage_Extended(
const OffenseObjectClass & offense,
float scale = 1.0f,
60 const Vector3 & direction = Vector3( 0,0,0 ),
const char * collision_box_name = NULL );
61 virtual void Completely_Damaged(
const OffenseObjectClass & damager );
63 virtual bool Takes_Explosion_Damage(
void ) {
return true; }
64 int Get_Type()
const {
return Get_Definition().Type; }
65 virtual void Post_Think();
66 void SCRIPTS_API Set_Collision_Group(
int group );
67 Collision_Group_Type Get_Collision_Group()
const {
return PhysObj->Get_Collision_Group(); }
68 virtual ExpirationReactionType Object_Expired( PhysClass * observed_obj ) { Set_Delete_Pending();
return 1; }
69 virtual PhysicalGameObj *As_PhysicalGameObj(
void ) {
return this; }
70 virtual DamageableGameObj *As_DamageableGameObj(
void ) {
return this; }
71 virtual SoldierGameObj *As_SoldierGameObj(
void ) {
return (SoldierGameObj *)NULL; }
72 virtual PowerUpGameObj *As_PowerUpGameObj(
void ) {
return (PowerUpGameObj *)NULL; }
73 virtual VehicleGameObj *As_VehicleGameObj(
void ) {
return (VehicleGameObj *)NULL; }
74 virtual C4GameObj *As_C4GameObj(
void ) {
return (C4GameObj *)NULL; }
75 virtual BeaconGameObj *As_BeaconGameObj (
void) {
return (BeaconGameObj *)NULL; }
76 virtual ArmedGameObj *As_ArmedGameObj(
void ) {
return (ArmedGameObj *)NULL; }
77 virtual CinematicGameObj *As_CinematicGameObj(
void ) {
return NULL; }
78 virtual SimpleGameObj *As_SimpleGameObj(
void ) {
return NULL; }
79 BYTE Get_Server_Skips(
void) {
return ServerUpdateSkips;}
80 void Reset_Server_Skips(BYTE value);
81 void Increment_Server_Skips(
void);
82 virtual bool Is_Hibernating(
void ) {
return HibernationTimer <= 0; }
83 void Enable_Hibernation(
bool enable ) { HibernationEnable = enable;
if ( Is_Hibernating() ) HibernationTimer = 1;}
84 void Reset_Hibernating(
void );
85 void Do_Not_Hibernate(
void ) {
if ( HibernationTimer < 1 ) HibernationTimer = 1; }
86 virtual void Begin_Hibernation(
void );
87 virtual void End_Hibernation(
void );
88 int Get_Radar_Blip_Shape_Type(
void ) {
return RadarBlipShapeType; }
89 void Set_Radar_Blip_Shape_Type(
int type ) { RadarBlipShapeType = type; Set_Object_Dirty_Bit(NetworkObjectClass::BIT_RARE,
true);}
90 void Reset_Radar_Blip_Shape_Type(
void ) { RadarBlipShapeType = Get_Definition().RadarBlipType; Set_Object_Dirty_Bit(NetworkObjectClass::BIT_RARE,
true);}
91 int Get_Radar_Blip_Color_Type(
void ) {
return RadarBlipColorType; }
92 void Set_Radar_Blip_Color_Type(
int type ) { RadarBlipColorType = type; Set_Object_Dirty_Bit(NetworkObjectClass::BIT_RARE,
true);}
93 void Reset_Radar_Blip_Color_Type(
void );
94 float Get_Radar_Blip_Intensity(
void ) {
return RadarBlipIntensity; }
95 void Set_Radar_Blip_Intensity(
float value ) { RadarBlipIntensity = value; }
96 virtual void Export_Creation( BitStreamClass &packet );
97 virtual void Import_Creation( BitStreamClass &packet );
98 virtual void Export_Rare( BitStreamClass &packet );
99 virtual void Import_Rare( BitStreamClass &packet );
100 virtual void Export_Frequent( BitStreamClass &packet );
101 virtual void Import_Frequent( BitStreamClass &packet );
102 virtual int Get_Vis_ID(
void);
103 virtual bool Get_World_Position (Vector3 &pos)
const { Get_Position (&pos);
return true; }
104 bool Are_Innate_Conversations_Enabled(
void ) {
return Get_Definition().AllowInnateConversations && IsInnateConversationsEnabled; }
105 void Enable_Innate_Conversations(
bool enable ) { IsInnateConversationsEnabled = enable; }
106 bool Is_In_Conversation(
void )
const {
return ActiveConversation != NULL; }
107 void Set_Conversation( ActiveConversationClass *conversation );
108 void Hide_Muzzle_Flashes(
bool hide =
true );
109 void Enable_HUD_Pokable_Indicator(
bool enable );
110 bool Is_HUD_Pokable_Indicator_Enabled(
void ) {
return HUDPokableIndicatorEnabled; }
111 virtual void Set_Player_Type(
int type);
112 virtual void Object_Shattered_Something(PhysClass * observed_obj, PhysClass * shattered_obj,
int surface_type);
113 void Clear_Animation() {
if (AnimControl) {AnimControl->Set_Animation((
const char*)NULL, 0, 0);AnimControl->Set_Mode(ANIM_MODE_STOP,0);ClearAnimation =
true;Set_Object_Dirty_Bit(NetworkObjectClass::BIT_RARE,
true);}}
114 void Set_Team_Visibility(TeamVisibilitySetting setting) {TeamVisibility = (char)setting;Set_Object_Dirty_Bit(NetworkObjectClass::BIT_RARE,
true);}
115 void Set_Player_Visible(
bool visible) {PlayerVisible = visible;}
116 GameObject * Get_Parent_Object(){
return HostGameObj;}
118 ActiveConversationClass *ActiveConversation;
121 AnimControlClass * AnimControl;
122 BYTE ServerUpdateSkips;
123 float HibernationTimer;
124 bool HibernationEnable;
126 ReferencerClass HostGameObj;
128 int RadarBlipShapeType;
129 int RadarBlipColorType;
130 float RadarBlipIntensity;
131 int PendingHostObjID;
132 bool HUDPokableIndicatorEnabled;
133 bool IsInnateConversationsEnabled;