convert line ends
[canaan.git] / prj / cam / src / physics / physapi.h
blob476f094ff685fe0fe81819e03cbba6bd70608951
1 /*
2 @Copyright Looking Glass Studios, Inc.
3 1996,1997,1998,1999,2000 Unpublished Work.
4 */
6 ///////////////////////////////////////////////////////////////////////////////
7 // $Header: r:/t2repos/thief2/src/physics/physapi.h,v 1.56 2000/01/31 09:52:12 adurant Exp $
8 //
9 // Physics API
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.
17 #pragma once
19 #ifndef __PHYSAPI_H
20 #define __PHYSAPI_H
22 #include <matrixs.h>
24 #include <phystyp2.h>
25 #include <objtype.h>
26 #include <wrtype.h>
27 #include <phlistyp.h>
29 #ifdef __cplusplus
30 enum eMediaState;
31 #else
32 typedef int eMediaState;
33 #endif
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)
56 #ifdef SHIP
57 #define ResetObjectWarnings()
58 #define SetObjectWarned(x)
59 #define HasObjectWarned(x) FALSE
60 #else
61 void ResetObjectWarnings();
62 void SetObjectWarned(ObjID objID);
63 BOOL HasObjectWarned(ObjID objID);
64 #endif
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 //////////////////////////////////////////////////////////////////////////////
246 // Listeners
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 */