Initial revision
[blender.git] / source / gameengine / GameLogic / SCA_PropertySensor.h
1 /**
2  * Property sensor
3  *
4  * $Id$
5  *
6  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version. The Blender
12  * Foundation also sells licenses for use in proprietary software under
13  * the Blender License.  See http://www.blender.org/BL/ for information
14  * about this.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software Foundation,
23  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
24  *
25  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
26  * All rights reserved.
27  *
28  * The Original Code is: all of this file.
29  *
30  * Contributor(s): none yet.
31  *
32  * ***** END GPL/BL DUAL LICENSE BLOCK *****
33  */
34
35 #ifndef __KX_PROPERTYSENSOR
36 #define __KX_PROPERTYSENSOR
37
38 #include "SCA_ISensor.h"
39
40 class SCA_PropertySensor : public SCA_ISensor
41 {
42         Py_Header;
43         //class CExpression*    m_rightexpr;
44         int                             m_checktype;
45         STR_String              m_checkpropval;
46         STR_String              m_checkpropmaxval;
47         STR_String              m_checkpropname;
48         STR_String              m_previoustext;
49         bool                    m_lastresult;
50         bool                    m_recentresult;
51         CExpression*    m_range_expr;
52
53         /**
54          * Test whether this is a sensible value (type check)
55          */
56         bool validValueForProperty(char *val, STR_String &prop);
57  protected:
58
59 public:
60         enum KX_PROPSENSOR_TYPE {
61                 KX_PROPSENSOR_NODEF = 0,
62                 KX_PROPSENSOR_EQUAL,
63                 KX_PROPSENSOR_NOTEQUAL,
64                 KX_PROPSENSOR_INTERVAL,
65                 KX_PROPSENSOR_CHANGED,
66                 KX_PROPSENSOR_EXPRESSION,
67                 KX_PROPSENSOR_MAX
68         };
69
70         const STR_String S_KX_PROPSENSOR_EQ_STRING;
71         
72         SCA_PropertySensor(class SCA_EventManager* eventmgr,
73                                           SCA_IObject* gameobj,
74                                           const STR_String& propname,
75                                           const STR_String& propval,
76                                           const STR_String& propmaxval,
77                                           KX_PROPSENSOR_TYPE checktype,
78                                           PyTypeObject* T=&Type );
79         
80         virtual ~SCA_PropertySensor();
81         virtual CValue* GetReplica();
82         void    PrecalculateRangeExpression();
83         bool    CheckPropertyCondition();
84
85         virtual bool Evaluate(CValue* event);
86         virtual bool    IsPositiveTrigger();
87         virtual CValue*         FindIdentifier(const STR_String& identifiername);
88
89         /* --------------------------------------------------------------------- */
90         /* Python interface ---------------------------------------------------- */
91         /* --------------------------------------------------------------------- */
92
93         virtual PyObject*  _getattr(char *attr);
94
95         /* 1. getType */
96         KX_PYMETHOD_DOC(SCA_PropertySensor,GetType);
97         /* 2. setType */
98         KX_PYMETHOD_DOC(SCA_PropertySensor,SetType);
99         /* 3. setProperty */
100         KX_PYMETHOD_DOC(SCA_PropertySensor,SetProperty);
101         /* 4. getProperty */
102         KX_PYMETHOD_DOC(SCA_PropertySensor,GetProperty);
103         /* 5. getValue */
104         KX_PYMETHOD_DOC(SCA_PropertySensor,GetValue);
105         /* 6. setValue */
106         KX_PYMETHOD_DOC(SCA_PropertySensor,SetValue);
107         
108 };
109 #endif