Patch to change license to GPL only, from GSR.
[blender.git] / source / gameengine / GameLogic / SCA_ISensor.h
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  * Interface Class for all logic Sensors. Implements
29  * pulsemode and pulsefrequency, and event suppression.
30  */
31
32 #ifndef __SCA_ISENSOR
33 #define __SCA_ISENSOR
34
35 #include "SCA_ILogicBrick.h"
36
37 /**
38  * Interface Class for all logic Sensors. Implements
39  * pulsemode,pulsefrequency */
40 class SCA_ISensor : public SCA_ILogicBrick
41 {
42         Py_Header;
43         class SCA_EventManager* m_eventmgr;
44         bool    m_triggered;
45
46         /** Pulse positive  pulses? */
47         bool m_pos_pulsemode;
48
49         /** Pulse negative pulses? */
50         bool m_neg_pulsemode;
51
52         /** Repeat frequency in pulse mode. */
53         int m_pulse_frequency;
54
55         /** Number of ticks since the last positive pulse. */
56         int m_pos_ticks;
57
58         /** Number of ticks since the last negative pulse. */
59         int m_neg_ticks;
60
61         /** invert the output signal*/
62         bool m_invert;
63
64         /** Sensor must ignore updates? */
65         bool m_suspended;
66
67         /** Pass the activation on to the logic manager.*/
68         void SignalActivation(class SCA_LogicManager* logicmgr);
69         
70 public:
71         SCA_ISensor(SCA_IObject* gameobj,
72                                 class SCA_EventManager* eventmgr,
73                                 PyTypeObject* T );;
74         ~SCA_ISensor();
75         virtual void    ReParent(SCA_IObject* parent);
76
77         /** Because we want sensors to share some behaviour, the Activate has     */
78         /* an implementation on this level. It requires an evaluate on the lower */
79         /* level of individual sensors. Mapping the old activate()s is easy.     */
80         /* The IsPosTrig() also has to change, to keep things consistent.        */
81         void Activate(class SCA_LogicManager* logicmgr,CValue* event);
82         virtual bool Evaluate(CValue* event) = 0;
83         virtual bool IsPositiveTrigger();
84         
85         virtual PyObject* _getattr(const STR_String& attr);
86         virtual CValue* GetReplica()=0;
87
88         /** Set parameters for the pulsing behaviour.
89          * @param posmode Trigger positive pulses?
90          * @param negmode Trigger negative pulses?
91          * @param freq    Frequency to use when doing pulsing.
92          */
93         void SetPulseMode(bool posmode,
94                                           bool negmode,
95                                           int freq);
96         
97         /** Set inversion of pulses on or off. */
98         void SetInvert(bool inv);
99
100         void RegisterToManager();
101         virtual float GetNumber();
102
103         /** Stop sensing for a while. */
104         void Suspend();
105
106         /** Is this sensor switched off? */
107         bool IsSuspended();
108         
109         /** Resume sensing. */
110         void Resume();
111
112         /* Python functions: */
113         KX_PYMETHOD_DOC(SCA_ISensor,IsPositive);
114         KX_PYMETHOD_DOC(SCA_ISensor,GetUsePosPulseMode);
115         KX_PYMETHOD_DOC(SCA_ISensor,SetUsePosPulseMode);
116         KX_PYMETHOD_DOC(SCA_ISensor,GetFrequency);
117         KX_PYMETHOD_DOC(SCA_ISensor,SetFrequency);
118         KX_PYMETHOD_DOC(SCA_ISensor,GetUseNegPulseMode);
119         KX_PYMETHOD_DOC(SCA_ISensor,SetUseNegPulseMode);
120         KX_PYMETHOD_DOC(SCA_ISensor,GetInvert);
121         KX_PYMETHOD_DOC(SCA_ISensor,SetInvert);
122
123 };
124
125 #endif //__SCA_ISENSOR
126