All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
SceneModelNodeIndexedAnimatedProperty.h
1 // Copyright eeGeo Ltd (2012-2014), All Rights Reserved
2 
3 #pragma once
4 
5 #include "ISceneModelNodeAnimatedProperty.h"
6 #include "VectorMath.h"
7 #include <vector>
8 
9 namespace Eegeo
10 {
11  namespace Rendering
12  {
13  namespace SceneModels
14  {
15  template <class TProperty>
17  {
18  public:
19 
20  SceneModelNodeIndexedAnimatedProperty(std::vector<TProperty>& properties, std::vector<u32>& indices)
21  : m_properties(properties)
22  , m_indices(indices)
23  {
24  }
25 
26  void GetPropertyForFrame(u32 frame, TProperty& out_property) const
27  {
28  frame = frame % (u32)m_indices.size(); //Clamp<u32>(frame, 0, (u32)m_indices.size()-1);
29  const u32& index = m_indices.at(frame);
30  out_property = m_properties.at(index);
31  }
32 
34  {
35  return Eegeo_NEW(SceneModelNodeIndexedAnimatedProperty<TProperty>)(*this);
36  }
37 
38  protected:
39 
41  : m_properties(source.m_properties)
42  , m_indices(source.m_indices)
43  {
44  }
45 
46  std::vector<TProperty> m_properties;
47  std::vector<u32> m_indices;
48  };
49  }
50  }
51 }