summaryrefslogtreecommitdiff
path: root/Runtime/Animation/Avatar.h
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-08-14 22:50:43 +0800
committerchai <chaifix@163.com>2019-08-14 22:50:43 +0800
commit15740faf9fe9fe4be08965098bbf2947e096aeeb (patch)
treea730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/Animation/Avatar.h
+Unity Runtime codeHEADmaster
Diffstat (limited to 'Runtime/Animation/Avatar.h')
-rw-r--r--Runtime/Animation/Avatar.h149
1 files changed, 149 insertions, 0 deletions
diff --git a/Runtime/Animation/Avatar.h b/Runtime/Animation/Avatar.h
new file mode 100644
index 0000000..d99dbd0
--- /dev/null
+++ b/Runtime/Animation/Avatar.h
@@ -0,0 +1,149 @@
+#ifndef AVATAR_H
+#define AVATAR_H
+
+#include "Runtime/BaseClasses/NamedObject.h"
+#include "Runtime/Misc/UserList.h"
+#include "Runtime/BaseClasses/MessageIdentifier.h"
+#include "Runtime/Serialize/SerializeTraits.h"
+#include "Runtime/mecanim/animation/avatar.h"
+
+#include "Runtime/Animation/MecanimUtility.h"
+
+namespace mecanim { namespace animation { struct AvatarConstant; } }
+
+enum HumanParameter
+{
+ UpperArmTwist = 0,
+ LowerArmTwist,
+ UpperLegTwist,
+ LowerLegTwsit,
+ ArmStretch,
+ LegStretch,
+ FeetSpacing
+};
+
+class Avatar : public NamedObject
+{
+public:
+ REGISTER_DERIVED_CLASS (Avatar, NamedObject)
+ DECLARE_OBJECT_SERIALIZE (Avatar)
+
+ static void InitializeClass (){};
+ static void CleanupClass () {}
+
+ Avatar (MemLabelId label, ObjectCreationMode mode);
+
+ virtual void AwakeFromLoad(AwakeFromLoadMode mode);
+ virtual void CheckConsistency ();
+
+ void SetAsset (mecanim::animation::AvatarConstant* avatarConstant, TOSVector const& tos);
+
+ mecanim::animation::AvatarConstant* GetAsset();
+ const mecanim::animation::AvatarConstant* GetAsset() const;
+ TOSVector const& GetTOS() const;
+
+ bool IsValid()const;
+
+
+ void SetMuscleMinMax(int muscleId, float min, float max);
+ void SetParameter(int parameterId, float value);
+
+ void NotifyObjectUsers(const MessageIdentifier& msg);
+ void AddObjectUser( UserListNode& node ) { m_ObjectUsers.AddUser(node); }
+
+ bool IsHuman() const;
+ bool HasRootMotion() const;
+ float GetHumanScale() const;
+ float GetLeftFeetBottomHeight() const;
+ float GetRightFeetBottomHeight() const;
+
+ float GetAxisLength(int humanId)const;
+ Quaternionf GetPreRotation(int humanId)const;
+ Quaternionf GetPostRotation(int humanId)const;
+ Quaternionf GetZYPostQ(int index, Quaternionf const& parentQ, Quaternionf const& q)const;
+ Quaternionf GetZYRoll(int index, Vector3f const& v)const;
+ Vector3f GetLimitSign(int index)const;
+
+protected:
+
+ mecanim::memory::ChainedAllocator m_Allocator;
+ mecanim::animation::AvatarConstant* m_Avatar;
+ TOSVector m_TOS;
+
+ UInt32 m_AvatarSize;
+
+ UserList m_ObjectUsers;
+};
+
+class HumanTrait
+{
+public:
+ enum {
+ LastDoF = mecanim::human::kLastDoF,
+ LastLeftFingerDoF = LastDoF + mecanim::hand::s_DoFCount,
+ LastRightFingerDoF = LastLeftFingerDoF + mecanim::hand::s_DoFCount,
+ MuscleCount = LastRightFingerDoF
+ };
+
+ enum {
+ LastBone = mecanim::human::kLastBone,
+ LastLeftFingerBone = LastBone + mecanim::hand::s_BoneCount,
+ LastRightFingerBone = LastLeftFingerBone + mecanim::hand::s_BoneCount,
+ BoneCount = LastRightFingerBone
+ };
+
+ static std::string GetFingerMuscleName(int index, bool left);
+ static std::string GetFingerName(int index, bool left);
+
+ class Body
+ {
+ public:
+ static int GetBoneCount();
+ static std::string GetBoneName(int index);
+ static int GetMuscleCount();
+ static std::string GetMuscleName(int index);
+ };
+
+ class LeftFinger
+ {
+ public:
+ static int GetBoneCount();
+ static std::string GetBoneName(int index);
+ static int GetMuscleCount();
+ static std::string GetMuscleName(int index);
+ static bool IsLeftHand();
+ };
+
+ class RightFinger
+ {
+ public:
+ static int GetBoneCount();
+ static std::string GetBoneName(int index);
+ static int GetMuscleCount();
+ static std::string GetMuscleName(int index);
+ static bool IsLeftHand();
+ };
+
+ static std::vector<string> GetMuscleName();
+ static std::vector<string> GetBoneName();
+ static int MuscleFromBone(int i, int dofIndex);
+ static int BoneFromMuscle(int i);
+ static int GetBoneId(Avatar const& avatar, int humanId);
+ static bool RequiredBone(int humanId);
+ static int RequiredBoneCount();
+ static bool HasCollider(Avatar& avatar, int humanId);
+ static int GetColliderId(Avatar& avatar, int humanId);
+
+ static int GetParent(int humanId);
+
+ static float GetMuscleDefaultMin(int i);
+ static float GetMuscleDefaultMax(int i);
+
+protected:
+ static std::vector<string> InternalGetMuscleName();
+ static std::vector<string> InternalGetBoneName();
+};
+
+
+#endif
+