12#ifndef TT_INCLUDE__ANIMCOLLISIONMANAGERCLASS_H
13#define TT_INCLUDE__ANIMCOLLISIONMANAGERCLASS_H
17class AnimCollisionManagerDefClass;
21#include "RenderObjClass.h"
23#include "engine_vector.h"
24#ifdef PARAM_EDITING_ON
25#define ANIMCOLLISIONMANAGERDEF_EDITABLE_PARAMS( class_name, member_name ) \
26 PARAM_SEPARATOR( class_name, "Animation Settings"); \
27 EnumParameterClass *collision_param = new EnumParameterClass(& member_name ## .CollisionMode); \
28 collision_param->Set_Name ("CollisionMode"); \
29 collision_param->Add_Value("NONE",AnimCollisionManagerClass::COLLIDE_NONE); \
30 collision_param->Add_Value("STOP",AnimCollisionManagerClass::COLLIDE_STOP); \
31 collision_param->Add_Value("PUSH",AnimCollisionManagerClass::COLLIDE_PUSH); \
32 collision_param->Add_Value("KILL",AnimCollisionManagerClass::COLLIDE_KILL); \
33 GENERIC_EDITABLE_PARAM( class_name , collision_param); \
34 EnumParameterClass *anim_param = new EnumParameterClass(& member_name ## .AnimationMode); \
35 anim_param->Set_Name ("AnimationMode"); \
36 anim_param->Add_Value("LOOP",AnimCollisionManagerClass::ANIMATE_LOOP); \
37 anim_param->Add_Value("TARGET",AnimCollisionManagerClass::ANIMATE_TARGET); \
38 anim_param->Add_Value("MANUAL",AnimCollisionManagerClass::ANIMATE_MANUAL); \
39 GENERIC_EDITABLE_PARAM( class_name , anim_param); \
40 NAMED_EDITABLE_PARAM( class_name, ParameterClass::TYPE_STRING, member_name ## .AnimationName,"AnimationName");
42#define ANIMCOLLISIONMANAGERDEF_EDITABLE_PARAMS( class_name, member_name )
44class AnimCollisionManagerDefClass
47 AnimCollisionManagerDefClass(
void);
48 ~AnimCollisionManagerDefClass(
void);
49 void Validate_Parameters(
void);
50 bool Save(ChunkSaveClass &csave);
51 bool Load(ChunkLoadClass &cload);
55 StringClass AnimationName;
58class RiderManagerClass
61 RiderManagerClass(
void);
62 ~RiderManagerClass(
void);
63 void Link_Rider(PhysClass * obj);
64 void Unlink_Rider(PhysClass * obj);
65 bool Contains(PhysClass * obj);
66 void Move_Riders(
const Matrix3D & delta,RenderObjClass * carrier_sub_obj = NULL);
67 MultiListClass<PhysClass> * Get_Rider_List(
void) {
return &RiderList; }
69 MultiListClass<PhysClass> RiderList;
71class AnimCollisionManagerClass
74 AnimCollisionManagerClass(PhysClass & parent);
75 ~AnimCollisionManagerClass(
void);
76 void Init(
const AnimCollisionManagerDefClass & def);
77 void Update_Cached_Model_Parameters(
void);
78 bool Timestep(
float dt);
85 void Set_Animation_Mode(AnimModeType mode);
86 AnimModeType Get_Animation_Mode(
void);
87 void Set_Animation(
const char * anim_name);
88 HAnimClass * Peek_Animation(
void);
89 void Set_Target_Frame(
float frame);
90 void Set_Target_Frame_End(
void);
91 float Get_Target_Frame(
void);
92 bool Is_At_Target(
void);
93 void Set_Current_Frame(
float frame);
94 float Get_Current_Frame(
void);
95 void Set_Loop_Start(
float frame0);
96 void Set_Loop_End(
float frame1);
97 float Get_Loop_Start(
void);
98 float Get_Loop_End(
void);
99 enum CollisionModeType
106 void Set_Collision_Mode(CollisionModeType mode);
107 CollisionModeType Get_Collision_Mode(
void);
108 bool Link_Rider(PhysClass * rider) { RiderManager.Link_Rider(rider);
return true; }
109 bool Unlink_Rider(PhysClass * rider) { RiderManager.Unlink_Rider(rider);
return true; }
110 bool Save(ChunkSaveClass &csave);
111 bool Load(ChunkLoadClass &cload);
113 class CollideableObjClass
116 CollideableObjClass(
void);
117 CollideableObjClass(RenderObjClass * collisionmesh);
118 CollideableObjClass(
const CollideableObjClass & that);
119 ~CollideableObjClass(
void)
121 REF_PTR_RELEASE(CollisionMesh);
123 CollideableObjClass & operator = (
const CollideableObjClass & that);
124 bool operator == (
const CollideableObjClass & that)
const {
return false; }
125 bool operator != (
const CollideableObjClass & that)
const {
return true; }
126 void Set_Collision_Object(RenderObjClass * mesh);
127 RenderObjClass * Peek_Collision_Object(
void) {
return CollisionMesh; }
128 void Cache_Start_Transform(
void) { StartTransform = CollisionMesh->Get_Transform(); }
129 void Cache_End_Transform(
void) { EndTransform = CollisionMesh->Get_Transform(); }
130 Matrix3D & Get_Start_Transform(
void) {
return StartTransform; }
131 Matrix3D & Get_End_Transform(
void) {
return EndTransform; }
132 void Install_Start_Transform(
void) { CollisionMesh->Set_Transform(StartTransform); }
133 void Install_End_Transform(
void) { CollisionMesh->Set_Transform(EndTransform); }
134 void Intersect_Scene(
int colgroup,MultiListClass<PhysClass> * list);
135 int Clear_Collision_Bits(
void);
136 void Restore_Collision_Bits(
int oldbits);
138 RenderObjClass * CollisionMesh;
139 Matrix3D StartTransform;
140 Matrix3D EndTransform;
142 bool Is_Collision_Model(RenderObjClass * model);
143 int Recursive_Count_Collision_Models(RenderObjClass * model);
144 void Recursive_Collect_Collision_Models(RenderObjClass * model);
145 void Revert_Animation_State(
void);
146 bool Check_Collision(CollideableObjClass & collisionobj);
147 bool Is_Intersecting(
void);
148 bool Push_Collided_Object(PhysClass * obj,
const Matrix3D & delta_transform);
149 void Internal_Set_Animation(
const char * anim_name);
151 AnimModeType AnimationMode;
155 HAnimClass * CurAnimation;
157 HAnimClass * PrevAnimation;
159 RiderManagerClass RiderManager;
160 CollisionModeType CollisionMode;
161 DynamicVectorClass<CollideableObjClass> CollisionMeshes;
162 PushRecordClass * PushList;