ca942076efaceafb0391bf26f7e78ee70c3e46b8
[blender.git] / source / gameengine / GameLogic / SCA_PropertySensor.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) 2001-2002 by NaN Holding BV.
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 SCA_PropertySensor.h
29  *  \ingroup gamelogic
30  *  \brief Property sensor
31  */
32
33 #ifndef __SCA_PROPERTYSENSOR_H__
34 #define __SCA_PROPERTYSENSOR_H__
35
36 #include "SCA_ISensor.h"
37
38 class SCA_PropertySensor : public SCA_ISensor
39 {
40         Py_Header
41         //class CExpression*    m_rightexpr;
42         int                             m_checktype;
43         STR_String              m_checkpropval;
44         STR_String              m_checkpropmaxval;
45         STR_String              m_checkpropname;
46         STR_String              m_previoustext;
47         bool                    m_lastresult;
48         bool                    m_recentresult;
49         CExpression*    m_range_expr;
50
51  protected:
52
53 public:
54         enum KX_PROPSENSOR_TYPE {
55                 KX_PROPSENSOR_NODEF = 0,
56                 KX_PROPSENSOR_EQUAL,
57                 KX_PROPSENSOR_NOTEQUAL,
58                 KX_PROPSENSOR_INTERVAL,
59                 KX_PROPSENSOR_CHANGED,
60                 KX_PROPSENSOR_EXPRESSION,
61                 KX_PROPSENSOR_MAX
62         };
63
64         const STR_String S_KX_PROPSENSOR_EQ_STRING;
65         
66         SCA_PropertySensor(class SCA_EventManager* eventmgr,
67                                           SCA_IObject* gameobj,
68                                           const STR_String& propname,
69                                           const STR_String& propval,
70                                           const STR_String& propmaxval,
71                                           KX_PROPSENSOR_TYPE checktype);
72         
73         /** 
74          *  For property sensor, it is used to release the pre-calculated expression
75          *  so that self references are removed before the sensor itself is released
76          */
77         virtual void Delete();
78         virtual ~SCA_PropertySensor();
79         virtual CValue* GetReplica();
80         virtual void Init();
81         void    PrecalculateRangeExpression();
82         bool    CheckPropertyCondition();
83
84         virtual bool Evaluate();
85         virtual bool    IsPositiveTrigger();
86         virtual CValue*         FindIdentifier(const STR_String& identifiername);
87
88 #ifdef WITH_PYTHON
89
90         /* --------------------------------------------------------------------- */
91         /* Python interface ---------------------------------------------------- */
92         /* --------------------------------------------------------------------- */
93
94         /**
95          * Test whether this is a sensible value (type check)
96          */
97         static int validValueForProperty(void* self, const PyAttributeDef*);
98
99         /**
100          * Test whether this is a sensible value for interval (type check) and updates Range Expression
101          */
102         static int validValueForIntervalProperty(void* self, const PyAttributeDef*);
103
104         /**
105          * Test if the new mode is interval. If positive updates Range Expression
106          */
107         static int modeChange(void* self, const PyAttributeDef* attrdef);
108
109 #endif
110 };
111
112 #endif
113