TrinityCore
Loading...
Searching...
No Matches
wmo.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef WMO_H
19#define WMO_H
20
21#include "Define.h"
22#include "vec3d.h"
23#include <memory>
24#include <string>
25#include <unordered_set>
26#include <vector>
27
28// MOPY flags
40
41class WMOInstance;
42class WMOManager;
43class CASCFile;
44struct ADTOutputCache;
45namespace ADT { struct MODF; }
46
47namespace WMO
48{
49 struct MODS
50 {
51 char Name[20];
52 uint32 StartIndex; // index of first doodad instance in this set
53 uint32 Count; // number of doodad instances in this set
54 char _pad[4];
55 };
56
65}
66
67/* for whatever reason a certain company just can't stick to one coordinate system... */
68static inline Vec3D fixCoords(Vec3D const& v){ return Vec3D(v.z, v.x, v.y); }
69
71{
72 std::vector<WMO::MODS> Sets;
73 std::unique_ptr<char[]> Paths;
74 std::unique_ptr<uint32[]> FileDataIds;
75 std::vector<WMO::MODD> Spawns;
76 std::unordered_set<uint16> References;
77};
78
80{
81private:
82 std::string filename;
83public:
84 unsigned int color;
86 float bbcorn1[3];
87 float bbcorn2[3];
89
90 std::vector<char> GroupNames;
92 std::unordered_set<uint32> ValidDoodadNames;
93 std::vector<uint32> groupFileDataIDs;
94
95 WMORoot(std::string const& filename);
96
97 bool open();
98 bool ConvertToVMAPRootWmo(FILE* output);
99};
100
101#pragma pack(push, 1)
102
104{
106 float pos_x;
107 float pos_y;
108 float pos_z;
109 short material;
110};
111
118
119#pragma pack(pop)
120
122{
123private:
124 std::string filename;
125public:
126 // MOGP
127
128 std::unique_ptr<uint16[]> MPY2;
129 std::unique_ptr<uint32[]> MOVX;
130 float* MOVT;
132 int* MobaEx;
138 float bbcorn1[3];
139 float bbcorn2[3];
148
151 unsigned int nVertices; // number when loaded
152 int nTriangles; // number when loaded
154
155 std::vector<uint16> DoodadReferences;
156
157 WMOGroup(std::string const& filename);
158 WMOGroup(WMOGroup&&) = default;
160 ~WMOGroup();
161
162 bool open(WMORoot* rootWMO);
163 int ConvertToVMAPGroupWmo(FILE* output, bool preciseVectorData);
164 uint32 GetLiquidTypeId(uint32 liquidTypeId);
165 bool ShouldSkip(WMORoot const* root) const;
166};
167
168namespace MapObject
169{
170 void Extract(ADT::MODF const& mapObjDef, char const* WmoInstName, bool isGlobalWmo, uint32 mapID, uint32 originalMapId,
171 FILE* pDirfile, std::vector<ADTOutputCache>* dirfileCache);
172}
173
174#endif
int16_t int16
Definition Define.h:151
uint16_t uint16
Definition Define.h:155
uint32_t uint32
Definition Define.h:154
Extract
Definition System.cpp:91
Definition vec3d.h:22
float x
Definition vec3d.h:24
float y
Definition vec3d.h:24
float z
Definition vec3d.h:24
uint32 nBatchC
Definition wmo.h:144
float * MOVT
Definition wmo.h:130
int moba_size
Definition wmo.h:149
int16 parentOrFirstChildSplitGroupIndex
Definition wmo.h:146
std::unique_ptr< uint16[]> MPY2
Definition wmo.h:128
uint16 nBatchA
Definition wmo.h:142
uint32 fogIdx
Definition wmo.h:144
WMOGroup(WMOGroup &&)=default
uint32 groupLiquid
Definition wmo.h:144
uint16 moprIdx
Definition wmo.h:140
int16 nextSplitChildGroupIndex
Definition wmo.h:147
std::string filename
Definition wmo.h:124
int groupName
Definition wmo.h:136
int descGroupName
Definition wmo.h:136
int LiquEx_size
Definition wmo.h:150
uint32 groupWMOID
Definition wmo.h:144
uint16 nBatchB
Definition wmo.h:143
uint32 mogpFlags2
Definition wmo.h:145
float bbcorn2[3]
Definition wmo.h:139
std::vector< uint16 > DoodadReferences
Definition wmo.h:155
int mogpFlags
Definition wmo.h:137
unsigned int nVertices
Definition wmo.h:151
WMOLiquidVert * LiquEx
Definition wmo.h:134
uint16 * MOBA
Definition wmo.h:131
uint32 liquflags
Definition wmo.h:153
bool open(WMORoot *rootWMO)
Definition wmo.cpp:216
int nTriangles
Definition wmo.h:152
uint32 GetLiquidTypeId(uint32 liquidTypeId)
Definition wmo.cpp:543
char * LiquBytes
Definition wmo.h:135
~WMOGroup()
Definition wmo.cpp:575
WMOGroup & operator=(WMOGroup &&)=default
int * MobaEx
Definition wmo.h:132
WMOLiquidHeader * hlq
Definition wmo.h:133
int ConvertToVMAPGroupWmo(FILE *output, bool preciseVectorData)
Definition wmo.cpp:359
bool ShouldSkip(WMORoot const *root) const
Definition wmo.cpp:559
uint16 moprNItems
Definition wmo.h:141
float bbcorn1[3]
Definition wmo.h:138
std::unique_ptr< uint32[]> MOVX
Definition wmo.h:129
Definition wmo.h:80
float bbcorn1[3]
Definition wmo.h:86
std::vector< char > GroupNames
Definition wmo.h:90
uint32 nDoodadSets
Definition wmo.h:85
uint32 nDoodadDefs
Definition wmo.h:85
WMODoodadData DoodadData
Definition wmo.h:91
uint16 numLod
Definition wmo.h:88
std::vector< uint32 > groupFileDataIDs
Definition wmo.h:93
uint32 nLights
Definition wmo.h:85
uint32 nPortals
Definition wmo.h:85
bool open()
Definition wmo.cpp:40
float bbcorn2[3]
Definition wmo.h:87
uint32 nGroups
Definition wmo.h:85
std::unordered_set< uint32 > ValidDoodadNames
Definition wmo.h:92
uint16 flags
Definition wmo.h:88
std::string filename
Definition wmo.h:82
bool ConvertToVMAPRootWmo(FILE *output)
Definition wmo.cpp:189
uint32 nDoodadNames
Definition wmo.h:85
unsigned int color
Definition wmo.h:84
uint32 nTextures
Definition wmo.h:85
uint32 RootWMOID
Definition wmo.h:85
Definition adtfile.h:27
Definition wmo.h:48
std::unordered_set< uint16 > References
Definition wmo.h:76
std::vector< WMO::MODS > Sets
Definition wmo.h:72
std::vector< WMO::MODD > Spawns
Definition wmo.h:75
std::unique_ptr< uint32[]> FileDataIds
Definition wmo.h:74
std::unique_ptr< char[]> Paths
Definition wmo.h:73
float pos_z
Definition wmo.h:108
float pos_y
Definition wmo.h:107
short material
Definition wmo.h:109
float pos_x
Definition wmo.h:106
uint16 unk2
Definition wmo.h:115
uint16 unk1
Definition wmo.h:114
float height
Definition wmo.h:116
uint32 Color
Definition wmo.h:63
Quaternion Rotation
Definition wmo.h:61
uint32 NameIndex
Definition wmo.h:59
float Scale
Definition wmo.h:62
Vec3D Position
Definition wmo.h:60
uint32 StartIndex
Definition wmo.h:52
uint32 Count
Definition wmo.h:53
char _pad[4]
Definition wmo.h:54
char Name[20]
Definition wmo.h:51
bool preciseVectorData
MopyFlags
Definition wmo.h:30
@ WMO_MATERIAL_DETAIL
Definition wmo.h:33
@ WMO_MATERIAL_COLLISION
Definition wmo.h:34
@ WMO_MATERIAL_RENDER
Definition wmo.h:36
@ WMO_MATERIAL_UNK01
Definition wmo.h:31
@ WMO_MATERIAL_WALL_SURFACE
Definition wmo.h:37
@ WMO_MATERIAL_COLLIDE_HIT
Definition wmo.h:38
@ WMO_MATERIAL_NOCAMCOLLIDE
Definition wmo.h:32
@ WMO_MATERIAL_HINT
Definition wmo.h:35
static Vec3D fixCoords(Vec3D const &v)
Definition wmo.h:68