Covellite++  Version: 2.3.0 Revision: ??? Platform: x64 Build: 23:13 04.01.2025
Кроссплатформенный фреймворк для разработки приложений на С++
Загрузка...
Поиск...
Не найдено
Animated.hpp
1
2#pragma once
3#include "Animation.hpp"
4#include "GameObject.hpp"
5#include "CubeCoords.hpp"
6#include "Defines.hpp"
7
8namespace basement
9{
10
11namespace model
12{
13
29class Animated final :
30 public GameObject
31{
32 using ComponentPtr_t = ::covellite::api::Component::ComponentPtr_t;
33 using cbMaterial_t =
34 ::std::function<Object_t(const Material_t::value_type &)>;
35 class Animations;
36
37 class Value_t
38 {
39 public:
40 cbMaterial_t Material;
41 CubeCoords Coords;
42 ComponentPtr_t pAnimation;
43 };
44
45public:
46 Objects_t GetObject(const Any_t &) const override;
47
48private:
49 class Animation final
50 {
51 public:
52 Object_t GetObject(void) const;
53
54 private:
55 float m_TicksPerSecond = 1.0f;
56 animation::Frames_t m_RawFrames;
57
58 public:
59 explicit Animation(const Path_t &);
60 };
61
62 class Mesh final :
63 public GameObject::Mesh
64 {
65 using Skeleton_t = animation::Skeleton_t;
66 using Bone_t = animation::Bone;
67 using Skin_t = animation::Skin_t;
68 using WeightBones_t = ::std::vector<::std::pair<Bone_t::Index_t, float>>;
69 using BoneTransforms_t = ::std::map<String_t, ::glm::mat4>;
70
71 class TriangleWeightBones final
72 {
73 public:
74 WeightBones_t WeightBones[3];
75 };
76
77 class Skeleton final
78 {
79 public:
80 inline void Add(
81 const ::std::string & _BoneName,
82 const ::std::string & _ParentBoneName,
83 const ::glm::mat4 & _GlobalTransformation,
84 const ::glm::mat4 & _LocalTransformation)
85 {
86 m_Bones.push_back(
87 {
88 _BoneName,
89 GetBoneIndex(_ParentBoneName),
90 _GlobalTransformation,
91 _LocalTransformation
92 });
93 }
94
95 inline const Skeleton_t & GetBones(void) const { return m_Bones; }
96
97 inline Bone_t::Index_t GetBoneIndex(const ::std::string & _Name) const
98 {
99 for (::std::size_t i = 0; i < m_Bones.size(); i++)
100 {
101 if (m_Bones[i].Name == _Name) return i;
102 }
103
104 return Bone_t::iNonexistent;
105 };
106
107 private:
108 Skeleton_t m_Bones;
109 };
110
111 public:
112 Object_t GetObject(const Any_t &) const override;
113
114 private:
115 Object_t GetHoldInHandObject(const String_t &) const;
116 void Add(const Triangle_t &, const TriangleWeightBones &);
117 void AddSkin(const Vertex &, const ::std::size_t, const WeightBones_t &);
118 ::std::size_t GetSkinVertexCount(void) const { return m_SkinVertexes.size(); }
119
120 private:
121 mutable ::std::shared_ptr<Animations> m_pAnimations;
122 Skeleton m_Skeleton;
123 Skin_t m_SkinVertexes;
124 mutable Component_t::ComponentPtr_t m_pSkinData;
125 mutable Component_t::ComponentPtr_t m_pTransformBones;
126
127 public:
128 explicit Mesh(const Path_t &);
129 };
130
131private:
132 static Object_t GetCameraObject(const GameScenePtr_t &);
133 static Object_t GetLightsObject(void);
134 static Object_t GetPresentObject(const CubeCoords &,
135 const ::std::vector<Index_t> &);
136
137private:
138 const GameScenePtr_t m_pGameScene;
139 Object_t m_Object;
140 mutable ::std::map<::std::string, ::std::size_t> m_Textures;
141
142private:
143 explicit Animated(const GameScenePtr_t &);
144 friend GameObject;
145};
146
147} // namespace model
148
149} // namespace basement
::std::vector<::std::pair< float, ::alicorn::extension::std::fast::unordered_map<::std::string, Mat4 > > > Frames_t
Класс входит в проект Example Тип данных набора кадров одной анимации.
Definition Animation.hpp:138
::std::vector< Bone > Skeleton_t
Класс входит в проект Example Тип данных скелета.
Definition Animation.hpp:64
::std::vector< SkinVertex > Skin_t
Класс входит в проект Example Тип данных набора вершин анимированной модели.
Definition Animation.hpp:110
Definition Common.hpp:10
Класс входит в проект Example Класс рендеринга анимированного объекта.
Definition Animated.hpp:31
Objects_t GetObject(const Any_t &) const override
Функция получения уникального набора компонентов игрового объекта.
Definition Animated.cpp:67
Класс входит в проект Example Класс информации об одной кости скелета анимированной модели.
Definition Animation.hpp:34
Класс входит в проект Example Класс манипуляции кубическими координатами.
Definition CubeCoords.hpp:26
Класс входит в проект Example Общий базовый класс игрового объекта.
Definition GameObject.hpp:34