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:
243  static AnimableDictionaryMap msAnimableDictionary;
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 
virtual const String & getAnimableDictionaryName(void) const
Get the name of the animable dictionary for this class.
Definition: OgreAnimable.h:249
Real * ptr()
Pointer accessor for direct copying.
Definition: OgreVector3.h:120
virtual void setValue(const Vector2 &)
Set value.
Definition: OgreAnimable.h:156
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
virtual void setAsBaseValue(const Vector3 &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:107
#define _OgreExport
Definition: OgrePlatform.h:257
virtual void setAsBaseValue(const Quaternion &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:113
virtual AnimableValuePtr createAnimableValue(const String &valueName)
Create a reference-counted AnimableValuePtr for the named value.
Definition: OgreAnimable.h:320
Defines an object property which is animable, i.e.
Definition: OgreAnimable.h:72
virtual void setAsBaseValue(const Vector2 &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:104
Real * ptr()
Pointer accessor for direct copying.
virtual void setAsBaseValue(int val)
Internal method to set a value as base.
Definition: OgreAnimable.h:100
virtual void setValue(const Vector3 &)
Set value.
Definition: OgreAnimable.h:160
Implementation of a Quaternion, i.e.
4-dimensional homogeneous vector.
Definition: OgreVector4.h:45
virtual void applyDeltaValue(const Radian &)
Apply delta value.
Definition: OgreAnimable.h:222
Standard 2-dimensional vector.
Definition: OgreVector2.h:51
Class representing colour.
float Real
Software floating point type.
vector< String >::type StringVector
virtual void setValue(const Radian &)
Set value.
Definition: OgreAnimable.h:176
virtual void initialiseAnimableDictionary(StringVector &) const
Internal method for initialising dictionary; should be implemented by subclasses wanting to expose an...
Definition: OgreAnimable.h:287
Real valueRadians() const
Definition: OgreMath.h:59
virtual void setValue(const ColourValue &)
Set value.
Definition: OgreAnimable.h:172
virtual void setValue(const Degree &)
Set value.
Definition: OgreAnimable.h:180
virtual void applyDeltaValue(const Degree &)
Apply delta value.
Definition: OgreAnimable.h:218
virtual void applyDeltaValue(const Vector2 &)
Apply delta value.
Definition: OgreAnimable.h:198
virtual void applyDeltaValue(const Quaternion &)
Apply delta value.
Definition: OgreAnimable.h:210
Variant type that can hold Any other type.
Definition: OgreAny.h:56
virtual void setValue(const Vector4 &)
Set value.
Definition: OgreAnimable.h:164
virtual void applyDeltaValue(const ColourValue &)
Apply delta value.
Definition: OgreAnimable.h:214
const StringVector & getAnimableValueNames(void) const
Gets a list of animable value names for this object.
Definition: OgreAnimable.h:295
ValueType getType(void) const
Gets the value type of this animable value.
Definition: OgreAnimable.h:142
virtual void setValue(int)
Set value.
Definition: OgreAnimable.h:148
Standard 3-dimensional vector.
Definition: OgreVector3.h:51
virtual void applyDeltaValue(const Vector3 &)
Apply delta value.
Definition: OgreAnimable.h:202
std::map< K, V, P, A > type
ValueType mType
Value type.
Definition: OgreAnimable.h:90
virtual void setAsBaseValue(const ColourValue &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:118
StringVector & _getAnimableValueNames(void)
Get an updateable reference to animable value list.
Definition: OgreAnimable.h:267
virtual ~AnimableValue()
Definition: OgreAnimable.h:139
virtual void setValue(const Quaternion &)
Set value.
Definition: OgreAnimable.h:168
virtual void setValue(Real)
Set value.
Definition: OgreAnimable.h:152
Real * ptr()
Pointer accessor for direct copying.
Definition: OgreVector2.h:115
_StringBase String
Defines an interface to classes which have one or more AnimableValue instances to expose...
Definition: OgreAnimable.h:238
Real valueRadians() const
Definition: OgreMath.h:727
ValueType
The type of the value being animated.
Definition: OgreAnimable.h:76
AnimableValue(ValueType t)
Definition: OgreAnimable.h:138
virtual void applyDeltaValue(Real)
Set value.
Definition: OgreAnimable.h:194
virtual ~AnimableObject()
Definition: OgreAnimable.h:292
Real * ptr()
Pointer accessor for direct copying.
Definition: OgreVector4.h:123
#define OGRE_EXCEPT(num, desc, src)
virtual void setAsBaseValue(Real val)
Internal method to set a value as base.
Definition: OgreAnimable.h:102
map< String, StringVector >::type AnimableDictionaryMap
Definition: OgreAnimable.h:241
static AnimableDictionaryMap msAnimableDictionary
Static map of class name to list of animable value names.
Definition: OgreAnimable.h:243
SharedPtr< AnimableValue > AnimableValuePtr
Definition: OgreAnimable.h:231
virtual void setAsBaseValue(const Radian &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:126
Wrapper class which indicates a given angle value is in Degrees.
Definition: OgreMath.h:98
virtual void applyDeltaValue(const Vector4 &)
Apply delta value.
Definition: OgreAnimable.h:206
virtual void setAsBaseValue(const Vector4 &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:110
static const String BLANK
Constant blank string, useful for returning by ref where local does not exist.
Definition: OgreString.h:196
Superclass for all objects that wish to use custom memory allocators when their new / delete operator...
virtual void setAsBaseValue(const Degree &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:131
Wrapper class which indicates a given angle value is in Radians.
Definition: OgreMath.h:47
virtual void applyDeltaValue(int)
Apply delta value.
Definition: OgreAnimable.h:190

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