Merge remote-tracking branch 'origin/master' into blender2.8
[blender.git] / source / blender / makesdna / DNA_particle_types.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2007 by Janne Karhu.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27
28 /** \file DNA_particle_types.h
29  *  \ingroup DNA
30  */
31
32 #ifndef __DNA_PARTICLE_TYPES_H__
33 #define __DNA_PARTICLE_TYPES_H__
34
35 #include "DNA_defs.h"
36 #include "DNA_ID.h"
37 #include "DNA_boid_types.h"
38
39 struct AnimData;
40
41 typedef struct HairKey {
42         float co[3];    /* location of hair vertex */
43         float time;             /* time along hair, default 0-100 */
44         float weight;   /* softbody weight */
45         short editflag; /* saved particled edit mode flags */
46         short pad;
47         float world_co[3];
48 } HairKey;
49
50 typedef struct ParticleKey {    /* when changed update size of struct to copy_particleKey()!! */
51         float co[3];    /* location */
52         float vel[3];   /* velocity */
53         float rot[4];   /* rotation quaternion */
54         float ave[3];   /* angular velocity */
55         float time;             /* when this key happens */
56 } ParticleKey;
57
58 typedef struct BoidParticle {
59         struct Object *ground;
60         struct BoidData data;
61         float gravity[3];
62         float wander[3];
63         float rt;
64 } BoidParticle;
65
66 typedef struct ParticleSpring {
67         float rest_length;
68         unsigned int particle_index[2], delete_flag;
69 } ParticleSpring;
70
71 /* Child particles are created around or between parent particles */
72 typedef struct ChildParticle {
73         int num, parent;        /* num is face index on the final derived mesh */
74         int pa[4];                      /* nearest particles to the child, used for the interpolation */
75         float w[4];                     /* interpolation weights for the above particles */
76         float fuv[4], foffset; /* face vertex weights and offset */
77         float rt;
78 } ChildParticle;
79
80 typedef struct ParticleTarget {
81         struct ParticleTarget *next, *prev;
82         struct Object *ob;
83         int psys;
84         short flag, mode;
85         float time, duration;
86 } ParticleTarget;
87
88 typedef struct ParticleDupliWeight {
89         struct ParticleDupliWeight *next, *prev;
90         struct Object *ob;
91         short count;
92         short flag;
93         short index, rt; /* only updated on file save and used on file load */
94 } ParticleDupliWeight;
95
96 typedef struct ParticleData {
97         ParticleKey state;              /* current global coordinates */
98
99         ParticleKey prev_state; /* previous state */
100
101         HairKey *hair;                  /* hair vertices */
102
103         ParticleKey *keys;              /* keyed keys */
104
105         BoidParticle *boid;             /* boids data */
106
107         int totkey;                             /* amount of hair or keyed keys*/
108
109         float time, lifetime;   /* dietime is not necessarily time+lifetime as */
110         float dietime;                  /* particles can die unnaturally (collision). */
111
112         /* WARNING! Those two indices, when not affected to vertices, are for !!! TESSELLATED FACES !!!, not POLYGONS! */
113         int num;                                /* index to vert/edge/face */
114         int num_dmcache;                /* index to derived mesh data (face) to avoid slow lookups */
115
116         float fuv[4], foffset;  /* coordinates on face/edge number "num" and depth along*/
117                                                         /* face normal for volume emission. */
118
119         float size;                             /* size and multiplier so that we can update size when ever */
120
121         float sphdensity;               /* density of sph particle */
122         int pad;
123
124         int hair_index;
125         short flag;
126         short alive;                    /* the life state of a particle */
127 } ParticleData;
128
129 typedef struct SPHFluidSettings {
130         /*Particle Fluid*/
131         float radius, spring_k, rest_length;
132         float plasticity_constant, yield_ratio;
133         float plasticity_balance, yield_balance;
134         float viscosity_omega, viscosity_beta;
135         float stiffness_k, stiffness_knear, rest_density;
136         float buoyancy;
137         int flag, spring_frames;
138         short solver;
139         short pad[3];
140 } SPHFluidSettings;
141
142 /* fluid->flag */
143 #define SPH_VISCOELASTIC_SPRINGS        1
144 #define SPH_CURRENT_REST_LENGTH         2
145 #define SPH_FAC_REPULSION                       4
146 #define SPH_FAC_DENSITY                         8
147 #define SPH_FAC_RADIUS                          16
148 #define SPH_FAC_VISCOSITY                       32
149 #define SPH_FAC_REST_LENGTH                     64
150
151 /* fluid->solver (numerical ID field, not bitfield) */
152 #define SPH_SOLVER_DDR                                  0
153 #define SPH_SOLVER_CLASSICAL                    1
154
155 typedef struct ParticleSettings {
156         ID id;
157         struct AnimData *adt;
158
159         struct BoidSettings *boids;
160         struct SPHFluidSettings *fluid;
161
162         struct EffectorWeights *effector_weights;
163         struct Collection *collision_group;
164
165         int flag, rt;
166         short type, from, distr, texact;
167         /* physics modes */
168         short phystype, rotmode, avemode, reactevent;
169         int draw;
170         float draw_size;
171         short draw_as, pad1, childtype, pad2;
172         short ren_as, subframes, draw_col;
173         /* number of path segments, power of 2 except */
174         short draw_step, ren_step;
175         short hair_step, keys_step;
176
177         /* adaptive path rendering */
178         short adapt_angle, adapt_pix;
179
180         short disp, omat, interpolation, integrator;
181         short rotfrom DNA_DEPRECATED;
182         short kink, kink_axis;
183
184         /* billboards */
185         short bb_align, bb_uv_split, bb_anim, bb_split_offset;
186         float bb_tilt, bb_rand_tilt, bb_offset[2], bb_size[2], bb_vel_head, bb_vel_tail;
187
188         /* draw color */
189         float color_vec_max;
190
191         /* time and emission */
192         float sta, end, lifetime, randlife;
193         float timetweak, courant_target;
194         float jitfac, eff_hair, grid_rand, ps_offset[1];
195         int totpart, userjit, grid_res, effector_amount;
196         short time_flag, time_pad[3];
197
198         /* initial velocity factors */
199         float normfac, obfac, randfac, partfac, tanfac, tanphase, reactfac;
200         float ob_vel[3];
201         float avefac, phasefac, randrotfac, randphasefac;
202         /* physical properties */
203         float mass, size, randsize;
204         /* global physical properties */
205         float acc[3], dragfac, brownfac, dampfac;
206         /* length */
207         float randlength;
208         /* children */
209         int child_flag;
210         int pad3;
211         int child_nbr, ren_child_nbr;
212         float parents, childsize, childrandsize;
213         float childrad, childflat;
214         /* clumping */
215         float clumpfac, clumppow;
216         /* kink */
217         float kink_amp, kink_freq, kink_shape, kink_flat;
218         float kink_amp_clump;
219         int kink_extra_steps, pad4;
220         float kink_axis_random, kink_amp_random;
221         /* rough */
222         float rough1, rough1_size;
223         float rough2, rough2_size, rough2_thres;
224         float rough_end, rough_end_shape;
225         /* length */
226         float clength, clength_thres;
227         /* parting */
228         float parting_fac;
229         float parting_min, parting_max;
230         /* branching */
231         float branch_thres;
232         /* drawing stuff */
233         float draw_line[2];
234         float path_start, path_end;
235         int trail_count;
236         /* keyed particles */
237         int keyed_loops;
238         struct CurveMapping *clumpcurve;
239         struct CurveMapping *roughcurve;
240         float clump_noise_size;
241
242         /* hair dynamics */
243         float bending_random;
244
245         struct MTex *mtex[18];          /* MAX_MTEX */
246
247         struct Collection *dup_group;
248         struct ListBase dupliweights;
249         struct Collection *eff_group  DNA_DEPRECATED;           // deprecated
250         struct Object *dup_ob;
251         struct Object *bb_ob;
252         struct Ipo *ipo  DNA_DEPRECATED;  /* old animation system, deprecated for 2.5 */
253         struct PartDeflect *pd;
254         struct PartDeflect *pd2;
255
256         /* modified dm support */
257         short use_modifier_stack;
258         short pad5;
259
260         /* hair shape */
261         short shape_flag;
262         short pad6;
263
264         float twist, pad8;
265
266         /* hair thickness shape */
267         float shape;
268         float rad_root, rad_tip, rad_scale;
269
270         struct CurveMapping *twistcurve;
271         void *pad7;
272 } ParticleSettings;
273
274 typedef struct ParticleSystem {
275         /* note1: make sure all (runtime) are NULL's in 'copy_particlesystem' XXX, this function is no more! - need to invstigate */
276         /* note2: make sure any uses of this struct in DNA are accounted for in 'BKE_object_copy_particlesystems' */
277
278         struct ParticleSystem *next, *prev;
279
280         ParticleSettings *part;                                 /* particle settings */
281
282         ParticleData *particles;                                /* (parent) particles */
283         ChildParticle *child;                                   /* child particles */
284
285         struct PTCacheEdit *edit;                                               /* particle editmode (runtime) */
286         void (*free_edit)(struct PTCacheEdit *edit);    /* free callback */
287
288         struct ParticleCacheKey **pathcache;    /* path cache (runtime) */
289         struct ParticleCacheKey **childcache;   /* child cache (runtime) */
290         ListBase pathcachebufs, childcachebufs; /* buffers for the above */
291
292         struct ClothModifierData *clmd;                                 /* cloth simulation for hair */
293         struct Mesh *hair_in_mesh, *hair_out_mesh;      /* input/output for cloth simulation */
294
295         struct Object *target_ob;
296
297         struct LatticeDeformData *lattice_deform_data;          /* run-time only lattice deformation data */
298
299         struct Object *parent;                                  /* particles from global space -> parent space */
300
301         struct ListBase targets;                                /* used for keyed and boid physics */
302
303         char name[64];                                                  /* particle system name, MAX_NAME */
304
305         float imat[4][4];       /* used for duplicators */
306         float cfra, tree_frame, bvhtree_frame;
307         int seed, child_seed;
308         int flag, totpart, totunexist, totchild, totcached, totchildcache;
309         short recalc, target_psys, totkeyed, bakespace;
310
311         char bb_uvname[3][64];                                  /* billboard uv name, MAX_CUSTOMDATA_LAYER_NAME */
312
313         /* if you change these remember to update array lengths to PSYS_TOT_VG! */
314         short vgroup[13], vg_neg, rt3;                  /* vertex groups, 0==disable, 1==starting index */
315         char pad[6];
316
317         /* point cache */
318         struct PointCache *pointcache;
319         struct ListBase ptcaches;
320
321         struct ListBase *effectors;
322
323         ParticleSpring *fluid_springs;
324         int tot_fluidsprings, alloc_fluidsprings;
325
326         struct KDTree *tree;                                    /* used for interactions with self and other systems */
327         struct BVHTree *bvhtree;                                /* used for interactions with self and other systems */
328
329         struct ParticleDrawData *pdd;
330
331         float dt_frac;                                                  /* current time step, as a fraction of a frame */
332         float lattice_strength;                                 /* influence of the lattice modifier */
333
334         void *batch_cache;
335
336         /* Set by dependency graph's copy-on-write, allows to quickly go
337          * from evaluated particle system to original one.
338          *
339          * Original system will have this set to NULL.
340          *
341          * Use psys_orig_get() function to access,
342          */
343         struct ParticleSystem *orig_psys;
344 } ParticleSystem;
345
346 typedef enum eParticleDrawFlag {
347         PART_DRAW_VEL           = (1 << 0),
348         PART_DRAW_GLOBAL_OB         = (1 << 1),
349         PART_DRAW_SIZE          = (1 << 2),
350 #ifdef DNA_DEPRECATED
351         PART_DRAW_EMITTER       = (1 << 3),  /* render emitter also */ /* DEPRECATED */
352 #endif
353         PART_DRAW_HEALTH        = (1 << 4),
354         PART_ABS_PATH_TIME      = (1 << 5),
355         PART_DRAW_COUNT_GR      = (1 << 6),
356         PART_DRAW_BB_LOCK       = (1 << 7), /* used with billboards */
357         PART_DRAW_ROTATE_OB     = (1 << 7), /* used with dupliobjects/groups */
358         PART_DRAW_PARENT        = (1 << 8),
359         PART_DRAW_NUM           = (1 << 9),
360         PART_DRAW_RAND_GR       = (1 << 10),
361         PART_DRAW_REN_ADAPT     = (1 << 11),
362         PART_DRAW_VEL_LENGTH    = (1 << 12),
363         PART_DRAW_MAT_COL       = (1 << 13), /* deprecated, but used in do_versions */
364         PART_DRAW_WHOLE_GR      = (1 << 14),
365         PART_DRAW_REN_STRAND    = (1 << 15),
366         PART_DRAW_NO_SCALE_OB   = (1 << 16), /* used with dupliobjects/groups */
367         PART_DRAW_GUIDE_HAIRS   = (1 << 17),
368         PART_DRAW_HAIR_GRID     = (1 << 18),
369 } eParticleDrawFlag;
370
371 /* part->type */
372 /* hair is always baked static in object/geometry space */
373 /* other types (normal particles) are in global space and not static baked */
374 #define PART_EMITTER            0
375 //#define PART_REACTOR          1
376 #define PART_HAIR                       2
377 #define PART_FLUID                      3
378
379 /* part->flag */
380 #define PART_REACT_STA_END      1
381 #define PART_REACT_MULTIPLE     2
382
383 //#define PART_LOOP                     4       /* not used anymore */
384                 /* for dopesheet */
385 #define PART_DS_EXPAND          8
386
387 #define PART_HAIR_REGROW        16      /* regrow hair for each frame */
388
389 #define PART_UNBORN                     32      /*show unborn particles*/
390 #define PART_DIED                       64      /*show died particles*/
391
392 #define PART_TRAND                      128
393 #define PART_EDISTR                     256     /* particle/face from face areas */
394
395 #define PART_ROTATIONS          512     /* calculate particle rotations (and store them in pointcache) */
396 #define PART_DIE_ON_COL         (1<<12)
397 #define PART_SIZE_DEFL          (1<<13) /* swept sphere deflections */
398 #define PART_ROT_DYN            (1<<14) /* dynamic rotation */
399 #define PART_SIZEMASS           (1<<16)
400
401 #define PART_HIDE_ADVANCED_HAIR (1<<15)
402
403 //#define PART_ABS_TIME         (1<<17)
404 //#define PART_GLOB_TIME                (1<<18)
405
406 #define PART_BOIDS_2D           (1<<19)
407
408 //#define PART_BRANCHING                (1<<20)
409 //#define PART_ANIM_BRANCHING   (1<<21)
410
411 #define PART_HAIR_BSPLINE       1024
412
413 #define PART_GRID_HEXAGONAL     (1<<24)
414 #define PART_GRID_INVERT        (1<<26)
415
416 #define PART_CHILD_EFFECT               (1<<27)
417 #define PART_CHILD_LONG_HAIR    (1<<28)
418 /* #define PART_CHILD_RENDER            (1<<29) */ /*UNUSED*/
419 #define PART_CHILD_GUIDE                (1<<30)
420
421 #define PART_SELF_EFFECT        (1<<22)
422
423 /* part->from */
424 #define PART_FROM_VERT          0
425 #define PART_FROM_FACE          1
426 #define PART_FROM_VOLUME        2
427 /* #define PART_FROM_PARTICLE   3  deprecated! */
428 #define PART_FROM_CHILD         4
429
430 /* part->distr */
431 #define PART_DISTR_JIT          0
432 #define PART_DISTR_RAND         1
433 #define PART_DISTR_GRID         2
434
435 /* part->phystype */
436 #define PART_PHYS_NO            0
437 #define PART_PHYS_NEWTON        1
438 #define PART_PHYS_KEYED         2
439 #define PART_PHYS_BOIDS         3
440 #define PART_PHYS_FLUID         4
441
442 /* part->kink */
443 typedef enum eParticleKink {
444         PART_KINK_NO            = 0,
445         PART_KINK_CURL          = 1,
446         PART_KINK_RADIAL        = 2,
447         PART_KINK_WAVE          = 3,
448         PART_KINK_BRAID         = 4,
449         PART_KINK_SPIRAL        = 5,
450 } eParticleKink;
451
452 /* part->child_flag */
453 typedef enum eParticleChildFlag {
454         PART_CHILD_USE_CLUMP_NOISE  = (1<<0),
455         PART_CHILD_USE_CLUMP_CURVE  = (1<<1),
456         PART_CHILD_USE_ROUGH_CURVE  = (1<<2),
457         PART_CHILD_USE_TWIST_CURVE  = (1<<3),
458 } eParticleChildFlag;
459
460 /* part->shape_flag */
461 typedef enum eParticleShapeFlag {
462         PART_SHAPE_CLOSE_TIP     = (1<<0),
463 } eParticleShapeFlag;
464
465 /* part->draw_col */
466 #define PART_DRAW_COL_NONE              0
467 #define PART_DRAW_COL_MAT               1
468 #define PART_DRAW_COL_VEL               2
469 #define PART_DRAW_COL_ACC               3
470
471
472 /* part->simplify_flag */
473 #define PART_SIMPLIFY_ENABLE    1
474 #define PART_SIMPLIFY_VIEWPORT  2
475
476 /* part->time_flag */
477 #define PART_TIME_AUTOSF        1 /* Automatic subframes */
478
479 /* part->bb_align */
480 #define PART_BB_X               0
481 #define PART_BB_Y               1
482 #define PART_BB_Z               2
483 #define PART_BB_VIEW    3
484 #define PART_BB_VEL             4
485
486 /* part->bb_anim */
487 #define PART_BB_ANIM_NONE       0
488 #define PART_BB_ANIM_AGE        1
489 #define PART_BB_ANIM_ANGLE      2
490 #define PART_BB_ANIM_FRAME      3
491
492 /* part->bb_split_offset */
493 #define PART_BB_OFF_NONE        0
494 #define PART_BB_OFF_LINEAR      1
495 #define PART_BB_OFF_RANDOM      2
496
497 /* part->draw_as */
498 /* part->ren_as*/
499 #define PART_DRAW_NOT           0
500 #define PART_DRAW_DOT           1
501 #define PART_DRAW_HALO          1
502 #define PART_DRAW_CIRC          2
503 #define PART_DRAW_CROSS         3
504 #define PART_DRAW_AXIS          4
505 #define PART_DRAW_LINE          5
506 #define PART_DRAW_PATH          6
507 #define PART_DRAW_OB            7
508 #define PART_DRAW_GR            8
509 #define PART_DRAW_BB            9
510 #define PART_DRAW_REND          10
511
512 /* part->integrator */
513 #define PART_INT_EULER          0
514 #define PART_INT_MIDPOINT       1
515 #define PART_INT_RK4            2
516 #define PART_INT_VERLET         3
517
518 /* part->rotmode */
519 #define PART_ROT_NOR            1
520 #define PART_ROT_VEL            2
521 #define PART_ROT_GLOB_X         3
522 #define PART_ROT_GLOB_Y         4
523 #define PART_ROT_GLOB_Z         5
524 #define PART_ROT_OB_X           6
525 #define PART_ROT_OB_Y           7
526 #define PART_ROT_OB_Z           8
527 #define PART_ROT_NOR_TAN        9
528
529 /* part->avemode */
530 #define PART_AVE_VELOCITY       1
531 #define PART_AVE_RAND           2
532 #define PART_AVE_HORIZONTAL     3
533 #define PART_AVE_VERTICAL       4
534 #define PART_AVE_GLOBAL_X       5
535 #define PART_AVE_GLOBAL_Y       6
536 #define PART_AVE_GLOBAL_Z       7
537
538 /* part->reactevent */
539 #define PART_EVENT_DEATH        0
540 #define PART_EVENT_COLLIDE      1
541 #define PART_EVENT_NEAR         2
542
543 /* part->childtype */
544 #define PART_CHILD_PARTICLES    1
545 #define PART_CHILD_FACES                2
546
547 /* psys->recalc */
548 /* starts from (1 << 3) so that the first bits can be ob->recalc */
549 #define PSYS_RECALC_REDO   (1 << 3) /* only do pathcache etc */
550 #define PSYS_RECALC_RESET  (1 << 4) /* reset everything including pointcache */
551 #define PSYS_RECALC_TYPE   (1 << 5) /* handle system type change */
552 #define PSYS_RECALC_CHILD  (1 << 6) /* only child settings changed */
553 #define PSYS_RECALC_PHYS   (1 << 7) /* physics type changed */
554 #define PSYS_RECALC        (PSYS_RECALC_REDO | PSYS_RECALC_RESET | PSYS_RECALC_TYPE | PSYS_RECALC_CHILD | PSYS_RECALC_PHYS)
555
556 /* psys->flag */
557 #define PSYS_CURRENT            1
558 #define PSYS_GLOBAL_HAIR        2
559 #define PSYS_HAIR_DYNAMICS      4
560 #define PSYS_KEYED_TIMING       8
561 //#define PSYS_ENABLED          16      /* deprecated */
562 #define PSYS_HAIR_UPDATED       32  /* signal for updating hair particle mode */
563 #define PSYS_DRAWING            64
564 #define PSYS_USE_IMAT           128
565 #define PSYS_DELETE                     256     /* remove particlesystem as soon as possible */
566 #define PSYS_HAIR_DONE          512
567 #define PSYS_KEYED                      1024
568 #define PSYS_EDITED                     2048
569 //#define PSYS_PROTECT_CACHE    4096 /* deprecated */
570 #define PSYS_DISABLED                   8192
571 #define PSYS_OB_ANIM_RESTORE    16384 /* runtime flag */
572 #define PSYS_SHARED_CACHES              32768
573
574 /* pars->flag */
575 #define PARS_UNEXIST            1
576 #define PARS_NO_DISP            2
577 //#define PARS_STICKY                   4 /* deprecated */
578 #define PARS_REKEY                      8
579
580 /* pars->alive */
581 //#define PARS_KILLED                   0 /* deprecated */
582 #define PARS_DEAD                       1
583 #define PARS_UNBORN                     2
584 #define PARS_ALIVE                      3
585 #define PARS_DYING                      4
586
587 /* ParticleDupliWeight->flag */
588 #define PART_DUPLIW_CURRENT     1
589
590 /* psys->vg */
591 #define PSYS_TOT_VG                     13
592
593 #define PSYS_VG_DENSITY         0
594 #define PSYS_VG_VEL                     1
595 #define PSYS_VG_LENGTH          2
596 #define PSYS_VG_CLUMP           3
597 #define PSYS_VG_KINK            4
598 #define PSYS_VG_ROUGH1          5
599 #define PSYS_VG_ROUGH2          6
600 #define PSYS_VG_ROUGHE          7
601 #define PSYS_VG_SIZE            8
602 #define PSYS_VG_TAN                     9
603 #define PSYS_VG_ROT                     10
604 #define PSYS_VG_EFFECTOR        11
605 #define PSYS_VG_TWIST   12
606
607 /* ParticleTarget->flag */
608 #define PTARGET_CURRENT         1
609 #define PTARGET_VALID           2
610
611 /* ParticleTarget->mode */
612 #define PTARGET_MODE_NEUTRAL    0
613 #define PTARGET_MODE_FRIEND             1
614 #define PTARGET_MODE_ENEMY              2
615
616 /* mapto */
617 typedef enum eParticleTextureInfluence {
618         /* init */
619         PAMAP_TIME              = (1<<0),       /* emission time */
620         PAMAP_LIFE              = (1<<1),       /* life time */
621         PAMAP_DENS              = (1<<2),       /* density */
622         PAMAP_SIZE              = (1<<3),       /* physical size */
623         PAMAP_INIT              = (PAMAP_TIME | PAMAP_LIFE | PAMAP_DENS | PAMAP_SIZE),
624         /* reset */
625         PAMAP_IVEL              = (1<<5),       /* initial velocity */
626         /* physics */
627         PAMAP_FIELD             = (1<<6),       /* force fields */
628         PAMAP_GRAVITY   = (1<<10),
629         PAMAP_DAMP              = (1<<11),
630         PAMAP_PHYSICS   = (PAMAP_FIELD | PAMAP_GRAVITY | PAMAP_DAMP),
631         /* children */
632         PAMAP_CLUMP             = (1<<7),
633         PAMAP_KINK_FREQ = (1<<8),
634         PAMAP_KINK_AMP  = (1<<12),
635         PAMAP_ROUGH             = (1<<9),
636         PAMAP_LENGTH    = (1<<4),
637         PAMAP_TWIST     = (1<<13),
638         PAMAP_CHILD             = (PAMAP_CLUMP | PAMAP_KINK_FREQ | PAMAP_KINK_AMP | PAMAP_ROUGH | PAMAP_LENGTH | PAMAP_TWIST),
639 } eParticleTextureInfluence;
640
641 #endif