]> git.xonotic.org Git - xonotic/xonotic.git/blob - misc/builddeps/dp.linux32/include/ode/contact.h
Handle errors right.
[xonotic/xonotic.git] / misc / builddeps / dp.linux32 / include / ode / contact.h
1 /*************************************************************************
2  *                                                                       *
3  * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.       *
4  * All rights reserved.  Email: russ@q12.org   Web: www.q12.org          *
5  *                                                                       *
6  * This library is free software; you can redistribute it and/or         *
7  * modify it under the terms of EITHER:                                  *
8  *   (1) The GNU Lesser General Public License as published by the Free  *
9  *       Software Foundation; either version 2.1 of the License, or (at  *
10  *       your option) any later version. The text of the GNU Lesser      *
11  *       General Public License is included with this library in the     *
12  *       file LICENSE.TXT.                                               *
13  *   (2) The BSD-style license that is included with this library in     *
14  *       the file LICENSE-BSD.TXT.                                       *
15  *                                                                       *
16  * This library is distributed in the hope that it will be useful,       *
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files    *
19  * LICENSE.TXT and LICENSE-BSD.TXT for more details.                     *
20  *                                                                       *
21  *************************************************************************/
22
23 #ifndef _ODE_CONTACT_H_
24 #define _ODE_CONTACT_H_
25
26 #include <ode/common.h>
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32
33 enum {
34   dContactMu2           = 0x001,
35   dContactFDir1         = 0x002,
36   dContactBounce        = 0x004,
37   dContactSoftERP       = 0x008,
38   dContactSoftCFM       = 0x010,
39   dContactMotion1       = 0x020,
40   dContactMotion2       = 0x040,
41   dContactMotionN       = 0x080,
42   dContactSlip1         = 0x100,
43   dContactSlip2         = 0x200,
44
45   dContactApprox0       = 0x0000,
46   dContactApprox1_1     = 0x1000,
47   dContactApprox1_2     = 0x2000,
48   dContactApprox1       = 0x3000
49 };
50
51
52 typedef struct dSurfaceParameters {
53   /* must always be defined */
54   int mode;
55   dReal mu;
56
57   /* only defined if the corresponding flag is set in mode */
58   dReal mu2;
59   dReal bounce;
60   dReal bounce_vel;
61   dReal soft_erp;
62   dReal soft_cfm;
63   dReal motion1,motion2,motionN;
64   dReal slip1,slip2;
65 } dSurfaceParameters;
66
67
68 /**
69  * @brief Describe the contact point between two geoms.
70  *
71  * If two bodies touch, or if a body touches a static feature in its 
72  * environment, the contact is represented by one or more "contact 
73  * points", described by dContactGeom.
74  *
75  * The convention is that if body 1 is moved along the normal vector by 
76  * a distance depth (or equivalently if body 2 is moved the same distance 
77  * in the opposite direction) then the contact depth will be reduced to 
78  * zero. This means that the normal vector points "in" to body 1.
79  *
80  * @ingroup collide
81  */
82 typedef struct dContactGeom {
83   dVector3 pos;          ///< contact position
84   dVector3 normal;       ///< normal vector
85   dReal depth;           ///< penetration depth
86   dGeomID g1,g2;         ///< the colliding geoms
87   int side1,side2;       ///< (to be documented)
88 } dContactGeom;
89
90
91 /* contact info used by contact joint */
92
93 typedef struct dContact {
94   dSurfaceParameters surface;
95   dContactGeom geom;
96   dVector3 fdir1;
97 } dContact;
98
99
100 #ifdef __cplusplus
101 }
102 #endif
103
104 #endif