| 
									
										
										
										
											2011-02-22 19:30:37 +00:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2008-04-16 22:40:48 +00:00
										 |  |  |  * ***** BEGIN GPL LICENSE BLOCK ***** | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  * This program is free software; you can redistribute it and/or | 
					
						
							|  |  |  |  * modify it under the terms of the GNU General Public License | 
					
						
							|  |  |  |  * as published by the Free Software Foundation; either version 2 | 
					
						
							| 
									
										
										
										
											2008-04-16 22:40:48 +00:00
										 |  |  |  * of the License, or (at your option) any later version. | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  * This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  |  * GNU General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  |  * along with this program; if not, write to the Free Software Foundation, | 
					
						
							| 
									
										
										
										
											2010-02-12 13:34:04 +00:00
										 |  |  |  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. | 
					
						
							|  |  |  |  * All rights reserved. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * The Original Code is: all of this file. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Contributor(s): none yet. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2008-04-16 22:40:48 +00:00
										 |  |  |  * ***** END GPL LICENSE BLOCK ***** | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2011-02-22 19:30:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** \file SG_IObject.h
 | 
					
						
							|  |  |  |  *  \ingroup bgesg | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  |   | 
					
						
							| 
									
										
										
										
											2012-02-23 10:41:31 +00:00
										 |  |  | #ifndef __SG_IOBJECT_H__
 | 
					
						
							|  |  |  | #define __SG_IOBJECT_H__
 | 
					
						
							| 
									
										
										
										
											2004-05-16 12:54:44 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-08 20:08:19 +00:00
										 |  |  | #include "SG_QList.h"
 | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | #include <vector>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-20 15:06:46 +00:00
										 |  |  | // used for debugging: stage of the game engine main loop at which a Scenegraph modification is done
 | 
					
						
							|  |  |  | enum SG_Stage | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	SG_STAGE_UNKNOWN = 0, | 
					
						
							|  |  |  | 	SG_STAGE_NETWORK, | 
					
						
							|  |  |  | 	SG_STAGE_NETWORK_UPDATE, | 
					
						
							|  |  |  | 	SG_STAGE_PHYSICS1, | 
					
						
							|  |  |  | 	SG_STAGE_PHYSICS1_UPDATE, | 
					
						
							|  |  |  | 	SG_STAGE_CONTROLLER, | 
					
						
							|  |  |  | 	SG_STAGE_CONTROLLER_UPDATE, | 
					
						
							|  |  |  | 	SG_STAGE_ACTUATOR, | 
					
						
							|  |  |  | 	SG_STAGE_ACTUATOR_UPDATE, | 
					
						
							| 
									
										
										
										
											2011-07-14 07:03:33 +00:00
										 |  |  | 	SG_STAGE_ANIMATION_UPDATE, | 
					
						
							| 
									
										
										
										
											2009-04-20 15:06:46 +00:00
										 |  |  | 	SG_STAGE_PHYSICS2, | 
					
						
							|  |  |  | 	SG_STAGE_PHYSICS2_UPDATE, | 
					
						
							|  |  |  | 	SG_STAGE_SCENE, | 
					
						
							|  |  |  | 	SG_STAGE_RENDER, | 
					
						
							|  |  |  | 	SG_STAGE_CONVERTER, | 
					
						
							|  |  |  | 	SG_STAGE_CULLING, | 
					
						
							|  |  |  | 	SG_STAGE_MAX | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern SG_Stage gSG_Stage; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | inline void SG_SetActiveStage(SG_Stage stage) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	gSG_Stage = stage; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | class SG_Controller; | 
					
						
							|  |  |  | class SG_IObject; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef std::vector<SG_Controller*> SGControllerList; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef void* (*SG_ReplicationNewCallback)( | 
					
						
							|  |  |  | 	SG_IObject* sgobject, | 
					
						
							|  |  |  | 	void*	clientobj, | 
					
						
							|  |  |  | 	void*	clientinfo | 
					
						
							|  |  |  | ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef void* (*SG_DestructionNewCallback)( | 
					
						
							|  |  |  | 	SG_IObject* sgobject, | 
					
						
							|  |  |  | 	void*	clientobj, | 
					
						
							|  |  |  | 	void*	clientinfo | 
					
						
							|  |  |  | ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-26 07:29:01 +00:00
										 |  |  | typedef void (*SG_UpdateTransformCallback)( | 
					
						
							| 
									
										
										
										
											2004-05-26 12:06:41 +00:00
										 |  |  | 	SG_IObject* sgobject, | 
					
						
							|  |  |  | 	void*	clientobj, | 
					
						
							|  |  |  | 	void*	clientinfo | 
					
						
							|  |  |  | ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-26 07:29:01 +00:00
										 |  |  | typedef bool (*SG_ScheduleUpdateCallback)( | 
					
						
							| 
									
										
										
										
											2009-06-08 20:08:19 +00:00
										 |  |  | 	SG_IObject* sgobject, | 
					
						
							|  |  |  | 	void*	clientobj, | 
					
						
							|  |  |  | 	void*	clientinfo | 
					
						
							|  |  |  | ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-26 07:29:01 +00:00
										 |  |  | typedef bool (*SG_RescheduleUpdateCallback)( | 
					
						
							| 
									
										
										
										
											2009-06-08 20:08:19 +00:00
										 |  |  | 	SG_IObject* sgobject, | 
					
						
							|  |  |  | 	void*	clientobj, | 
					
						
							|  |  |  | 	void*	clientinfo | 
					
						
							|  |  |  | ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * SG_Callbacks hold 2 call backs to the outside world. | 
					
						
							|  |  |  |  * The first is meant to be called when objects are replicated. | 
					
						
							| 
									
										
										
										
											2012-03-04 04:35:12 +00:00
										 |  |  |  * And allows the outside world to synchronize external objects | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  |  * with replicated nodes and their children. | 
					
						
							| 
									
										
										
										
											2012-03-04 04:35:12 +00:00
										 |  |  |  * The second is called when a node is destroyed and again | 
					
						
							|  |  |  |  * is their for synchronization purposes | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  |  * These callbacks may both be NULL.  | 
					
						
							|  |  |  |  * The efficacy of this approach has not been proved some  | 
					
						
							|  |  |  |  * alternatives might be to perform all replication and destruction | 
					
						
							|  |  |  |  * externally.  | 
					
						
							|  |  |  |  * To define a class interface rather than a simple function | 
					
						
							|  |  |  |  * call back so that replication information can be transmitted from  | 
					
						
							|  |  |  |  * parent->child.  | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct	SG_Callbacks | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	SG_Callbacks( | 
					
						
							|  |  |  | 	): | 
					
						
							|  |  |  | 		m_replicafunc(NULL), | 
					
						
							| 
									
										
										
										
											2004-05-26 12:06:41 +00:00
										 |  |  | 		m_destructionfunc(NULL), | 
					
						
							| 
									
										
										
										
											2009-06-08 20:08:19 +00:00
										 |  |  | 		m_updatefunc(NULL), | 
					
						
							|  |  |  | 		m_schedulefunc(NULL), | 
					
						
							|  |  |  | 		m_reschedulefunc(NULL) | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2012-11-08 06:46:10 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 	SG_Callbacks( | 
					
						
							|  |  |  | 		SG_ReplicationNewCallback repfunc, | 
					
						
							| 
									
										
										
										
											2004-05-26 12:06:41 +00:00
										 |  |  | 		SG_DestructionNewCallback destructfunc, | 
					
						
							| 
									
										
										
										
											2009-06-08 20:08:19 +00:00
										 |  |  | 		SG_UpdateTransformCallback updatefunc, | 
					
						
							|  |  |  | 		SG_ScheduleUpdateCallback schedulefunc, | 
					
						
							|  |  |  | 		SG_RescheduleUpdateCallback reschedulefunc | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 	):  | 
					
						
							|  |  |  | 		m_replicafunc(repfunc), | 
					
						
							| 
									
										
										
										
											2004-05-26 12:06:41 +00:00
										 |  |  | 		m_destructionfunc(destructfunc), | 
					
						
							| 
									
										
										
										
											2009-06-08 20:08:19 +00:00
										 |  |  | 		m_updatefunc(updatefunc), | 
					
						
							|  |  |  | 		m_schedulefunc(schedulefunc), | 
					
						
							|  |  |  | 		m_reschedulefunc(reschedulefunc) | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2012-11-08 06:46:10 +00:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	SG_ReplicationNewCallback	m_replicafunc; | 
					
						
							|  |  |  | 	SG_DestructionNewCallback	m_destructionfunc; | 
					
						
							| 
									
										
										
										
											2004-05-26 12:06:41 +00:00
										 |  |  | 	SG_UpdateTransformCallback	m_updatefunc; | 
					
						
							| 
									
										
										
										
											2009-06-08 20:08:19 +00:00
										 |  |  | 	SG_ScheduleUpdateCallback	m_schedulefunc; | 
					
						
							|  |  |  | 	SG_RescheduleUpdateCallback m_reschedulefunc; | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-05-16 12:54:44 +00:00
										 |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2012-11-18 01:22:31 +00:00
										 |  |  |  * base object that can be part of the scenegraph. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2009-06-08 20:08:19 +00:00
										 |  |  | class SG_IObject : public SG_QList | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | private : | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void*	m_SGclientObject; | 
					
						
							|  |  |  | 	void*	m_SGclientInfo; | 
					
						
							|  |  |  | 	SG_Callbacks m_callbacks; | 
					
						
							|  |  |  | 	SGControllerList	m_SGcontrollers; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 	virtual ~SG_IObject(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * Add a pointer to a controller allocated on the heap, to  | 
					
						
							|  |  |  | 	 * this node. This memory for this controller becomes the  | 
					
						
							|  |  |  | 	 * responsibility of this class. It will be deleted when | 
					
						
							|  |  |  | 	 * this object is deleted. | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											2012-09-16 04:58:18 +00:00
										 |  |  | 		void | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 	AddSGController( | 
					
						
							|  |  |  | 		SG_Controller* cont | 
					
						
							|  |  |  | 	); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-28 07:15:27 +00:00
										 |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * Remove a pointer to a controller from this node. | 
					
						
							|  |  |  | 	 * This does not delete the controller itself! Be careful to | 
					
						
							|  |  |  | 	 * avoid memory leaks. | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 		void | 
					
						
							|  |  |  | 	RemoveSGController( | 
					
						
							|  |  |  | 		SG_Controller* cont | 
					
						
							|  |  |  | 	); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 	/** 
 | 
					
						
							|  |  |  | 	 * Clear the array of pointers to controllers associated with  | 
					
						
							|  |  |  | 	 * this node. This does not delete the controllers themselves! | 
					
						
							| 
									
										
										
										
											2011-09-03 02:15:49 +00:00
										 |  |  | 	 * This should be used very carefully to avoid memory | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 	 * leaks. | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											2012-09-16 04:58:18 +00:00
										 |  |  | 		void | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 	RemoveAllControllers( | 
					
						
							|  |  |  | 	);  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/// Needed for replication
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** 
 | 
					
						
							|  |  |  | 	 * Return a reference to this node's controller list.  | 
					
						
							|  |  |  | 	 * Whilst we don't wish to expose full control of the container | 
					
						
							|  |  |  | 	 * to the user we do allow them to call non_const methods | 
					
						
							|  |  |  | 	 * on pointers in the container. C++ topic: how to do this in | 
					
						
							|  |  |  | 	 * using STL?  | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-08 20:08:19 +00:00
										 |  |  | 	SGControllerList& GetSGControllerList() | 
					
						
							|  |  |  | 	{  | 
					
						
							|  |  |  | 		return m_SGcontrollers;  | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-08 20:08:19 +00:00
										 |  |  | 	/**
 | 
					
						
							|  |  |  | 	 *  | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	SG_Callbacks& GetCallBackFunctions() | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		return m_callbacks; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 	 | 
					
						
							|  |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * Get the client object associated with this | 
					
						
							|  |  |  | 	 * node. This interface allows you to associate | 
					
						
							| 
									
										
										
										
											2012-03-04 04:35:12 +00:00
										 |  |  | 	 * arbitrary external objects with this node. They are | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 	 * passed to the callback functions when they are  | 
					
						
							| 
									
										
										
										
											2012-03-04 04:35:12 +00:00
										 |  |  | 	 * activated so you can synchronize these external objects | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 	 * upon replication and destruction | 
					
						
							|  |  |  | 	 * This may be NULL. | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-16 04:58:18 +00:00
										 |  |  | 	inline const void* GetSGClientObject() const | 
					
						
							| 
									
										
										
										
											2009-06-08 20:08:19 +00:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		return m_SGclientObject; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-08 20:08:19 +00:00
										 |  |  | 	inline void* GetSGClientObject() | 
					
						
							|  |  |  | 	{  | 
					
						
							|  |  |  | 		return m_SGclientObject; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * Set the client object for this node. This is just a  | 
					
						
							|  |  |  | 	 * pointer to an object allocated that should exist for  | 
					
						
							| 
									
										
										
										
											2012-03-04 04:35:12 +00:00
										 |  |  | 	 * the duration of the lifetime of this object, or until | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 	 * this function is called again. | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											2009-06-08 20:08:19 +00:00
										 |  |  | 	void SetSGClientObject(void* clientObject) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		m_SGclientObject = clientObject; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-15 23:58:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/* needed for scene switching */ | 
					
						
							|  |  |  | 	inline const void* GetSGClientInfo() const | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		return m_SGclientInfo; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	inline void* GetSGClientInfo() | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		return m_SGclientInfo; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	void SetSGClientInfo(void* clientInfo) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		m_SGclientInfo = clientInfo; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 	/** 
 | 
					
						
							|  |  |  | 	 * Set the current simulation time for this node. | 
					
						
							|  |  |  | 	 * The implementation of this function runs through | 
					
						
							|  |  |  | 	 * the nodes list of controllers and calls their SetSimulatedTime methods | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  |   | 
					
						
							| 
									
										
										
										
											2009-06-08 20:08:19 +00:00
										 |  |  | 	void SetControllerTime(double time); | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 	 | 
					
						
							|  |  |  | 	virtual  | 
					
						
							| 
									
										
										
										
											2012-09-16 04:58:18 +00:00
										 |  |  | 		void | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 	Destruct( | 
					
						
							|  |  |  | 	) = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | protected : | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-07-18 19:56:56 +00:00
										 |  |  | 		bool | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 	ActivateReplicationCallback( | 
					
						
							|  |  |  | 		SG_IObject *replica | 
					
						
							| 
									
										
										
										
											2009-06-08 20:08:19 +00:00
										 |  |  | 	) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		if (m_callbacks.m_replicafunc) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			// Call client provided replication func
 | 
					
						
							|  |  |  | 			if (m_callbacks.m_replicafunc(replica,m_SGclientObject,m_SGclientInfo) == NULL) | 
					
						
							|  |  |  | 				return false; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		return true; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		void | 
					
						
							|  |  |  | 	ActivateDestructionCallback( | 
					
						
							| 
									
										
										
										
											2009-06-08 20:08:19 +00:00
										 |  |  | 	) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		if (m_callbacks.m_destructionfunc) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			// Call client provided destruction function on this!
 | 
					
						
							|  |  |  | 			m_callbacks.m_destructionfunc(this,m_SGclientObject,m_SGclientInfo); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			// no callback but must still destroy the node to avoid memory leak
 | 
					
						
							|  |  |  | 			delete this; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2004-05-26 12:06:41 +00:00
										 |  |  | 	 | 
					
						
							|  |  |  | 		void | 
					
						
							|  |  |  | 	ActivateUpdateTransformCallback( | 
					
						
							| 
									
										
										
										
											2009-06-08 20:08:19 +00:00
										 |  |  | 	) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		if (m_callbacks.m_updatefunc) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			// Call client provided update func.
 | 
					
						
							|  |  |  | 			m_callbacks.m_updatefunc(this, m_SGclientObject, m_SGclientInfo); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		bool | 
					
						
							|  |  |  | 	ActivateScheduleUpdateCallback( | 
					
						
							|  |  |  | 	) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		// HACK, this check assumes that the scheduled nodes are put on a DList (see SG_Node.h)
 | 
					
						
							|  |  |  | 		// The early check on Empty() allows up to avoid calling the callback function
 | 
					
						
							|  |  |  | 		// when the node is already scheduled for update.
 | 
					
						
							|  |  |  | 		if (Empty() && m_callbacks.m_schedulefunc) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			// Call client provided update func.
 | 
					
						
							|  |  |  | 			return m_callbacks.m_schedulefunc(this, m_SGclientObject, m_SGclientInfo); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		return false; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		void | 
					
						
							|  |  |  | 	ActivateRecheduleUpdateCallback( | 
					
						
							|  |  |  | 	) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		if (m_callbacks.m_reschedulefunc) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			// Call client provided update func.
 | 
					
						
							|  |  |  | 			m_callbacks.m_reschedulefunc(this, m_SGclientObject, m_SGclientInfo); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	SG_IObject( | 
					
						
							|  |  |  | 		void* clientobj, | 
					
						
							|  |  |  | 		void* clientinfo, | 
					
						
							| 
									
										
										
										
											2009-06-08 20:08:19 +00:00
										 |  |  | 		SG_Callbacks& callbacks | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | 	); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	SG_IObject( | 
					
						
							|  |  |  | 		const SG_IObject &other | 
					
						
							|  |  |  | 	); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-18 15:37:31 +00:00
										 |  |  | #ifdef WITH_CXX_GUARDEDALLOC
 | 
					
						
							| 
									
										
										
										
											2012-06-25 09:14:37 +00:00
										 |  |  | 	MEM_CXX_CLASS_ALLOC_FUNCS("GE:SG_IObject") | 
					
						
							| 
									
										
										
										
											2009-08-18 15:37:31 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2002-10-12 11:37:38 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-09 13:36:42 +00:00
										 |  |  | #endif  /* __SG_IOBJECT_H__ */
 |