My Project
BMaxAnimGenerator.h
1 #pragma once
2 #include "NPLHelper.h"
3 #include "NPLTable.h"
4 #include "ParaXModel/ParaXModel.h"
5 
6 namespace ParaEngine
7 {
8  class Bone;
9  class BMaxParser;
10 
11  //typedef int BoneIndex;
12  typedef string BoneName;
13  typedef string BoneFlag;
14 
15  struct BoneRotState
16  {
17  BoneRotState(float time,float angle){
18  this->time = time;
19  this->angle = angle;
20  }
21  //rot state
22  float angle;
23  float time;
24  };
25 
26  //struct BoneTransState
27  //{
28  // BoneTransState(float time, float angle){
29  // this->time = time;
30  // this->angle = angle;
31  // }
32  // //trans state
33  // float angle;
34  // float time;
35  //};
36 
37  //struct BoneScaleState
38  //{
39  // BoneScaleState(float time, float angle){
40  // this->time = time;
41  // this->angle = angle;
42  // }
43  // //scale state
44  // float angle;
45  // float time;
46  //};
47 
48  struct BoneState
49  {
50  public:
51  BoneState(){}
52  //rot state
53  vector<BoneRotState> boneRot;
54  //vector<BoneTransState> boneTrans;
55  //vector<BoneScaleState> boneScale;
56  };
57 
58  struct BoneInfo
59  {
60  BoneInfo(){}
61  // the bone is "leg","arm","wing","wheel"
62  string name;
63  // the flag of bone.
64  string flag;
65  //the bone position,"right","left","center"
66  string position;
67  int index;
68  float bx;
69  float by;
70  float bz;
71  };
72 
79  {
80  public:
82  BMaxAnimGenerator(BMaxParser *pParser);
84  public:
88  void ParseParameters(NPL::NPLObjectProxy& boneInfo, int boneIndex, string& boneName);
89  void FillAnimations();
90  ModelAnimation* FillWalkAnimation();
91  void FillAnimation(int nAnimID, int nStartTime, int nEndTime, float fMoveSpeed, bool bMoveForward);
92  void CountBonePosition(string boneName, BoneFlag boneFlag, const std::vector<BoneInfo>& boneInfos);
93  void UpdateBonePositionInfo();
94 
95  private:
96 
97  void InitBoneState();
98  bool CompareBonePosition(BoneInfo firstBone,BoneInfo secondBone);
99  bool GetBonePosition(int boneIndex);
100 
101  void AddBoneState(const string& boneName,const string& boneFlag,int animID,BoneState boneState);
102  void AddWheelBoneState();
103  void AddWalkBoneState();
104  void AddFlyBoneState();
105 
106  //Vector3 GetRotAxis(string boneName, string boneFlag, int animID, Vector3 boneAxis);
107  float GetBoneRotSign(const string& boneName, const string& boneFlag, const string& bonePosition, int animID, float boneAxisZ);
108 
109  private:
110  static std::map<pair<BoneName, BoneFlag>, std::map<int, BoneState>> s_boneStates;
111  static bool s_bInitedBoneState;
112 
113  BMaxParser *m_pParser;
114 
115  std::map<pair<BoneName, BoneFlag>, std::vector<BoneInfo>> m_boneInfoMap;
116  std::map<pair<BoneName, BoneFlag>, std::vector<int>> m_bonePositionInfoMap;
117 
118  bool m_bHasSetMaxMinPosition;
119  Vector3 m_vRightBonePosition;
120  Vector3 m_vLeftBonePosition;
121  };
122 }
Definition: BMaxAnimGenerator.h:15
NPL object proxy.
Definition: NPLTable.h:73
different physics engine has different winding order.
Definition: EventBinding.h:32
BMax Animation generator.
Definition: BMaxAnimGenerator.h:78
Standard 3-dimensional vector.
Definition: ParaVector3.h:16
Block Max file format parser.
Definition: BMaxParser.h:27
Definition: BMaxAnimGenerator.h:48
Definition: BMaxAnimGenerator.h:58
Definition: modelheaders.h:165