OGRE  1.8
Object-Oriented Graphics Rendering Engine
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties 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-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 
virtual void setValue(Real)
Set value.
Definition: OgreAnimable.h:152
Real * ptr()
Pointer accessor for direct copying.
virtual void setAsBaseValue(const Radian &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:126
virtual void applyDeltaValue(const Vector4 &)
Apply delta value.
Definition: OgreAnimable.h:206
float Real
Software floating point type.
virtual void setAsBaseValue(int val)
Internal method to set a value as base.
Definition: OgreAnimable.h:100
Defines an object property which is animable, i.e.
Definition: OgreAnimable.h:72
#define _OgreExport
Definition: OgrePlatform.h:233
Variant type that can hold Any other type.
Definition: OgreAny.h:56
virtual ~AnimableObject()
Definition: OgreAnimable.h:292
SharedPtr< AnimableValue > AnimableValuePtr
Definition: OgreAnimable.h:231
virtual void applyDeltaValue(const ColourValue &)
Apply delta value.
Definition: OgreAnimable.h:214
virtual void applyDeltaValue(const Vector3 &)
Apply delta value.
Definition: OgreAnimable.h:202
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:287
Real valueRadians() const
Definition: OgreMath.h:700
virtual void setValue(const Quaternion &)
Set value.
Definition: OgreAnimable.h:168
virtual void setValue(const Degree &)
Set value.
Definition: OgreAnimable.h:180
virtual void setValue(const Vector2 &)
Set value.
Definition: OgreAnimable.h:156
virtual void setValue(const Vector3 &)
Set value.
Definition: OgreAnimable.h:160
Defines an interface to classes which have one or more AnimableValue instances to expose...
Definition: OgreAnimable.h:238
virtual void setValue(const Radian &)
Set value.
Definition: OgreAnimable.h:176
virtual AnimableValuePtr createAnimableValue(const String &valueName)
Create a reference-counted AnimableValuePtr for the named value.
Definition: OgreAnimable.h:320
const StringVector & getAnimableValueNames(void) const
Gets a list of animable value names for this object.
Definition: OgreAnimable.h:295
Real * ptr()
Pointer accessor for direct copying.
Definition: OgreVector3.h:116
Implementation of a Quaternion, i.e.
ValueType mType
Value type.
Definition: OgreAnimable.h:90
Real * ptr()
Pointer accessor for direct copying.
Definition: OgreVector4.h:119
map< String, StringVector >::type AnimableDictionaryMap
Definition: OgreAnimable.h:241
virtual void applyDeltaValue(const Degree &)
Apply delta value.
Definition: OgreAnimable.h:218
ValueType getType(void) const
Gets the value type of this animable value.
Definition: OgreAnimable.h:142
virtual void setAsBaseValue(const ColourValue &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:118
virtual void applyDeltaValue(const Radian &)
Apply delta value.
Definition: OgreAnimable.h:222
virtual void applyDeltaValue(Real)
Set value.
Definition: OgreAnimable.h:194
virtual void setAsBaseValue(const Vector2 &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:104
StringVector & _getAnimableValueNames(void)
Get an updateable reference to animable value list.
Definition: OgreAnimable.h:267
ValueType
The type of the value being animated.
Definition: OgreAnimable.h:76
#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:198
virtual void setValue(const Vector4 &)
Set value.
Definition: OgreAnimable.h:164
Real valueRadians() const
Definition: OgreMath.h:58
virtual void setAsBaseValue(Real val)
Internal method to set a value as base.
Definition: OgreAnimable.h:102
virtual const String & getAnimableDictionaryName(void) const
Get the name of the animable dictionary for this class.
Definition: OgreAnimable.h:249
virtual void setAsBaseValue(const Vector3 &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:107
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:113
static const String BLANK
Constant blank string, useful for returning by ref where local does not exist.
Definition: OgreString.h:196
virtual ~AnimableValue()
Definition: OgreAnimable.h:139
AnimableValue(ValueType t)
Definition: OgreAnimable.h:138
static AnimableDictionaryMap msAnimableDictionary
Static map of class name to list of animable value names.
Definition: OgreAnimable.h:243
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:172
_StringBase String
virtual void applyDeltaValue(const Quaternion &)
Apply delta value.
Definition: OgreAnimable.h:210
virtual void applyDeltaValue(int)
Apply delta value.
Definition: OgreAnimable.h:190
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:254
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:110
virtual void setAsBaseValue(const Degree &val)
Internal method to set a value as base.
Definition: OgreAnimable.h:131
virtual void setValue(int)
Set value.
Definition: OgreAnimable.h:148