MDLParser
Simple and modern library for parsing the Source engine model formats
Loading...
Searching...
No Matches
mdl.hpp
1#pragma once
2
3#include <optional>
4#include <span>
5#include <string>
6#include <vector>
7#include "./structs/mdl.hpp"
8
9namespace MdlParser {
13 class Mdl {
14 public:
18 struct Mesh {
25 int32_t material;
26
31 int32_t vertexOffset;
32
36 int32_t vertexCount;
37 };
38
42 struct Model {
46 std::vector<Mesh> meshes;
47
51 int32_t vertexOffset;
52
57
61 int32_t vertexCount;
62 };
63
68 struct BodyPart {
72 std::string name;
73
77 std::vector<Model> models;
78 };
79
83 struct Bone {
87 std::string name;
88
92 int32_t parent;
93
94 Structs::Vector position;
95 Structs::Quaternion orientation;
96 Structs::RadianEuler orientationEuler;
97 Structs::Vector positionScale;
98 Structs::Vector orientationScale;
99
104
108 int32_t flags;
109 };
110
114 struct Texture {
119 std::string name;
120 int32_t flags;
121 };
122
130 explicit Mdl(
131 std::span<const std::byte> data,
132 const std::optional<int32_t>& checksum = std::nullopt
133 );
134
140 [[nodiscard]] int32_t getChecksum() const;
141
146 [[nodiscard]] const std::vector<BodyPart>& getBodyParts() const;
147
155 [[nodiscard]] const std::vector<std::string>& getTextureDirectories() const;
156
162 [[nodiscard]] const std::vector<Texture>& getTextures() const;
163
172 [[nodiscard]] const std::vector<std::vector<int16_t>>& getSkinLookupTable() const;
173
180 [[nodiscard]] const std::vector<Bone>& getBones() const;
181
182 private:
184 std::optional<Structs::Mdl::Header2> header2;
185
186 std::vector<BodyPart> bodyParts;
187
188 std::vector<std::string> textureDirectories;
189 std::vector<Texture> textures;
190 std::vector<std::vector<int16_t>> skins;
191
192 std::vector<Bone> bones;
193 };
194}
Definition: mdl.hpp:13
int32_t getChecksum() const
Definition: mdl.cpp:174
const std::vector< std::vector< int16_t > > & getSkinLookupTable() const
Definition: mdl.cpp:190
const std::vector< std::string > & getTextureDirectories() const
Definition: mdl.cpp:182
const std::vector< Bone > & getBones() const
Definition: mdl.cpp:194
const std::vector< Texture > & getTextures() const
Definition: mdl.cpp:186
const std::vector< BodyPart > & getBodyParts() const
Definition: mdl.cpp:178
Definition: MDLParser.hpp:6
Definition: mdl.hpp:68
std::vector< Model > models
Definition: mdl.hpp:77
std::string name
Definition: mdl.hpp:72
Definition: mdl.hpp:83
int32_t flags
Definition: mdl.hpp:108
int32_t parent
Definition: mdl.hpp:92
std::string name
Definition: mdl.hpp:87
Structs::Matrix3x4 poseToBone
Definition: mdl.hpp:103
Definition: mdl.hpp:18
int32_t material
Definition: mdl.hpp:25
int32_t vertexCount
Definition: mdl.hpp:36
int32_t vertexOffset
Definition: mdl.hpp:31
Definition: mdl.hpp:42
int32_t vertexOffset
Definition: mdl.hpp:51
int32_t tangentsOffset
Definition: mdl.hpp:56
int32_t vertexCount
Definition: mdl.hpp:61
std::vector< Mesh > meshes
Definition: mdl.hpp:46
Definition: mdl.hpp:114
std::string name
Definition: mdl.hpp:119
Definition: common.hpp:21
Definition: mdl.hpp:147
Definition: common.hpp:14
Definition: common.hpp:10