nuvanimator.h
Go to the documentation of this file.00001 #ifndef N_UVANIMATOR_H
00002 #define N_UVANIMATOR_H
00003
00017 #include "scene/nanimator.h"
00018 #include "util/nanimkeyarray.h"
00019 #include "gfx2/ngfxserver2.h"
00020
00021
00022 class nUvAnimator : public nAnimator
00023 {
00024 public:
00026 nUvAnimator();
00028 virtual ~nUvAnimator();
00030 virtual bool SaveCmds(nPersistServer* ps);
00031
00033 virtual Type GetAnimatorType() const;
00035 virtual void Animate(nSceneNode* sceneNode, nRenderContext* renderContext);
00037 void AddPosKey(uint texLayer, float time, const vector2& key);
00039 void AddEulerKey(uint texLayer, float time, const vector3& key);
00041 void AddScaleKey(uint texLayer, float time, const vector2& key);
00043 int GetNumPosKeys(uint texLayer) const;
00045 void GetPosKeyAt(uint texLayer, uint keyIndex, float& time, vector2& key) const;
00047 int GetNumEulerKeys(uint texLayer) const;
00049 void GetEulerKeyAt(uint texLayer, uint keyIndex, float& time, vector3& key) const;
00051 int GetNumScaleKeys(uint texLayer) const;
00053 void GetScaleKeyAt(uint texLayer, uint keyIndex, float& time, vector2& key) const;
00054
00055 private:
00056 nAnimKeyArray<nAnimKey<vector2> > posArray[nGfxServer2::MaxTextureStages];
00057 nAnimKeyArray<nAnimKey<vector3> > eulerArray[nGfxServer2::MaxTextureStages];
00058 nAnimKeyArray<nAnimKey<vector2> > scaleArray[nGfxServer2::MaxTextureStages];
00059 };
00060
00061
00064 inline
00065 void
00066 nUvAnimator::AddPosKey(uint texLayer, float time, const vector2& key)
00067 {
00068 n_assert(texLayer < nGfxServer2::MaxTextureStages);
00069 nAnimKey<vector2> newKey(time, key);
00070 this->posArray[texLayer].Append(newKey);
00071 }
00072
00073
00077 inline
00078 void
00079 nUvAnimator::AddEulerKey(uint texLayer, float time, const vector3& key)
00080 {
00081 n_assert(texLayer < nGfxServer2::MaxTextureStages);
00082 nAnimKey<vector3> newKey(time, key);
00083 this->eulerArray[texLayer].Append(newKey);
00084 }
00085
00086
00089 inline
00090 void
00091 nUvAnimator::AddScaleKey(uint texLayer, float time, const vector2& key)
00092 {
00093 n_assert(texLayer < nGfxServer2::MaxTextureStages);
00094 nAnimKey<vector2> newKey(time, key);
00095 this->scaleArray[texLayer].Append(newKey);
00096 }
00097
00098
00101 inline
00102 int
00103 nUvAnimator::GetNumPosKeys(uint texLayer) const
00104 {
00105 n_assert(texLayer < nGfxServer2::MaxTextureStages);
00106 return this->posArray[texLayer].Size();
00107 }
00108
00109
00112 inline
00113 int
00114 nUvAnimator::GetNumEulerKeys(uint texLayer) const
00115 {
00116 n_assert(texLayer < nGfxServer2::MaxTextureStages);
00117 return this->eulerArray[texLayer].Size();
00118 }
00119
00120
00123 inline
00124 int
00125 nUvAnimator::GetNumScaleKeys(uint texLayer) const
00126 {
00127 n_assert(texLayer < nGfxServer2::MaxTextureStages);
00128 return this->scaleArray[texLayer].Size();
00129 }
00130
00131
00140 inline
00141 void
00142 nUvAnimator::GetPosKeyAt(uint texLayer, uint keyIndex, float& time, vector2& key) const
00143 {
00144 n_assert(texLayer < nGfxServer2::MaxTextureStages);
00145 const nAnimKey<vector2>& k = this->posArray[texLayer][keyIndex];
00146 time = k.GetTime();
00147 key = k.GetValue();
00148 }
00149
00150
00161 inline
00162 void
00163 nUvAnimator::GetEulerKeyAt(uint texLayer, uint keyIndex, float& time, vector3& key) const
00164 {
00165 n_assert(texLayer < nGfxServer2::MaxTextureStages);
00166 const nAnimKey<vector3>& k = this->eulerArray[texLayer][keyIndex];
00167 time = k.GetTime();
00168 key = k.GetValue();
00169 }
00170
00171
00180 inline
00181 void
00182 nUvAnimator::GetScaleKeyAt(uint texLayer, uint keyIndex, float& time, vector2& key) const
00183 {
00184 n_assert(texLayer < nGfxServer2::MaxTextureStages);
00185 const nAnimKey<vector2>& k = this->scaleArray[texLayer][keyIndex];
00186 time = k.GetTime();
00187 key = k.GetValue();
00188 }
00189
00190 #endif
00191