doxygen: bge scenegraph and videotexture
[blender.git] / source / gameengine / SceneGraph / SG_ParentRelation.h
index 5df8efe7027af80eeaba3375765e2c6bb729f559..52e418031858039d21ee60e0a4d2ad73bfd4b439 100644 (file)
@@ -1,34 +1,12 @@
-/**
- * @mainpage SG_ParentRelation   
-
- * @section 
- * 
- * This is an abstract interface class to the Scene Graph library. 
- * It allows you to specify how child nodes react to parent nodes.
- * Normally a child will use it's parent's transforms to compute
- * it's own global transforms. How this is performed depends on
- * the type of relation. For example if the parent is a vertex 
- * parent to this child then the child should not inherit any 
- * rotation information from the parent. Or if the parent is a
- * 'slow parent' to this child then the child should react 
- * slowly to changes in the parent's position. The exact relation
- * is left for you to implement by filling out this interface 
- * with concrete examples. 
- * 
- * There is exactly one SG_ParentRelation per SG_Node. Subclasses
- * should not be value types and should be allocated on the heap.
- *
+/*
  * $Id$
  *
  * $Id$
  *
- * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * 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
  *
  * 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
- * of the License, or (at your option) any later version. The Blender
- * Foundation also sells licenses for use in proprietary software under
- * the Blender License.  See http://www.blender.org/BL/ for information
- * about this.
+ * of the License, or (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -37,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software Foundation,
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
  * All rights reserved.
  *
  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
  * All rights reserved.
  *
  * Contributor(s): none yet.
  *
  *
  * Contributor(s): none yet.
  *
- * ***** END GPL/BL DUAL LICENSE BLOCK *****
+ * ***** END GPL LICENSE BLOCK *****
  * 
  */
 
  * 
  */
 
+/** \file SG_ParentRelation.h
+ *  \ingroup bgesg
+ * @page SG_ParentRelationPage SG_ParentRelation   
+
+ * @section 
+ * 
+ * This is an abstract interface class to the Scene Graph library. 
+ * It allows you to specify how child nodes react to parent nodes.
+ * Normally a child will use it's parent's transforms to compute
+ * it's own global transforms. How this is performed depends on
+ * the type of relation. For example if the parent is a vertex 
+ * parent to this child then the child should not inherit any 
+ * rotation information from the parent. Or if the parent is a
+ * 'slow parent' to this child then the child should react 
+ * slowly to changes in the parent's position. The exact relation
+ * is left for you to implement by filling out this interface 
+ * with concrete examples. 
+ * 
+ * There is exactly one SG_ParentRelation per SG_Node. Subclasses
+ * should not be value types and should be allocated on the heap.
+ *
+ */
 #ifndef __SG_ParentRelation_h
 #define __SG_ParentRelation_h
 
 #ifndef __SG_ParentRelation_h
 #define __SG_ParentRelation_h
 
@@ -58,7 +59,6 @@ class SG_Spatial;
 class SG_ParentRelation {
 
 public :
 class SG_ParentRelation {
 
 public :
-
        /**
         * Update the childs local and global coordinates
         * based upon the parents global coordinates. 
        /**
         * Update the childs local and global coordinates
         * based upon the parents global coordinates. 
@@ -69,10 +69,11 @@ public :
         */ 
        
        virtual
         */ 
        
        virtual
-               void
+               bool
        UpdateChildCoordinates(
                SG_Spatial * child,
        UpdateChildCoordinates(
                SG_Spatial * child,
-               const SG_Spatial * parent
+               const SG_Spatial * parent,
+               bool& parentUpdated
        ) = 0;
 
        virtual 
        ) = 0;
 
        virtual 
@@ -93,6 +94,25 @@ public :
        NewCopy(
        ) = 0;
 
        NewCopy(
        ) = 0;
 
+       /**
+        * Vertex Parent Relation are special: they don't propagate rotation
+        */
+       virtual
+               bool
+       IsVertexRelation(
+       ) { 
+               return false;
+       }
+       
+       /**
+        * Need this to see if we are able to adjust time-offset from the python api
+        */
+       virtual
+               bool
+       IsSlowRelation(
+       ) { 
+               return false;
+       }
 protected :
 
        /** 
 protected :
 
        /** 
@@ -111,6 +131,14 @@ protected :
        SG_ParentRelation(
                const SG_ParentRelation &
        ); 
        SG_ParentRelation(
                const SG_ParentRelation &
        ); 
+       
+       
+#ifdef WITH_CXX_GUARDEDALLOC
+public:
+       void *operator new(size_t num_bytes) { return MEM_mallocN(num_bytes, "GE:SG_ParentRelation"); }
+       void operator delete( void *mem ) { MEM_freeN(mem); }
+#endif
 };     
 
 #endif
 };     
 
 #endif
+