Merging r48257 through r48263 from trunk into soc-2011-tomato
[blender.git] / source / gameengine / SceneGraph / SG_IObject.cpp
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 gameengine/SceneGraph/SG_IObject.cpp
29  *  \ingroup bgesg
30  */
31
32
33 #include "SG_IObject.h"
34 #include "SG_Controller.h"
35
36 #include <algorithm>
37
38 SG_Stage gSG_Stage = SG_STAGE_UNKNOWN;
39
40 SG_IObject::
41 SG_IObject(
42         void* clientobj,
43         void* clientinfo,
44         SG_Callbacks& callbacks
45 ): 
46         SG_QList(),
47         m_SGclientObject(clientobj),
48         m_SGclientInfo(clientinfo)
49 {
50         m_callbacks = callbacks;
51 }
52
53 SG_IObject::
54 SG_IObject(
55         const SG_IObject &other
56 ) :
57         SG_QList(),
58         m_SGclientObject(other.m_SGclientObject),
59         m_SGclientInfo(other.m_SGclientInfo),
60         m_callbacks(other.m_callbacks) 
61 {
62         //nothing to do
63 }
64
65         void 
66 SG_IObject::
67 AddSGController(
68         SG_Controller* cont
69 ) {
70         m_SGcontrollers.push_back(cont);
71 }
72
73         void                            
74 SG_IObject::
75 RemoveSGController(
76         SG_Controller* cont
77 ) {
78         SGControllerList::iterator contit;
79
80         m_SGcontrollers.erase(std::remove(m_SGcontrollers.begin(), m_SGcontrollers.end(), cont));
81 }
82
83         void
84 SG_IObject::
85 RemoveAllControllers(
86 ) { 
87         m_SGcontrollers.clear(); 
88 }
89
90 void SG_IObject::SetControllerTime(double time)
91 {
92         SGControllerList::iterator contit;
93         for (contit = m_SGcontrollers.begin();contit!=m_SGcontrollers.end();++contit)
94         {
95                 (*contit)->SetSimulatedTime(time);
96         }
97 }
98
99 /// Needed for replication
100
101
102 SG_IObject::
103 ~SG_IObject()
104 {
105         SGControllerList::iterator contit;
106
107         for (contit = m_SGcontrollers.begin();contit!=m_SGcontrollers.end();++contit)
108         {
109                 delete (*contit);
110         }
111 }