2 @Copyright Looking Glass Studios, Inc.
3 1996,1997,1998,1999,2000 Unpublished Work.
6 ///////////////////////////////////////////////////////////////////////////////
7 // $Header: r:/t2repos/thief2/src/physics/physapi.h,v 1.56 2000/01/31 09:52:12 adurant Exp $
11 // @TBD (toml 08-05-97): when the time is right, we'll convert this to a component object
13 // @Note (toml 08-05-97): we'll probably want to expose some base structures here, like
14 // PhysClsn in phytyp2.h, then allow the installation of game
15 // callbacks for control, update, collision handling, etc.
32 typedef int eMediaState
;
35 #define PHYSICS_HIGH_MODEL_PROP_NAME "PhysicsHighDetail"
36 #define PHYSICS_LOW_MODEL_PROP_NAME "PhysicsLowDetail"
38 #define PLAYER_RADIUS (1.2)
39 #define PLAYER_HEIGHT (6.0)
41 #define PLAYER_HEAD (0)
42 #define PLAYER_FOOT (1)
43 #define PLAYER_BODY (2)
44 #define PLAYER_KNEE (3)
45 #define PLAYER_SHIN (4)
47 #define PLAYER_HEAD_POS ((PLAYER_HEIGHT / 2) - PLAYER_RADIUS)
48 #define PLAYER_FOOT_POS (-(PLAYER_HEIGHT / 2))
49 #define PLAYER_BODY_POS ((PLAYER_HEIGHT / 2) - (PLAYER_RADIUS * 3))
50 #define PLAYER_KNEE_POS (-(PLAYER_HEIGHT * (13.0 / 30.0)))
51 #define PLAYER_SHIN_POS (-(PLAYER_HEIGHT * (11.0 / 30.0)))
53 #define DEFAULT_SPRING_TENSION (0.6)
54 #define DEFAULT_SPRING_DAMPING (0.02)
57 #define ResetObjectWarnings()
58 #define SetObjectWarned(x)
59 #define HasObjectWarned(x) FALSE
61 void ResetObjectWarnings();
62 void SetObjectWarned(ObjID objID
);
63 BOOL
HasObjectWarned(ObjID objID
);
66 // for when a system is updating physics itself
67 EXTERN BOOL PosPropLock
;
68 EXTERN BOOL PhysicsListenerLock
;
70 ///////////////////////////////////////////////////////////////////////////////
72 // Initialization, Update, I/O, and Cleanup
74 ///////////////////////////////////////////////////////////////////////////////
76 EXTERN
void PhysInit();
77 EXTERN
void PhysTerm();
79 EXTERN
void PhysPostLoad();
80 EXTERN
void PhysUpdate(long dt
);
82 EXTERN
void PhysRead(PhysReadWrite func
,eObjPartition part
);
83 EXTERN
void PhysWrite(PhysReadWrite func
, eObjPartition part
);
85 EXTERN
void PhysUpdateProperties();
87 EXTERN
void PhysInitializeContacts();
89 EXTERN
void PhysWakeUpAll();
91 EXTERN BOOL
PhysObjMoveDir(ObjID objID
, Location
*start
, Location
*end
, Location
*hit
);
93 //////////////////////////////////////////////////////////////////////////////
95 // Public Location and Rotation functions
97 //////////////////////////////////////////////////////////////////////////////
99 EXTERN
void PhysGetModLocation(ObjID objID
, mxs_vector
*loc
);
100 EXTERN
void PhysSetModLocation(ObjID objID
, mxs_vector
*loc
);
101 EXTERN
void PhysGetSubModLocation(ObjID objID
, tPhysSubModId subModId
, mxs_vector
*loc
);
102 EXTERN
void PhysSetSubModLocation(ObjID objID
, tPhysSubModId subModId
, mxs_vector
*loc
);
103 EXTERN
void PhysSetSubModRelLocation(ObjID objID
, tPhysSubModId subModId
, mxs_vector
*offset
);
105 EXTERN
void PhysGetModRotation(ObjID objID
, mxs_angvec
*ang
);
106 EXTERN
void PhysSetModRotation(ObjID objID
, mxs_angvec
*ang
);
107 EXTERN
void PhysGetSubModRotation(ObjID objID
, tPhysSubModId subModId
, mxs_angvec
*ang
);
108 EXTERN
void PhysSetSubModRotation(ObjID objID
, tPhysSubModId subModId
, mxs_angvec
*ang
);
111 //////////////////////////////////////////////////////////////////////////////
113 // Public Velocity and Rotational Velocity functions
115 //////////////////////////////////////////////////////////////////////////////
117 EXTERN
void PhysAxisSetVelocity(ObjID objID
, int axis
, mxs_real speed
);
118 EXTERN
void PhysSetVelocity(ObjID objID
, mxs_vector
*velocity
);
119 EXTERN
void PhysGetVelocity(ObjID objID
, mxs_vector
*velocity
);
121 EXTERN
void PhysSetRotationalVelocity(ObjID objID
, mxs_vector
*ang_velocity
);
122 EXTERN
void PhysGetRotationalVelocity(ObjID objID
, mxs_vector
*ang_velocity
);
123 EXTERN
void PhysSetSubModRotationalVelocity(ObjID objID
, tPhysSubModId subModId
, mxs_vector
*ang_velocity
);
124 EXTERN
void PhysGetSubModRotationalVelocity(ObjID objID
, tPhysSubModId subModId
, mxs_vector
*ang_velocity
);
127 //////////////////////////////////////////////////////////////////////////////
129 // Public Control functions
131 //////////////////////////////////////////////////////////////////////////////
133 EXTERN
void PhysAxisControlVelocity(ObjID objID
, int axis
, mxs_real speed
);
134 EXTERN
void PhysControlVelocity(ObjID objID
, mxs_vector
*velocity
);
135 EXTERN
void PhysStopAxisControlVelocity(ObjID objID
, int axis
);
136 EXTERN
void PhysStopControlVelocity(ObjID objID
);
138 EXTERN
void PhysAxisControlRotationalVelocity(ObjID objID
, int axis
, mxs_real speed
);
139 EXTERN
void PhysAxisControlSubModRotationalVelocity(ObjID objID
, tPhysSubModId subModId
, int axis
, mxs_real speed
);
140 EXTERN
void PhysControlRotationalVelocity(ObjID objID
, mxs_vector
*velocity
);
141 EXTERN
void PhysStopControlRotationalVelocity(ObjID objID
);
143 EXTERN
void PhysControlLocation(ObjID objID
, mxs_vector
*location
);
144 EXTERN
void PhysControlSubModLocation(ObjID objID
, tPhysSubModId subModId
, mxs_vector
*location
);
145 EXTERN
void PhysStopControlLocation(ObjID objID
);
147 EXTERN
void PhysControlRotation(ObjID objID
, mxs_angvec
*rotation
);
148 EXTERN
void PhysStopControlRotation(ObjID objID
);
151 //////////////////////////////////////////////////////////////////////////////
153 // Public sphere-specific functions
155 //////////////////////////////////////////////////////////////////////////////
157 EXTERN BOOL
PhysRegisterSphereDefault(ObjID objID
);
158 EXTERN BOOL
PhysRegisterSphere(ObjID objID
, tPhysSubModId numSubModels
, unsigned flags
, mxs_real radius
);
160 EXTERN BOOL
PhysRegisterSphereHatDefault(ObjID objID
);
161 EXTERN BOOL
PhysRegisterSphereHat(ObjID objID
, unsigned flags
, mxs_real radius
);
163 EXTERN
void PhysSetSubModRadius(ObjID objID
, tPhysSubModId subModId
, mxs_real radius
);
166 //////////////////////////////////////////////////////////////////////////////
168 // Public OBB-specific functions
170 //////////////////////////////////////////////////////////////////////////////
172 EXTERN BOOL
PhysRegisterOBBDefault(ObjID objID
);
173 EXTERN BOOL
PhysRegisterOBB(ObjID objID
, unsigned flags
);
176 //////////////////////////////////////////////////////////////////////////////
178 // Public generic functions
180 //////////////////////////////////////////////////////////////////////////////
182 EXTERN BOOL
PhysObjHasPhysics(ObjID objID
);
183 EXTERN BOOL
PhysObjValidPos(ObjID objID
, mxs_vector
*delta
);
184 EXTERN BOOL
PhysSphereIntersectsDoor(ObjID objID
);
185 EXTERN BOOL
PhysObjOnGround(ObjID objID
);
186 EXTERN BOOL
PhysObjOnPlatform(ObjID objID
);
188 EXTERN
void PhysSetFlag(ObjID objID
, int flag
, BOOL state
);
190 EXTERN eMediaState
PhysGetObjMediaState(ObjID objID
);
191 EXTERN BOOL
PhysObjInWater(ObjID objID
);
193 EXTERN
void PhysObjGetFlow(ObjID objID
, mxs_vector
*flow
);
195 EXTERN
void PhysGetAABBox(ObjID objID
, mxs_vector
*minvec
, mxs_vector
*maxvec
);
197 EXTERN
void PhysSetGravity(ObjID objID
, mxs_real gravity
);
198 EXTERN mxs_real
PhysGetGravity(ObjID objID
);
200 EXTERN
void PhysSetMass(ObjID objID
, mxs_real mass
);
201 EXTERN mxs_real
PhysGetMass(ObjID objID
);
203 EXTERN
void PhysSetElasticity(ObjID objID
, mxs_real elasticity
);
204 EXTERN mxs_real
PhysGetElasticity(ObjID objID
);
206 EXTERN
void PhysSetDensity(ObjID objID
, mxs_real density
);
207 EXTERN mxs_real
PhysGetDensity(ObjID objID
);
209 EXTERN
void PhysSetSubModSpringTension(ObjID objID
, tPhysSubModId subModId
, mxs_real tension
);
210 EXTERN mxs_real
PhysGetSubModSpringTension(ObjID objID
, tPhysSubModId subModId
);
212 EXTERN
void PhysSetSubModSpringDamping(ObjID objID
, tPhysSubModId subModId
, mxs_real damping
);
213 EXTERN mxs_real
PhysGetSubModSpringDamping(ObjID objID
, tPhysSubModId subModId
);
215 EXTERN ObjID
PhysGetClimbingObj(ObjID climber
);
217 EXTERN BOOL
PhysObjIsRope(ObjID objID
);
218 EXTERN
void PhysHitRope(ObjID objID
, int magnitude
);
220 EXTERN
void PhysExplode(mxs_vector
*location
, mxs_real magnitude
, mxs_real radius_squared
);
222 EXTERN
void PhysCreateDefaultPlayer(ObjID objID
);
224 EXTERN
void PhysDeregisterModel(ObjID objID
);
225 EXTERN
void PhysDeregisterAllModels(void);
227 EXTERN BOOL
PhysGetFriction(ObjID objID
, mxs_real
*friction
);
228 EXTERN
void PhysGetBaseFriction(ObjID objID
, mxs_real
*base_friction
);
229 EXTERN
void PhysSetBaseFriction(ObjID objID
, mxs_real base_friction
);
231 EXTERN
void PhysPlayerJump(ObjID player
, mxs_real jump_speed
);
233 EXTERN
void PhysWakeUpAll();
234 EXTERN BOOL
PhysIsSleeping(ObjID objID
);
236 EXTERN
void PhysSpewInfo(ObjID objID
);
237 EXTERN
void PhysSpewPlayer();
239 EXTERN
void PhysSetProjectile(ObjID objID
);
240 EXTERN BOOL
PhysIsProjectile(ObjID objID
);
242 EXTERN
void LockAttachmentObj(ObjID objID
);
244 //////////////////////////////////////////////////////////////////////////////
248 //////////////////////////////////////////////////////////////////////////////
250 EXTERN PhysListenerHandle
PhysCreateListener(const char* pName
, PhysListenMsgSet set
, PhysListenFunc func
, PhysListenerData data
);
251 EXTERN
void PhysDestroyListener(PhysListenerHandle handle
);
253 EXTERN
void PhysListen(PhysListenerHandle handle
, ObjID objID
);
254 EXTERN
void PhysUnlisten(PhysListenerHandle handle
, ObjID objID
);
255 EXTERN
void PhysResetListeners(void);
257 ///////////////////////////////////////////////////////////////////////////////
259 #endif /* !__PHYSAPI */