19class AnmObj :
public G3dObj {
20 NW4R_G3D_RTTI_DECL_DERIVED(AnmObj, G3dObj);
24 FLAG_NEED_UPDATE = (1 << 0),
25 FLAG_CACHE_OBSOLETE = (1 << 1),
26 FLAG_ANM_BOUND = (1 << 2),
27 FLAG_USE_QUATERNION_ROTATION_BLEND = (1 << 3),
28 FLAG_USE_ACCURATE_SCALE_BLEND = (1 << 4)
33 : G3dObj(pAllocator, pParent), mFlags(0) {}
35 virtual void G3dProc(ulong task, ulong param,
void* pInfo) = 0;
38 virtual void SetFrame(f32 frame) = 0;
39 virtual f32 GetFrame()
const = 0;
40 virtual void UpdateFrame() = 0;
42 virtual void SetUpdateRate(f32 rate) = 0;
43 virtual f32 GetUpdateRate()
const = 0;
45 virtual bool Bind(
const ResMdl mdl) = 0;
46 virtual void Release();
48 void SetAnmFlag(AnmFlag flag,
bool value);
49 bool TestAnmFlag(AnmFlag flag)
const;
51 bool IsBound()
const {
52 return TestAnmFlag(FLAG_ANM_BOUND);
82 FrameCtrl(f32 start, f32 end, PlayPolicyFunc pPolicy)
87 mpPlayPolicy(pPolicy) {}
92 void SetFrm(f32 frame) {
93 mFrame = mpPlayPolicy(mStartFrame, mEndFrame, frame);
96 SetFrm(mUpdateRate * smBaseUpdateRate + mFrame);
102 void SetRate(f32 rate) {
106 void SetPlayPolicy(PlayPolicyFunc func) {
115 PlayPolicyFunc mpPlayPolicy;
117 static f32 smBaseUpdateRate;