Filling in branch from trunk
[blender.git] / source / gameengine / Ketsji / KX_IPO_SGController.h
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version. The Blender
10  * Foundation also sells licenses for use in proprietary software under
11  * the Blender License.  See http://www.blender.org/BL/ for information
12  * about this.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22  *
23  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24  * All rights reserved.
25  *
26  * The Original Code is: all of this file.
27  *
28  * Contributor(s): none yet.
29  *
30  * ***** END GPL/BL DUAL LICENSE BLOCK *****
31  */
32 #ifndef __IPO_SGCONTROLLER_H
33 #define __IPO_SGCONTROLLER_H
34
35 #include "SG_Controller.h"
36 #include "SG_Spatial.h"
37
38 #include "KX_IPOTransform.h"
39 #include "KX_IInterpolator.h"
40
41 class KX_IpoSGController : public SG_Controller
42 {
43         KX_IPOTransform     m_ipo_xform;
44         T_InterpolatorList  m_interpolators;
45         /* Why not bools? */
46         short               m_modify_position    : 1;
47         short               m_modify_orientation : 1;
48         short               m_modify_scaling     : 1;
49
50         /** Interpret the ipo as a force rather than a displacement? */
51         bool                m_ipo_as_force;
52
53         /** Ipo-as-force acts in local rather than in global coordinates? */
54         bool                m_force_ipo_acts_local;
55
56         /** Were settings altered since the last update? */
57         bool                            m_modified;
58
59         /** Local time of this ipo.*/
60         double                  m_ipotime;
61
62         /** A reference to the original game object. */
63         class KX_GameObject* m_game_object;
64
65 public:
66         KX_IpoSGController();
67
68         virtual ~KX_IpoSGController();
69
70         virtual SG_Controller*  GetReplica(class SG_Node* destnode);
71
72                 void
73         SetOption(
74                 int option,
75                 int value
76         );
77
78         /** Set sumo data. */
79         void UpdateSumoReference();
80         /** Set reference to the corresponding game object. */
81         void SetGameObject(class KX_GameObject*);
82
83         void    SetModifyPosition(bool modifypos) {     
84                 m_modify_position=modifypos;
85         }
86         void    SetModifyOrientation(bool modifyorient) {       
87                 m_modify_orientation=modifyorient;
88         }
89         void    SetModifyScaling(bool modifyscale) {    
90                 m_modify_scaling=modifyscale;
91         }
92         
93         KX_IPOTransform& GetIPOTransform()
94         {
95                 return m_ipo_xform;
96         }
97         void    AddInterpolator(KX_IInterpolator* interp);
98         virtual bool Update(double time);
99         virtual void    SetSimulatedTime(double time)
100         {
101                 m_ipotime = time;
102                 m_modified = true;
103         }
104 };
105
106 #endif //__IPO_SGCONTROLLER_H
107