Changed Python _getattr/_setattr methods to use const STR_String& instead of char...
[blender.git] / source / gameengine / GameLogic / SCA_IObject.h
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL/BL DUAL 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. The Blender
10  * Foundation also sells licenses for use in proprietary software under
11  * the Blender License.  See http://www.blender.org/BL/ for information
12  * about this.
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/BL DUAL LICENSE BLOCK *****
31  * An abstract object that has some logic, python scripting and
32  * reference counting Note: transformation stuff has been moved to
33  * SceneGraph
34  */
35
36 #ifndef SCA_IOBJECT_H
37 #define SCA_IOBJECT_H
38
39 #include "Value.h"
40 #include <vector>
41
42 class SCA_ISensor;
43 class SCA_IController;
44 class SCA_IActuator;
45
46 typedef std::vector<SCA_ISensor *>       SCA_SensorList;
47 typedef std::vector<SCA_IController *>   SCA_ControllerList;
48 typedef std::vector<SCA_IActuator *>     SCA_ActuatorList;
49
50 class SCA_IObject :     public CValue
51 {
52         
53         Py_Header;
54         
55 protected:
56         SCA_SensorList         m_sensors;
57         SCA_ControllerList     m_controllers;
58         SCA_ActuatorList       m_actuators;
59         static class MT_Point3 m_sDummy;
60
61         /**
62          * Ignore activity culling requests?
63          */
64         bool m_ignore_activity_culling;
65
66         /**
67          * Ignore updates?
68          */
69         bool m_suspended;
70         
71 public:
72         
73         SCA_IObject(PyTypeObject* T=&Type);
74         virtual ~SCA_IObject();
75
76         SCA_ControllerList& GetControllers();
77         SCA_SensorList& GetSensors();
78         SCA_ActuatorList& GetActuators();
79
80         void AddSensor(SCA_ISensor* act);
81         void AddController(SCA_IController* act);
82         void AddActuator(SCA_IActuator* act);
83         
84         SCA_ISensor* FindSensor(const STR_String& sensorname);
85         SCA_IActuator* FindActuator(const STR_String& actuatorname);
86         SCA_IController* FindController(const STR_String& controllername);
87
88         void SetCurrentTime(float currentTime);
89
90         void ReParentLogic();
91         
92         /**
93          * Set whether or not to ignore activity culling requests
94          */
95         void SetIgnoreActivityCulling(bool b);
96
97         /**
98          * Set whether or not this object wants to ignore activity culling
99          * requests
100          */
101         bool GetIgnoreActivityCulling();
102
103         /**
104          * Suspend all progress.
105          */
106         void Suspend(void);
107         
108         /**
109          * Resume progress
110          */
111         void Resume(void);
112         
113         const class MT_Point3&  ConvertPythonPylist(PyObject* pylist);
114         const class MT_Point3&  ConvertPythonVectorArg(PyObject* args);
115         
116         // here come the python forwarded methods
117         virtual PyObject* _getattr(const STR_String& attr);
118         
119 };
120
121 #endif //SCA_IOBJECT_H
122