OGRE  1.7
Object-Oriented Graphics Rendering Engine
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
OgreAnimable.h
Go to the documentation of this file.
1 /*
2 -----------------------------------------------------------------------------
3 This source file is part of OGRE
4  (Object-oriented Graphics Rendering Engine)
5 For the latest info, see http://www.ogre3d.org/
6 
7 Copyright (c) 2000-2011 Torus Knot Software Ltd
8 
9 Permission is hereby granted, free of charge, to any person obtaining a copy
10 of this software and associated documentation files (the "Software"), to deal
11 in the Software without restriction, including without limitation the rights
12 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13 copies of the Software, and to permit persons to whom the Software is
14 furnished to do so, subject to the following conditions:
15 
16 The above copyright notice and this permission notice shall be included in
17 all copies or substantial portions of the Software.
18 
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25 THE SOFTWARE.
26 -----------------------------------------------------------------------------
27 */
28 #ifndef __ANIMABLE_H__
29 #define __ANIMABLE_H__
30 
31 #include "OgrePrerequisites.h"
32 #include "OgreVector2.h"
33 #include "OgreVector3.h"
34 #include "OgreVector4.h"
35 #include "OgreQuaternion.h"
36 #include "OgreColourValue.h"
37 #include "OgreSharedPtr.h"
38 #include "OgreStringVector.h"
39 #include "OgreException.h"
40 #include "OgreAny.h"
41 
42 namespace Ogre {
72  {
73  public:
75  enum ValueType
76  {
77  INT,
85  DEGREE
86  };
87  protected:
90 
92  union
93  {
95  Real mBaseValueReal[4];
96  };
97 
99  virtual void setAsBaseValue(int val) { mBaseValueInt = val; }
101  virtual void setAsBaseValue(Real val) { mBaseValueReal[0] = val; }
103  virtual void setAsBaseValue(const Vector2& val)
104  { memcpy(mBaseValueReal, val.ptr(), sizeof(Real)*2); }
106  virtual void setAsBaseValue(const Vector3& val)
107  { memcpy(mBaseValueReal, val.ptr(), sizeof(Real)*3); }
109  virtual void setAsBaseValue(const Vector4& val)
110  { memcpy(mBaseValueReal, val.ptr(), sizeof(Real)*4); }
112  virtual void setAsBaseValue(const Quaternion& val)
113  { memcpy(mBaseValueReal, val.ptr(), sizeof(Real)*4); }
115  virtual void setAsBaseValue(const Any& val);
117  virtual void setAsBaseValue(const ColourValue& val)
118  {
119  mBaseValueReal[0] = val.r;
120  mBaseValueReal[1] = val.g;
121  mBaseValueReal[2] = val.b;
122  mBaseValueReal[3] = val.a;
123  }
125  virtual void setAsBaseValue(const Radian& val)
126  {
127  mBaseValueReal[0] = val.valueRadians();
128  }
130  virtual void setAsBaseValue(const Degree& val)
131  {
132  mBaseValueReal[0] = val.valueRadians();
133  }
134 
135 
136  public:
137  AnimableValue(ValueType t) : mType(t) {}
138  virtual ~AnimableValue() {}
139 
141  ValueType getType(void) const { return mType; }
142 
144  virtual void setCurrentStateAsBaseValue(void) = 0;
145 
147  virtual void setValue(int) {
149  }
151  virtual void setValue(Real) {
153  }
155  virtual void setValue(const Vector2&) {
157  }
159  virtual void setValue(const Vector3&) {
161  }
163  virtual void setValue(const Vector4&) {
165  }
167  virtual void setValue(const Quaternion&) {
169  }
171  virtual void setValue(const ColourValue&) {
173  }
175  virtual void setValue(const Radian&) {
177  }
179  virtual void setValue(const Degree&) {
181  }
183  virtual void setValue(const Any& val);
184 
185  // reset to base value
186  virtual void resetToBaseValue(void);
187 
189  virtual void applyDeltaValue(int) {
191  }
193  virtual void applyDeltaValue(Real) {
195  }
197  virtual void applyDeltaValue(const Vector2&) {
199  }
201  virtual void applyDeltaValue(const Vector3&) {
203  }
205  virtual void applyDeltaValue(const Vector4&) {
207  }
209  virtual void applyDeltaValue(const Quaternion&) {
211  }
213  virtual void applyDeltaValue(const ColourValue&) {
215  }
217  virtual void applyDeltaValue(const Degree&) {
219  }
221  virtual void applyDeltaValue(const Radian&) {
223  }
225  virtual void applyDeltaValue(const Any& val);
226 
227 
228  };
229 
231 
232 
233 
238  {
239  protected:
248  virtual const String& getAnimableDictionaryName(void) const
249  { return StringUtil::BLANK; }
253  void createAnimableDictionary(void) const
254  {
255  if (msAnimableDictionary.find(getAnimableDictionaryName())
256  == msAnimableDictionary.end())
257  {
258  StringVector vec;
259  initialiseAnimableDictionary(vec);
260  msAnimableDictionary[getAnimableDictionaryName()] = vec;
261  }
262 
263  }
264 
267  {
268  AnimableDictionaryMap::iterator i =
269  msAnimableDictionary.find(getAnimableDictionaryName());
270  if (i != msAnimableDictionary.end())
271  {
272  return i->second;
273  }
274  else
275  {
277  "Animable value list not found for " + getAnimableDictionaryName(),
278  "AnimableObject::getAnimableValueNames");
279  }
280 
281  }
282 
287 
288 
289  public:
291  virtual ~AnimableObject() {}
292 
295  {
296  createAnimableDictionary();
297 
298  AnimableDictionaryMap::iterator i =
299  msAnimableDictionary.find(getAnimableDictionaryName());
300  if (i != msAnimableDictionary.end())
301  {
302  return i->second;
303  }
304  else
305  {
307  "Animable value list not found for " + getAnimableDictionaryName(),
308  "AnimableObject::getAnimableValueNames");
309  }
310 
311  }
312 
319  virtual AnimableValuePtr createAnimableValue(const String& valueName)
320  {
322  "No animable value named '" + valueName + "' present.",
323  "AnimableObject::createAnimableValue");
324  }
325 
326 
327 
328  };
329 
333 }
334 #endif
335 
virtual void setValue(Real)
Set value.
Definition: OgreAnimable.h:151
Real * ptr()
Pointer accessor for direct copying.
virtual void setAsBaseValue(const Radian &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:125
virtual void applyDeltaValue(const Vector4 &)
Apply delta value.
Definition: OgreAnimable.h:205
float Real
Software floating point type.
virtual void setAsBaseValue(int val)
Internal method to set a value as base.
Definition: OgreAnimable.h:99
Defines an object property which is animable, i.e.
Definition: OgreAnimable.h:71
#define _OgreExport
Definition: OgrePlatform.h:203
Variant type that can hold Any other type.
Definition: OgreAny.h:56
virtual ~AnimableObject()
Definition: OgreAnimable.h:291
SharedPtr< AnimableValue > AnimableValuePtr
Definition: OgreAnimable.h:230
virtual void applyDeltaValue(const ColourValue &)
Apply delta value.
Definition: OgreAnimable.h:213
virtual void applyDeltaValue(const Vector3 &)
Apply delta value.
Definition: OgreAnimable.h:201
Class representing colour.
virtual void initialiseAnimableDictionary(StringVector &) const
Internal method for initialising dictionary; should be implemented by subclasses wanting to expose an...
Definition: OgreAnimable.h:286
Real valueRadians() const
Definition: OgreMath.h:613
virtual void setValue(const Quaternion &)
Set value.
Definition: OgreAnimable.h:167
virtual void setValue(const Degree &)
Set value.
Definition: OgreAnimable.h:179
virtual void setValue(const Vector2 &)
Set value.
Definition: OgreAnimable.h:155
virtual void setValue(const Vector3 &)
Set value.
Definition: OgreAnimable.h:159
Defines an interface to classes which have one or more AnimableValue instances to expose...
Definition: OgreAnimable.h:237
virtual void setValue(const Radian &)
Set value.
Definition: OgreAnimable.h:175
virtual AnimableValuePtr createAnimableValue(const String &valueName)
Create a reference-counted AnimableValuePtr for the named value.
Definition: OgreAnimable.h:319
const StringVector & getAnimableValueNames(void) const
Gets a list of animable value names for this object.
Definition: OgreAnimable.h:294
Real * ptr()
Pointer accessor for direct copying.
Definition: OgreVector3.h:116
Implementation of a Quaternion, i.e.
ValueType mType
Value type.
Definition: OgreAnimable.h:89
Real * ptr()
Pointer accessor for direct copying.
Definition: OgreVector4.h:119
map< String, StringVector >::type AnimableDictionaryMap
Definition: OgreAnimable.h:240
virtual void applyDeltaValue(const Degree &)
Apply delta value.
Definition: OgreAnimable.h:217
ValueType getType(void) const
Gets the value type of this animable value.
Definition: OgreAnimable.h:141
virtual void setAsBaseValue(const ColourValue &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:117
virtual void applyDeltaValue(const Radian &)
Apply delta value.
Definition: OgreAnimable.h:221
virtual void applyDeltaValue(Real)
Set value.
Definition: OgreAnimable.h:193
virtual void setAsBaseValue(const Vector2 &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:103
StringVector & _getAnimableValueNames(void)
Get an updateable reference to animable value list.
Definition: OgreAnimable.h:266
ValueType
The type of the value being animated.
Definition: OgreAnimable.h:75
#define OGRE_EXCEPT(num, desc, src)
Superclass for all objects that wish to use custom memory allocators when their new / delete operator...
Standard 2-dimensional vector.
Definition: OgreVector2.h:51
Wrapper class which indicates a given angle value is in Degrees.
Definition: OgreMath.h:97
vector< String >::type StringVector
virtual void applyDeltaValue(const Vector2 &)
Apply delta value.
Definition: OgreAnimable.h:197
virtual void setValue(const Vector4 &)
Set value.
Definition: OgreAnimable.h:163
Real valueRadians() const
Definition: OgreMath.h:58
virtual void setAsBaseValue(Real val)
Internal method to set a value as base.
Definition: OgreAnimable.h:101
virtual const String & getAnimableDictionaryName(void) const
Get the name of the animable dictionary for this class.
Definition: OgreAnimable.h:248
virtual void setAsBaseValue(const Vector3 &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:106
Standard 3-dimensional vector.
Definition: OgreVector3.h:51
std::map< K, V, P, A > type
virtual void setAsBaseValue(const Quaternion &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:112
static const String BLANK
Constant blank string, useful for returning by ref where local does not exist.
Definition: OgreString.h:180
virtual ~AnimableValue()
Definition: OgreAnimable.h:138
AnimableValue(ValueType t)
Definition: OgreAnimable.h:137
static AnimableDictionaryMap msAnimableDictionary
Static map of class name to list of animable value names.
Definition: OgreAnimable.h:242
Wrapper class which indicates a given angle value is in Radians.
Definition: OgreMath.h:46
virtual void setValue(const ColourValue &)
Set value.
Definition: OgreAnimable.h:171
_StringBase String
virtual void applyDeltaValue(const Quaternion &)
Apply delta value.
Definition: OgreAnimable.h:209
virtual void applyDeltaValue(int)
Apply delta value.
Definition: OgreAnimable.h:189
4-dimensional homogeneous vector.
Definition: OgreVector4.h:45
void createAnimableDictionary(void) const
Internal method for creating a dictionary of animable value names for the class, if it does not alrea...
Definition: OgreAnimable.h:253
Real * ptr()
Pointer accessor for direct copying.
Definition: OgreVector2.h:111
virtual void setAsBaseValue(const Vector4 &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:109
virtual void setAsBaseValue(const Degree &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:130
virtual void setValue(int)
Set value.
Definition: OgreAnimable.h:147