Code comments add to collision interface
[blender.git] / source / blender / makesdna / DNA_object_force.h
1 /**
2  *
3  * $Id$
4  *
5  * ***** BEGIN GPL/BL DUAL 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. The Blender
11  * Foundation also sells licenses for use in proprietary software under
12  * the Blender License.  See http://www.blender.org/BL/ for information
13  * about this.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software Foundation,
22  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
23  *
24  * The Original Code is Copyright (C) 2004-2005 by Blender Foundation
25  * All rights reserved.
26  *
27  * The Original Code is: all of this file.
28  *
29  * Contributor(s): none yet.
30  *
31  * ***** END GPL/BL DUAL LICENSE BLOCK *****
32  */
33 #ifndef DNA_OBJECT_FORCE_H
34 #define DNA_OBJECT_FORCE_H
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39         
40 typedef struct PartDeflect {
41         short deflect;          /* Deflection flag - does mesh deflect particles*/
42         short forcefield;       /* Force field type, do the vertices attract / repel particles ? */
43         short flag;                     /* general settings flag */
44         short pad;
45         
46         float pdef_damp;        /* Damping factor for particle deflection       */
47         float pdef_rdamp;       /* Random element of damping for deflection     */
48         float pdef_perm;        /* Chance of particle passing through mesh      */
49
50         float f_strength;       /* The strength of the force (+ or - )       */
51         float f_power;          /* The power law - real gravitation is 2 (square)  */
52         float maxdist;          /* if indicated, use this maximum */
53         
54         float pdef_sbdamp;      /* Damping factor for softbody deflection       */
55         float pdef_sbift;       /* inner face thickness for softbody deflection */
56         float pdef_sboft;       /* outer face thickness for softbody deflection */
57 } PartDeflect;
58
59
60 typedef struct SBVertex {
61         float vec[4];
62 } SBVertex;
63
64 typedef struct SoftBody {
65         /* dynamic data */
66         int totpoint, totspring;
67         struct BodyPoint *bpoint;               /* not saved in file */
68         struct BodySpring *bspring;             /* not saved in file */
69         float ctime;                                    /* last time calculated */
70         
71         /* part of UI: */
72         
73         /* general options */
74         float nodemass;         /* softbody mass of *vertex* */
75         float grav;                     /* softbody amount of gravitaion to apply */
76         float mediafrict;       /* friction to env */
77         float rklimit;          /* error limit for ODE solver */
78         float physics_speed;/* user control over simulation speed */
79         
80         /* goal */
81         float goalspring;       /* softbody goal springs */
82         float goalfrict;        /* softbody goal springs friction */
83         float mingoal;          /* quick limits for goal */
84         float maxgoal;
85         float defgoal;          /* default goal for vertices without vgroup */
86         short vertgroup;        /* index starting at 1 */
87   
88         short fuzzyness;      /* */
89         
90         /* springs */
91         float inspring;         /* softbody inner springs */
92         float infrict;          /* softbody inner springs friction */
93         
94         /* baking */
95         int sfra, efra;
96         int interval;
97         short local, solverflags;               /* local==1: use local coords for baking */
98         
99         SBVertex **keys;                        /* array of size totpointkey */
100         int totpointkey, totkey;        /* if totpointkey != totpoint or totkey!- (efra-sfra)/interval -> free keys */
101         float secondspring;
102
103         /* self collision*/
104         float colball;          /* fixed collision ball size if > 0 */
105         float balldamp;         /* cooling down collision response  */
106         float ballstiff;        /* pressure the ball is loaded with  */
107         short sbc_mode;
108     short aeroedge,
109                 minloops,
110                 maxloops,
111                 choke,
112                 pad3,pad4,pad5
113                 ;   
114
115         struct SBScratch *scratch;      /* scratch pad/cache on live time not saved in file */
116
117 } SoftBody;
118
119 /* pd->forcefield:  Effector Fields types */
120 #define PFIELD_FORCE    1
121 #define PFIELD_VORTEX   2
122 #define PFIELD_MAGNET   3
123 #define PFIELD_WIND             4
124 #define PFIELD_GUIDE    5
125
126 /* pd->flag: various settings */
127 #define PFIELD_USEMAX                   1
128 #define PDEFLE_DEFORM                   2
129 #define PFIELD_GUIDE_PATH_ADD   4
130
131 /* ob->softflag */
132 #define OB_SB_ENABLE    1
133 #define OB_SB_GOAL              2
134 #define OB_SB_EDGES             4
135 #define OB_SB_QUADS             8
136 #define OB_SB_POSTDEF   16
137 #define OB_SB_REDO              32
138 #define OB_SB_BAKESET   64
139 #define OB_SB_BAKEDO    128
140 #define OB_SB_RESET             256
141 #define OB_SB_SELF              512
142 #define OB_SB_FACECOLL  1024
143 #define OB_SB_EDGECOLL  2048
144 #define OB_SB_COLLFINAL 4096
145
146 #define SBSO_MONITOR    1 
147 #define SBSO_OLDERR     2 
148
149 #ifdef __cplusplus
150 }
151 #endif
152
153 #endif
154