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-2013 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 #include "OgreHeaderPrefix.h"
42 
43 namespace Ogre {
73  {
74  public:
76  enum ValueType
77  {
78  INT,
86  DEGREE
87  };
88  protected:
91 
93  union
94  {
96  Real mBaseValueReal[4];
97  };
98 
100  virtual void setAsBaseValue(int val) { mBaseValueInt = val; }
102  virtual void setAsBaseValue(Real val) { mBaseValueReal[0] = val; }
104  virtual void setAsBaseValue(const Vector2& val)
105  { memcpy(mBaseValueReal, val.ptr(), sizeof(Real)*2); }
107  virtual void setAsBaseValue(const Vector3& val)
108  { memcpy(mBaseValueReal, val.ptr(), sizeof(Real)*3); }
110  virtual void setAsBaseValue(const Vector4& val)
111  { memcpy(mBaseValueReal, val.ptr(), sizeof(Real)*4); }
113  virtual void setAsBaseValue(const Quaternion& val)
114  { memcpy(mBaseValueReal, val.ptr(), sizeof(Real)*4); }
116  virtual void setAsBaseValue(const Any& val);
118  virtual void setAsBaseValue(const ColourValue& val)
119  {
120  mBaseValueReal[0] = val.r;
121  mBaseValueReal[1] = val.g;
122  mBaseValueReal[2] = val.b;
123  mBaseValueReal[3] = val.a;
124  }
126  virtual void setAsBaseValue(const Radian& val)
127  {
128  mBaseValueReal[0] = val.valueRadians();
129  }
131  virtual void setAsBaseValue(const Degree& val)
132  {
133  mBaseValueReal[0] = val.valueRadians();
134  }
135 
136 
137  public:
138  AnimableValue(ValueType t) : mType(t) {}
139  virtual ~AnimableValue() {}
140 
142  ValueType getType(void) const { return mType; }
143 
145  virtual void setCurrentStateAsBaseValue(void) = 0;
146 
148  virtual void setValue(int) {
150  }
152  virtual void setValue(Real) {
154  }
156  virtual void setValue(const Vector2&) {
158  }
160  virtual void setValue(const Vector3&) {
162  }
164  virtual void setValue(const Vector4&) {
166  }
168  virtual void setValue(const Quaternion&) {
170  }
172  virtual void setValue(const ColourValue&) {
174  }
176  virtual void setValue(const Radian&) {
178  }
180  virtual void setValue(const Degree&) {
182  }
184  virtual void setValue(const Any& val);
185 
186  // reset to base value
187  virtual void resetToBaseValue(void);
188 
190  virtual void applyDeltaValue(int) {
192  }
194  virtual void applyDeltaValue(Real) {
196  }
198  virtual void applyDeltaValue(const Vector2&) {
200  }
202  virtual void applyDeltaValue(const Vector3&) {
204  }
206  virtual void applyDeltaValue(const Vector4&) {
208  }
210  virtual void applyDeltaValue(const Quaternion&) {
212  }
214  virtual void applyDeltaValue(const ColourValue&) {
216  }
218  virtual void applyDeltaValue(const Degree&) {
220  }
222  virtual void applyDeltaValue(const Radian&) {
224  }
226  virtual void applyDeltaValue(const Any& val);
227 
228 
229  };
230 
232 
233 
234 
239  {
240  protected:
249  virtual const String& getAnimableDictionaryName(void) const
250  { return StringUtil::BLANK; }
254  void createAnimableDictionary(void) const
255  {
256  if (msAnimableDictionary.find(getAnimableDictionaryName())
257  == msAnimableDictionary.end())
258  {
259  StringVector vec;
260  initialiseAnimableDictionary(vec);
261  msAnimableDictionary[getAnimableDictionaryName()] = vec;
262  }
263 
264  }
265 
268  {
269  AnimableDictionaryMap::iterator i =
270  msAnimableDictionary.find(getAnimableDictionaryName());
271  if (i != msAnimableDictionary.end())
272  {
273  return i->second;
274  }
275  else
276  {
278  "Animable value list not found for " + getAnimableDictionaryName(),
279  "AnimableObject::getAnimableValueNames");
280  }
281 
282  }
283 
288 
289 
290  public:
292  virtual ~AnimableObject() {}
293 
296  {
297  createAnimableDictionary();
298 
299  AnimableDictionaryMap::iterator i =
300  msAnimableDictionary.find(getAnimableDictionaryName());
301  if (i != msAnimableDictionary.end())
302  {
303  return i->second;
304  }
305  else
306  {
308  "Animable value list not found for " + getAnimableDictionaryName(),
309  "AnimableObject::getAnimableValueNames");
310  }
311 
312  }
313 
320  virtual AnimableValuePtr createAnimableValue(const String& valueName)
321  {
323  "No animable value named '" + valueName + "' present.",
324  "AnimableObject::createAnimableValue");
325  }
326 
327 
328 
329  };
330 
334 }
335 
336 #include "OgreHeaderSuffix.h"
337 
338 #endif
339 
OgreSharedPtr.h
OgreHeaderSuffix.h
Ogre::AnimableValue::setValue
virtual void setValue(const Vector2 &)
Set value.
Definition: OgreAnimable.h:156
Ogre::AnimableValue::applyDeltaValue
virtual void applyDeltaValue(const Vector4 &)
Apply delta value.
Definition: OgreAnimable.h:206
Ogre::AnimableObject::_getAnimableValueNames
StringVector & _getAnimableValueNames(void)
Get an updateable reference to animable value list.
Definition: OgreAnimable.h:267
OgreVector4.h
Ogre::Radian::valueRadians
Real valueRadians() const
Definition: OgreMath.h:59
Ogre::AllocatedObject
Superclass for all objects that wish to use custom memory allocators when their new / delete operator...
Definition: OgreMemoryAllocatedObject.h:58
Ogre
Definition: OgreAndroidLogListener.h:34
Ogre::AnimableValue::RADIAN
Definition: OgreAnimable.h:85
Ogre::AnimableValue::AnimableValue
AnimableValue(ValueType t)
Definition: OgreAnimable.h:138
Ogre::AnimableValue::applyDeltaValue
virtual void applyDeltaValue(const Radian &)
Apply delta value.
Definition: OgreAnimable.h:222
Ogre::StringVector
vector< String >::type StringVector
Definition: OgreStringVector.h:45
OgreAny.h
Ogre::AnimableValue
Defines an object property which is animable, i.e.
Definition: OgreAnimable.h:72
Ogre::AnimableValue::COLOUR
Definition: OgreAnimable.h:84
Ogre::AnimableValue::applyDeltaValue
virtual void applyDeltaValue(const Vector2 &)
Apply delta value.
Definition: OgreAnimable.h:198
Ogre::AnimableValue::setValue
virtual void setValue(const Quaternion &)
Set value.
Definition: OgreAnimable.h:168
OgreQuaternion.h
Ogre::Vector2::ptr
Real * ptr()
Pointer accessor for direct copying.
Definition: OgreVector2.h:115
OgreException.h
Ogre::Any
Variant type that can hold Any other type.
Definition: OgreAny.h:56
Ogre::AnimableObject::~AnimableObject
virtual ~AnimableObject()
Definition: OgreAnimable.h:292
Ogre::AnimableValue::applyDeltaValue
virtual void applyDeltaValue(Real)
Set value.
Definition: OgreAnimable.h:194
Ogre::AnimableValue::setAsBaseValue
virtual void setAsBaseValue(int val)
Internal method to set a value as base.
Definition: OgreAnimable.h:100
Ogre::AnimableValue::mBaseValueInt
int mBaseValueInt
Definition: OgreAnimable.h:95
Ogre::AnimableObject::AnimableDictionaryMap
map< String, StringVector >::type AnimableDictionaryMap
Definition: OgreAnimable.h:241
Ogre::AnimableValue::VECTOR2
Definition: OgreAnimable.h:80
Ogre::String
_StringBase String
Definition: OgrePrerequisites.h:439
Ogre::AnimableObject::msAnimableDictionary
static AnimableDictionaryMap msAnimableDictionary
Static map of class name to list of animable value names.
Definition: OgreAnimable.h:243
Ogre::AnimableObject::createAnimableDictionary
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:254
Ogre::Vector3::ptr
Real * ptr()
Pointer accessor for direct copying.
Definition: OgreVector3.h:120
Ogre::AnimableValue::applyDeltaValue
virtual void applyDeltaValue(const ColourValue &)
Apply delta value.
Definition: OgreAnimable.h:214
Ogre::AnimableValue::applyDeltaValue
virtual void applyDeltaValue(const Quaternion &)
Apply delta value.
Definition: OgreAnimable.h:210
Ogre::Vector4::ptr
Real * ptr()
Pointer accessor for direct copying.
Definition: OgreVector4.h:123
Ogre::AnimableValue::setAsBaseValue
virtual void setAsBaseValue(const Radian &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:126
Ogre::ColourValue::b
float b
Definition: OgreColourValue.h:76
Ogre::AnimableValue::setValue
virtual void setValue(const Degree &)
Set value.
Definition: OgreAnimable.h:180
Ogre::ColourValue::a
float a
Definition: OgreColourValue.h:76
Ogre::Degree
Wrapper class which indicates a given angle value is in Degrees.
Definition: OgreMath.h:98
Ogre::Quaternion
Implementation of a Quaternion, i.e.
Definition: OgreQuaternion.h:57
Ogre::AnimableValue::setAsBaseValue
virtual void setAsBaseValue(const Vector3 &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:107
Ogre::AnimableValue::INT
Definition: OgreAnimable.h:78
Ogre::StringUtil::BLANK
static const String BLANK
Constant blank string, useful for returning by ref where local does not exist.
Definition: OgreString.h:196
Ogre::AnimableValue::setAsBaseValue
virtual void setAsBaseValue(const Quaternion &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:113
OgreHeaderPrefix.h
Ogre::AnimableObject::AnimableObject
AnimableObject()
Definition: OgreAnimable.h:291
Ogre::AnimableValue::applyDeltaValue
virtual void applyDeltaValue(const Degree &)
Apply delta value.
Definition: OgreAnimable.h:218
OgrePrerequisites.h
Ogre::AnimableValue::setValue
virtual void setValue(const Vector4 &)
Set value.
Definition: OgreAnimable.h:164
Ogre::AnimableObject
Defines an interface to classes which have one or more AnimableValue instances to expose.
Definition: OgreAnimable.h:238
Ogre::Radian
Wrapper class which indicates a given angle value is in Radians.
Definition: OgreMath.h:47
Ogre::AnimableValue::setValue
virtual void setValue(const Radian &)
Set value.
Definition: OgreAnimable.h:176
Ogre::AnimableObject::createAnimableValue
virtual AnimableValuePtr createAnimableValue(const String &valueName)
Create a reference-counted AnimableValuePtr for the named value.
Definition: OgreAnimable.h:320
Ogre::Exception::ERR_ITEM_NOT_FOUND
Definition: OgreException.h:106
Ogre::Quaternion::ptr
Real * ptr()
Pointer accessor for direct copying.
Definition: OgreQuaternion.h:125
Ogre::Exception::ERR_NOT_IMPLEMENTED
Definition: OgreException.h:110
Ogre::AnimableValue::~AnimableValue
virtual ~AnimableValue()
Definition: OgreAnimable.h:139
_OgreExport
#define _OgreExport
Definition: OgrePlatform.h:257
Ogre::AnimableValue::setValue
virtual void setValue(const Vector3 &)
Set value.
Definition: OgreAnimable.h:160
Ogre::AnimableValue::setValue
virtual void setValue(const ColourValue &)
Set value.
Definition: OgreAnimable.h:172
Ogre::AnimableValue::setAsBaseValue
virtual void setAsBaseValue(const ColourValue &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:118
Ogre::Degree::valueRadians
Real valueRadians() const
Definition: OgreMath.h:727
Ogre::AnimableValue::QUATERNION
Definition: OgreAnimable.h:83
Ogre::SharedPtr< AnimableValue >
Ogre::map::type
std::map< K, V, P, A > type
Definition: OgrePrerequisites.h:536
Ogre::AnimableObject::getAnimableValueNames
const StringVector & getAnimableValueNames(void) const
Gets a list of animable value names for this object.
Definition: OgreAnimable.h:295
OgreColourValue.h
Ogre::ColourValue
Class representing colour.
Definition: OgreColourValue.h:57
Ogre::Vector4
4-dimensional homogeneous vector.
Definition: OgreVector4.h:45
Ogre::Vector2
Standard 2-dimensional vector.
Definition: OgreVector2.h:51
Ogre::AnimableValuePtr
SharedPtr< AnimableValue > AnimableValuePtr
Definition: OgreAnimable.h:231
Ogre::AnimableObject::initialiseAnimableDictionary
virtual void initialiseAnimableDictionary(StringVector &) const
Internal method for initialising dictionary; should be implemented by subclasses wanting to expose an...
Definition: OgreAnimable.h:287
Ogre::AnimableValue::ValueType
ValueType
The type of the value being animated.
Definition: OgreAnimable.h:76
OgreVector2.h
Ogre::ColourValue::g
float g
Definition: OgreColourValue.h:76
Ogre::AnimableValue::VECTOR4
Definition: OgreAnimable.h:82
Ogre::AnimableValue::setAsBaseValue
virtual void setAsBaseValue(const Vector2 &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:104
Ogre::Real
float Real
Software floating point type.
Definition: OgrePrerequisites.h:70
Ogre::AnimableValue::setAsBaseValue
virtual void setAsBaseValue(const Degree &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:131
Ogre::AnimableValue::REAL
Definition: OgreAnimable.h:79
Ogre::AnimableValue::applyDeltaValue
virtual void applyDeltaValue(int)
Apply delta value.
Definition: OgreAnimable.h:190
Ogre::ColourValue::r
float r
Definition: OgreColourValue.h:76
OGRE_EXCEPT
#define OGRE_EXCEPT(num, desc, src)
Definition: OgreException.h:334
Ogre::AnimableValue::setValue
virtual void setValue(Real)
Set value.
Definition: OgreAnimable.h:152
OgreStringVector.h
Ogre::AnimableValue::setAsBaseValue
virtual void setAsBaseValue(Real val)
Internal method to set a value as base.
Definition: OgreAnimable.h:102
Ogre::AnimableValue::getType
ValueType getType(void) const
Gets the value type of this animable value.
Definition: OgreAnimable.h:142
Ogre::AnimableValue::setValue
virtual void setValue(int)
Set value.
Definition: OgreAnimable.h:148
OgreVector3.h
Ogre::AnimableValue::applyDeltaValue
virtual void applyDeltaValue(const Vector3 &)
Apply delta value.
Definition: OgreAnimable.h:202
Ogre::Vector3
Standard 3-dimensional vector.
Definition: OgreVector3.h:51
Ogre::AnimableValue::VECTOR3
Definition: OgreAnimable.h:81
Ogre::AnimableValue::mType
ValueType mType
Value type.
Definition: OgreAnimable.h:90
Ogre::AnimableObject::getAnimableDictionaryName
virtual const String & getAnimableDictionaryName(void) const
Get the name of the animable dictionary for this class.
Definition: OgreAnimable.h:249
Ogre::AnimableValue::setAsBaseValue
virtual void setAsBaseValue(const Vector4 &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:110

Copyright © 2012 Torus Knot Software Ltd
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.