Name attributes added since 2.48a more consistently.
[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 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.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22  *
23  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24  * All rights reserved.
25  *
26  * The Original Code is: all of this file.
27  *
28  * Contributor(s): none yet.
29  *
30  * ***** END GPL LICENSE BLOCK *****
31  */
32
33 #ifndef __KX_RANDOMACTUATOR
34 #define __KX_RANDOMACTUATOR
35
36 #include "SCA_IActuator.h"
37 #include "SCA_RandomNumberGenerator.h"
38
39 class SCA_RandomActuator : public SCA_IActuator
40 {
41         Py_Header;
42         /** Property to assign to */
43         STR_String m_propname;
44         
45         /** First parameter. The meaning of the parameters depends on the        
46          *  distribution */
47         float m_parameter1;
48         /** Second parameter. The meaning of the parameters depends on the        
49          *  distribution */
50         float m_parameter2;
51
52         /** The base generator */
53         SCA_RandomNumberGenerator *m_base;
54
55         /** just a generic, persistent counter */
56         int m_counter;
57
58         /** cache for the previous draw */
59         long m_previous;
60
61         /** apply constraints for the chosen distribution to the parameters */
62         void enforceConstraints(void);
63         
64  public:
65
66         enum KX_RANDOMACT_MODE {
67                 KX_RANDOMACT_NODEF,
68                 KX_RANDOMACT_BOOL_CONST,
69                 KX_RANDOMACT_BOOL_UNIFORM,
70                 KX_RANDOMACT_BOOL_BERNOUILLI,           
71                 KX_RANDOMACT_INT_CONST,
72                 KX_RANDOMACT_INT_UNIFORM,
73                 KX_RANDOMACT_INT_POISSON,               
74                 KX_RANDOMACT_FLOAT_CONST,
75                 KX_RANDOMACT_FLOAT_UNIFORM,
76                 KX_RANDOMACT_FLOAT_NORMAL,
77                 KX_RANDOMACT_FLOAT_NEGATIVE_EXPONENTIAL,
78                 KX_RANDOMACT_MAX
79         };
80         /** distribution type */
81         KX_RANDOMACT_MODE m_distribution;
82         
83         SCA_RandomActuator(class SCA_IObject* gameobj,
84                                           long seed,
85                                           KX_RANDOMACT_MODE mode,
86                                           float para1,
87                                           float para2,
88                                           const STR_String &propName,
89                                           PyTypeObject* T=&Type);
90         virtual ~SCA_RandomActuator();
91         virtual bool Update();
92         
93         virtual CValue* GetReplica();
94         
95         /* --------------------------------------------------------------------- */
96         /* Python interface ---------------------------------------------------- */
97         /* --------------------------------------------------------------------- */
98
99         virtual PyObject* py_getattro(PyObject *attr);
100         virtual PyObject* py_getattro_dict();
101         virtual int py_setattro(PyObject *attr, PyObject *value);
102
103         static PyObject* pyattr_get_seed(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
104         static int pyattr_set_seed(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
105
106         // Deprecated methods ----->
107         KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator,SetSeed);
108         KX_PYMETHOD_DOC_NOARGS(SCA_RandomActuator,GetSeed);
109         KX_PYMETHOD_DOC_NOARGS(SCA_RandomActuator,GetPara1);
110         KX_PYMETHOD_DOC_NOARGS(SCA_RandomActuator,GetPara2);
111         KX_PYMETHOD_DOC_NOARGS(SCA_RandomActuator,GetDistribution);
112         KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator,SetProperty);
113         KX_PYMETHOD_DOC_NOARGS(SCA_RandomActuator,GetProperty);
114         // <-----
115
116         KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setBoolConst);
117         KX_PYMETHOD_DOC_NOARGS(SCA_RandomActuator, setBoolUniform);
118         KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setBoolBernouilli);
119         KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setIntConst);
120         KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setIntUniform);
121         KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setIntPoisson);
122         KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setFloatConst);
123         KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setFloatUniform);
124         KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setFloatNormal);
125         KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setFloatNegativeExponential);
126 }; /* end of class KX_EditObjectActuator : public SCA_PropertyActuator */
127
128 #endif
129