80427d5e94c7fa1fcfbef876a35163145cc55c5a.svn-base (1745B)
1 #ifndef ANIMATION_GRAPH_H 2 #define ANIMATION_GRAPH_H 3 4 #include "Utils.h" 5 #include "Console.h" 6 #include "Animation.h" 7 #include "Event.h" 8 9 class AnimGraphData 10 { 11 public: 12 13 AnimGraphData() {} 14 15 //AnimGraph(int* state) : mActorState(state) {} 16 17 AnimGraphData(AnimDataPack animdata) : mAnimData(animdata) {} 18 19 bool DefineLoop(int AnimID); 20 21 bool DefineTransitions(int AnimID); 22 23 bool CreateTranisitionMatrix(); //call only after all loops have been defined 24 25 bool PopulateTransitionMatrix(int initState, int targetState, int transitionID); 26 27 int GetLoopIDIndex(int index) 28 { 29 return mLoopsAnimIDs.at(index); 30 } 31 32 AnimDataPack* GetAnimData() 33 { 34 return &mAnimData; 35 } 36 37 int GetH() 38 { 39 return mAnimData.GetFrameH(); 40 } 41 42 int GetW() 43 { 44 return mAnimData.GetFrameW(); 45 } 46 47 std::vector<int> mLoopsAnimIDs; 48 49 std::vector<int> mTransitionsAnimIDs; 50 int** mTransitionMatrix; 51 52 protected: 53 54 AnimDataPack mAnimData; 55 56 }; 57 #endif 58 59 class AnimGraph : public EventReceiver 60 { 61 public: 62 63 AnimGraph() {}; 64 65 AnimGraph(AnimGraphData* AGD) 66 { 67 mAGD = AGD; 68 mAnimPack = AnimPack(mAGD->GetAnimData()); 69 70 for (int i = 0; i < (int)mAGD->mTransitionsAnimIDs.size(); i++) 71 { 72 mAnimPack.GetAnimation(mAGD->mTransitionsAnimIDs.at(i))->mFeed.Subscribe(this); 73 } 74 } 75 76 void GiveActorState(int* state) 77 { 78 mActorState = state; 79 mState = *mActorState; 80 } 81 82 int GetTransitionID(int initState, int targetState); 83 84 Frame* UpdateAnimation(); 85 86 Frame* PlayOnce(int AnimID); 87 88 bool EventProcess(Event eve); 89 90 AnimPack* GetAnimPack() 91 { 92 return &mAnimPack; 93 } 94 95 int GetH() 96 { 97 return mAGD->GetH(); 98 } 99 100 int GetW() 101 { 102 return mAGD->GetW(); 103 } 104 105 EventFeed mFeed; 106 107 protected: 108 109 AnimGraphData* mAGD; 110 AnimPack mAnimPack; 111 112 int* mActorState; 113 int mState; 114 115 Frame mCurrentFrame; 116 };