resolved conflict state with HEAD r14096
[blender.git] / source / gameengine / SceneGraph / SG_IObject.cpp
1 /**
2  * $Id$
3  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version. The Blender
9  * Foundation also sells licenses for use in proprietary software under
10  * the Blender License.  See http://www.blender.org/BL/ for information
11  * about this.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL/BL DUAL LICENSE BLOCK *****
30  */
31
32 #include "SG_IObject.h"
33 #include "SG_Controller.h"
34
35 #ifdef HAVE_CONFIG_H
36 #include <config.h>
37 #endif
38
39 SG_IObject::
40 SG_IObject(
41         void* clientobj,
42         void* clientinfo,
43         SG_Callbacks callbacks
44 ): 
45         m_SGclientObject(clientobj),
46         m_SGclientInfo(clientinfo),
47         m_callbacks(callbacks) 
48 {
49         //nothing to do
50 }
51
52 SG_IObject::
53 SG_IObject(
54         const SG_IObject &other
55 ) :
56         m_SGclientObject(other.m_SGclientObject),
57         m_SGclientInfo(other.m_SGclientInfo),
58         m_callbacks(other.m_callbacks) 
59 {
60         //nothing to do
61 }
62
63         void 
64 SG_IObject::
65 AddSGController(
66         SG_Controller* cont
67 ){
68         m_SGcontrollers.push_back(cont);
69 }
70
71         void                            
72 SG_IObject::
73 RemoveAllControllers(
74 ) { 
75         m_SGcontrollers.clear(); 
76 }
77
78 /// Needed for replication
79         SGControllerList&       
80 SG_IObject::
81 GetSGControllerList(
82 ){ 
83         return m_SGcontrollers; 
84 }
85
86         void*                           
87 SG_IObject::
88 GetSGClientObject(
89 ){ 
90         return m_SGclientObject;
91 }
92
93 const 
94         void*                   
95 SG_IObject::
96 GetSGClientObject(
97 ) const {
98         return m_SGclientObject;
99 }
100
101         void    
102 SG_IObject::
103 SetSGClientObject(
104         void* clientObject
105 ){
106         m_SGclientObject = clientObject;
107 }
108
109
110         void
111 SG_IObject::
112 ActivateReplicationCallback(
113         SG_IObject *replica
114 ){
115         if (m_callbacks.m_replicafunc)
116         {
117                 // Call client provided replication func
118                 m_callbacks.m_replicafunc(replica,m_SGclientObject,m_SGclientInfo);
119         }
120 };      
121
122         void
123 SG_IObject::
124 ActivateDestructionCallback(
125 ){
126         if (m_callbacks.m_destructionfunc)
127         {
128                 // Call client provided destruction function on this!
129                 m_callbacks.m_destructionfunc(this,m_SGclientObject,m_SGclientInfo);
130         }
131         else
132         {
133                 // no callback but must still destroy the node to avoid memory leak
134                 delete this;
135         }
136 }
137
138         void
139 SG_IObject::
140 ActivateUpdateTransformCallback(
141 ){
142         if (m_callbacks.m_updatefunc)
143         {
144                 // Call client provided update func.
145                 m_callbacks.m_updatefunc(this, m_SGclientObject, m_SGclientInfo);
146         }
147 }
148
149         void 
150 SG_IObject::
151 SetControllerTime(
152         double time
153 ){
154         SGControllerList::iterator contit;
155
156         for (contit = m_SGcontrollers.begin();contit!=m_SGcontrollers.end();++contit)
157         {
158                 (*contit)->SetSimulatedTime(time);
159         }
160 }
161
162
163 SG_IObject::
164 ~SG_IObject()
165 {
166         SGControllerList::iterator contit;
167
168         for (contit = m_SGcontrollers.begin();contit!=m_SGcontrollers.end();++contit)
169         {
170                 delete (*contit);
171         }
172 }