BGE patch: create new BulletSoftBody data block to store bullet soft body specific...
[blender.git] / source / blender / makesdna / DNA_object_force.h
1 /**
2  *
3  * $Id$
4  *
5  * ***** BEGIN GPL LICENSE BLOCK *****
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software Foundation,
19  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20  *
21  * The Original Code is Copyright (C) 2004-2005 by Blender Foundation
22  * All rights reserved.
23  *
24  * The Original Code is: all of this file.
25  *
26  * Contributor(s): none yet.
27  *
28  * ***** END GPL LICENSE BLOCK *****
29  */
30 #ifndef DNA_OBJECT_FORCE_H
31 #define DNA_OBJECT_FORCE_H
32
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36         
37 typedef struct PartDeflect {
38         short deflect;          /* Deflection flag - does mesh deflect particles*/
39         short forcefield;       /* Force field type, do the vertices attract / repel particles ? */
40         short flag;                     /* general settings flag */
41         short falloff;          /* fall-off type*/
42         
43         float pdef_damp;        /* Damping factor for particle deflection       */
44         float pdef_rdamp;       /* Random element of damping for deflection     */
45         float pdef_perm;        /* Chance of particle passing through mesh      */
46         float pdef_frict;       /* Friction factor for particle deflection              */
47         float pdef_rfrict;      /* Random element of friction for deflection    */
48
49         float f_strength;       /* The strength of the force (+ or - )       */
50         float f_power;          /* The power law - real gravitation is 2 (square)  */
51         float f_dist;
52         float f_damp;           /* The dampening factor, currently only for harmonic force      */
53         float maxdist;          /* if indicated, use this maximum */
54         float mindist;          /* if indicated, use this minimum */
55         float maxrad;           /* radial versions of above */
56         float minrad;
57         float f_power_r;        /* radial fall-off power*/
58         
59         float pdef_sbdamp;      /* Damping factor for softbody deflection       */
60         float pdef_sbift;       /* inner face thickness for softbody deflection */
61         float pdef_sboft;       /* outer face thickness for softbody deflection */
62
63         /* variables for guide curve */
64         float clump_fac, clump_pow;
65         float kink_freq, kink_shape, kink_amp, free_end;
66
67         float tex_nabla;
68         short tex_mode, kink, kink_axis, rt2;
69         struct Tex *tex;        /* Texture of the texture effector */
70         struct RNG *rng; /* random noise generator for e.g. wind */
71         float f_noise; /* noise of force (currently used for wind) */
72         int pad;
73 } PartDeflect;
74
75 typedef struct PointCache {
76         int flag;               /* generic flag */
77         int simframe;   /* current frame of simulation (only if SIMULATION_VALID) */
78         int startframe; /* simulation start frame */
79         int endframe;   /* simulation end frame */
80         int editframe;  /* frame being edited (runtime only) */
81 } PointCache;
82
83 typedef struct SBVertex {
84         float vec[4];
85 } SBVertex;
86
87 typedef struct BulletSoftBody {
88         int flag;               /* various boolean options */
89         float linStiff; /* linear stiffness 0..1 */
90         float angStiff; /* angular stiffness 0..1 */
91         float volume;   /* volume preservation 0..1 */
92 } BulletSoftBody;
93
94 /* BulletSoftBody.flag */
95 #define OB_BSB_SHAPE_MATCHING   2
96
97 typedef struct SoftBody {
98         struct ParticleSystem *particles;       /* particlesystem softbody */
99
100         /* dynamic data */
101         int totpoint, totspring;
102         struct BodyPoint *bpoint;               /* not saved in file */
103         struct BodySpring *bspring;             /* not saved in file */
104         float pad;
105         
106         /* part of UI: */
107         
108         /* general options */
109         float nodemass;         /* softbody mass of *vertex* */
110         float grav;                     /* softbody amount of gravitaion to apply */
111         float mediafrict;       /* friction to env */
112         float rklimit;          /* error limit for ODE solver */
113         float physics_speed;/* user control over simulation speed */
114         
115         /* goal */
116         float goalspring;       /* softbody goal springs */
117         float goalfrict;        /* softbody goal springs friction */
118         float mingoal;          /* quick limits for goal */
119         float maxgoal;
120         float defgoal;          /* default goal for vertices without vgroup */
121         short vertgroup;        /* index starting at 1 */
122   
123         short fuzzyness;      /* */
124         
125         /* springs */
126         float inspring;         /* softbody inner springs */
127         float infrict;          /* softbody inner springs friction */
128         
129         /* baking */
130         int sfra, efra;
131         int interval;
132         short local, solverflags;               /* local==1: use local coords for baking */
133         
134         /* -- these must be kept for backwards compatibility -- */
135         SBVertex **keys;                        /* array of size totpointkey */
136         int totpointkey, totkey;        /* if totpointkey != totpoint or totkey!- (efra-sfra)/interval -> free keys */
137         /* ---------------------------------------------------- */
138         float secondspring;
139
140         /* self collision*/
141         float colball;          /* fixed collision ball size if > 0 */
142         float balldamp;         /* cooling down collision response  */
143         float ballstiff;        /* pressure the ball is loaded with  */
144         short sbc_mode;
145     short aeroedge,
146                 minloops,
147                 maxloops,
148                 choke,
149                 solver_ID,
150                 plastic,springpreload
151                 ;   
152
153         struct SBScratch *scratch;      /* scratch pad/cache on live time not saved in file */
154         float shearstiff;
155         float inpush;
156
157         struct PointCache *pointcache;
158
159 } SoftBody;
160
161 /* pd->forcefield:  Effector Fields types */
162 #define PFIELD_FORCE    1
163 #define PFIELD_VORTEX   2
164 #define PFIELD_MAGNET   3
165 #define PFIELD_WIND             4
166 #define PFIELD_GUIDE    5
167 #define PFIELD_TEXTURE  6
168 #define PFIELD_HARMONIC 7
169 #define PFIELD_CHARGE   8
170 #define PFIELD_LENNARDJ 9
171
172
173 /* pd->flag: various settings */
174 #define PFIELD_USEMAX                   1
175 #define PDEFLE_DEFORM                   2
176 #define PFIELD_GUIDE_PATH_ADD   4
177 #define PFIELD_PLANAR                   8
178 #define PDEFLE_KILL_PART                16
179 #define PFIELD_POSZ                             32
180 #define PFIELD_TEX_OBJECT               64
181 #define PFIELD_TEX_2D                   128
182 #define PFIELD_USEMIN                   256
183 #define PFIELD_USEMAXR                  512
184 #define PFIELD_USEMINR                  1024
185 #define PFIELD_TEX_ROOTCO               2048
186
187 /* pd->falloff */
188 #define PFIELD_FALL_SPHERE              0
189 #define PFIELD_FALL_TUBE                1
190 #define PFIELD_FALL_CONE                2
191 //reserved for near future
192 //#define PFIELD_FALL_INSIDE            3
193
194 /* pd->tex_mode */
195 #define PFIELD_TEX_RGB  0
196 #define PFIELD_TEX_GRAD 1
197 #define PFIELD_TEX_CURL 2
198
199 /* pointcache->flag */
200 #define PTCACHE_BAKED                           1
201 #define PTCACHE_OUTDATED                        2
202 #define PTCACHE_SIMULATION_VALID        4
203 #define PTCACHE_BAKING                          8
204 #define PTCACHE_BAKE_EDIT                       16
205 #define PTCACHE_BAKE_EDIT_ACTIVE        32
206
207 /* ob->softflag */
208 #define OB_SB_ENABLE    1
209 #define OB_SB_GOAL              2
210 #define OB_SB_EDGES             4
211 #define OB_SB_QUADS             8
212 #define OB_SB_POSTDEF   16
213 // #define OB_SB_REDO           32
214 // #define OB_SB_BAKESET        64
215 // #define OB_SB_BAKEDO 128
216 // #define OB_SB_RESET          256
217 #define OB_SB_SELF              512
218 #define OB_SB_FACECOLL  1024
219 #define OB_SB_EDGECOLL  2048
220 #define OB_SB_COLLFINAL 4096
221 //#define OB_SB_PROTECT_CACHE   8192
222 #define OB_SB_AERO_ANGLE        16384
223
224 /* sb->solverflags */
225 #define SBSO_MONITOR    1 
226 #define SBSO_OLDERR     2 
227
228 /* sb->sbc_mode */
229 #define SBC_MODE_MANUAL         0
230 #define SBC_MODE_AVG            1
231 #define SBC_MODE_MIN            2
232 #define SBC_MODE_MAX            3
233 #define SBC_MODE_AVGMINMAX      4
234
235 #ifdef __cplusplus
236 }
237 #endif
238
239 #endif
240