optionally use guarded alloc for tiles compositor, also replace allocation functions...
[blender.git] / source / gameengine / Ketsji / KX_IPO_SGController.h
index a010e8e3e6c63765d4b24dd0d33370930f21e619..266b89ff969cb2c879ef126ca757dd1551911ecc 100644 (file)
@@ -1,6 +1,4 @@
-/**
- * $Id$
- *
+/*
  * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
@@ -15,7 +13,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,
- * 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.
  *
  * ***** END GPL LICENSE BLOCK *****
  */
-#ifndef __IPO_SGCONTROLLER_H
-#define __IPO_SGCONTROLLER_H
+
+/** \file KX_IPO_SGController.h
+ *  \ingroup ketsji
+ */
+
+#ifndef __KX_IPO_SGCONTROLLER_H__
+#define __KX_IPO_SGCONTROLLER_H__
 
 #include "SG_Controller.h"
 #include "SG_Spatial.h"
 #include "KX_IPOTransform.h"
 #include "KX_IInterpolator.h"
 
+#define KX_MAX_IPO_CHANNELS 19 //note- [0] is not used
+
 class KX_IpoSGController : public SG_Controller
 {
        KX_IPOTransform     m_ipo_xform;
        T_InterpolatorList  m_interpolators;
-       /* Why not bools? */
-       short               m_modify_position    : 1;
-       short               m_modify_orientation : 1;
-       short               m_modify_scaling     : 1;
+
+       /** Flag for each IPO channel that can be applied to a game object */
+       bool                            m_ipo_channels_active[KX_MAX_IPO_CHANNELS];
 
        /** Interpret the ipo as a force rather than a displacement? */
        bool                m_ipo_as_force;
 
-       /** Ipo-as-force acts in local rather than in global coordinates? */
-       bool                m_force_ipo_acts_local;
+       /** Add Ipo curve to current loc/rot/scale */
+       bool                m_ipo_add;
 
+       /** Ipo must be applied in local coordinate rather than in global coordinates (used for force and Add mode)*/
+       bool                m_ipo_local;
+       
        /** Were settings altered since the last update? */
        bool                            m_modified;
 
        /** Local time of this ipo.*/
        double                  m_ipotime;
 
+       /** Location of the object when the IPO is first fired (for local transformations) */
+       class MT_Point3         m_ipo_start_point;
+
+       /** Orientation of the object when the IPO is first fired (for local transformations) */
+       class MT_Matrix3x3      m_ipo_start_orient;
+
+       /** Scale of the object when the IPO is first fired (for local transformations) */
+       class MT_Vector3        m_ipo_start_scale;
+
+       /** if IPO initial position has been set for local normal IPO */
+       bool                            m_ipo_start_initialized;
+
+       /** Euler angles at the start of the game, needed for incomplete ROT Ipo curves */
+       class MT_Vector3        m_ipo_start_euler;
+
+       /** true is m_ipo_start_euler has been initialized */
+       bool                            m_ipo_euler_initialized;
+
        /** A reference to the original game object. */
        class KX_GameObject* m_game_object;
 
@@ -77,16 +102,12 @@ public:
        /** Set reference to the corresponding game object. */
        void SetGameObject(class KX_GameObject*);
 
-       void    SetModifyPosition(bool modifypos) {     
-               m_modify_position=modifypos;
-       }
-       void    SetModifyOrientation(bool modifyorient) {       
-               m_modify_orientation=modifyorient;
-       }
-       void    SetModifyScaling(bool modifyscale) {    
-               m_modify_scaling=modifyscale;
+       void SetIPOChannelActive(int index, bool value) {
+               //indexes found in makesdna\DNA_ipo_types.h
+               m_ipo_channels_active[index] = value;
        }
        
+       
        KX_IPOTransform& GetIPOTransform()
        {
                return m_ipo_xform;
@@ -98,7 +119,13 @@ public:
                m_ipotime = time;
                m_modified = true;
        }
+
+
+#ifdef WITH_CXX_GUARDEDALLOC
+       MEM_CXX_CLASS_ALLOC_FUNCS("GE:KX_IpoSGController")
+#endif
 };
 
-#endif //__IPO_SGCONTROLLER_H
+#endif //__KX_IPO_SGCONTROLLER_H__
+