fixed spacing in the headers to get rid of some warnings and some other
[blender.git] / source / gameengine / GameLogic / SCA_RandomActuator.h
1 /**
2  * Draw a random number, and put it in a property
3  *
4  *
5  * $Id$
6  *
7  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
8  *
9  * This program is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License
11  * as published by the Free Software Foundation; either version 2
12  * of the License, or (at your option) any later version. The Blender
13  * Foundation also sells licenses for use in proprietary software under
14  * the Blender License.  See http://www.blender.org/BL/ for information
15  * about this.
16  *
17  * This program is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20  * GNU General Public License for more details.
21  *
22  * You should have received a copy of the GNU General Public License
23  * along with this program; if not, write to the Free Software Foundation,
24  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
25  *
26  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
27  * All rights reserved.
28  *
29  * The Original Code is: all of this file.
30  *
31  * Contributor(s): none yet.
32  *
33  * ***** END GPL/BL DUAL LICENSE BLOCK *****
34  */
35
36 #ifndef __KX_RANDOMACTUATOR
37 #define __KX_RANDOMACTUATOR
38
39 #include "SCA_IActuator.h"
40 #include "SCA_RandomNumberGenerator.h"
41
42 class SCA_RandomActuator : public SCA_IActuator
43 {
44         Py_Header;
45         /** Property to assign to */
46         STR_String m_propname;
47         
48         /** First parameter. The meaning of the parameters depends on the        
49          *  distribution */
50         float m_parameter1;
51         /** Second parameter. The meaning of the parameters depends on the        
52          *  distribution */
53         float m_parameter2;
54
55         /** The base generator */
56         SCA_RandomNumberGenerator *m_base;
57
58         /** just a generic, persistent counter */
59         int m_counter;
60
61         /** cache for the previous draw */
62         long m_previous;
63
64         /** apply constraints for the chosen distribution to the parameters */
65         void enforceConstraints(void);
66         
67  public:
68
69         enum KX_RANDOMACT_MODE {
70                 KX_RANDOMACT_NODEF,
71                 KX_RANDOMACT_BOOL_CONST,
72                 KX_RANDOMACT_BOOL_UNIFORM,
73                 KX_RANDOMACT_BOOL_BERNOUILLI,           
74                 KX_RANDOMACT_INT_CONST,
75                 KX_RANDOMACT_INT_UNIFORM,
76                 KX_RANDOMACT_INT_POISSON,               
77                 KX_RANDOMACT_FLOAT_CONST,
78                 KX_RANDOMACT_FLOAT_UNIFORM,
79                 KX_RANDOMACT_FLOAT_NORMAL,
80                 KX_RANDOMACT_FLOAT_NEGATIVE_EXPONENTIAL,
81                 KX_RANDOMACT_MAX
82         };
83         /** distribution type */
84         KX_RANDOMACT_MODE m_distribution;
85         
86         SCA_RandomActuator(class SCA_IObject* gameobj,
87                                           long seed,
88                                           KX_RANDOMACT_MODE mode,
89                                           float para1,
90                                           float para2,
91                                           const STR_String &propName,
92                                           PyTypeObject* T=&Type);
93         virtual ~SCA_RandomActuator();
94         virtual bool Update(double curtime,double deltatime);
95         
96         virtual CValue* GetReplica();
97         
98         /* --------------------------------------------------------------------- */
99         /* Python interface ---------------------------------------------------- */
100         /* --------------------------------------------------------------------- */
101
102         virtual PyObject*  _getattr(char *attr);
103
104         /* 1. setSeed                                                            */
105         KX_PYMETHOD_DOC(SCA_RandomActuator,SetSeed);
106         /* 2. getSeed                                                            */
107         KX_PYMETHOD_DOC(SCA_RandomActuator,GetSeed);
108         /* 3. setPara1 -removed-                                                 */
109         /* 4. getPara1                                                           */
110         KX_PYMETHOD_DOC(SCA_RandomActuator,GetPara1);
111         /* 5. setPara2 -removed-                                                 */
112         /* 6. getPara2                                                           */
113         KX_PYMETHOD_DOC(SCA_RandomActuator,GetPara2);
114         /* 7. setDistribution -removed-                                          */
115         /* 8. getDistribution                                                    */
116         KX_PYMETHOD_DOC(SCA_RandomActuator,GetDistribution);
117         /* 9. setProperty                                                        */
118         KX_PYMETHOD_DOC(SCA_RandomActuator,SetProperty);
119         /* 10. getProperty                                                       */
120         KX_PYMETHOD_DOC(SCA_RandomActuator,GetProperty);
121         /* 11. setBoolConst                                                      */
122         KX_PYMETHOD_DOC(SCA_RandomActuator,SetBoolConst);
123         /* 12. setBoolUniform, */
124         KX_PYMETHOD_DOC(SCA_RandomActuator,SetBoolUniform);
125         /* 13. setBoolBernouilli,  */
126         KX_PYMETHOD_DOC(SCA_RandomActuator,SetBoolBernouilli);
127         /* 14. setIntConst,*/
128         KX_PYMETHOD_DOC(SCA_RandomActuator,SetIntConst);
129         /* 15. setIntUniform,*/
130         KX_PYMETHOD_DOC(SCA_RandomActuator,SetIntUniform);
131         /* 16. setIntPoisson,           */
132         KX_PYMETHOD_DOC(SCA_RandomActuator,SetIntPoisson);
133         /* 17. setFloatConst,*/
134         KX_PYMETHOD_DOC(SCA_RandomActuator,SetFloatConst);
135         /* 18. setFloatUniform, */
136         KX_PYMETHOD_DOC(SCA_RandomActuator,SetFloatUniform);
137         /* 19. setFloatNormal, */
138         KX_PYMETHOD_DOC(SCA_RandomActuator,SetFloatNormal);
139         /* 20. setFloatNegativeExponential, */
140         KX_PYMETHOD_DOC(SCA_RandomActuator,SetFloatNegativeExponential);
141         
142 }; /* end of class KX_EditObjectActuator : public SCA_PropertyActuator */
143
144 #endif
145