TrinityCore
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 "vec3d.h"
22#include <memory>
23#include <string>
24#include <unordered_set>
25#include <vector>
26
27// MOPY flags
29{
36 WMO_MATERIAL_WALL_SURFACE = 0x40, // Guessed
38};
39
40class WMOInstance;
41class WMOManager;
42class CASCFile;
43struct ADTOutputCache;
44namespace ADT { struct MODF; }
45
46namespace WMO
47{
48 struct MODS
49 {
50 char Name[20];
51 uint32 StartIndex; // index of first doodad instance in this set
52 uint32 Count; // number of doodad instances in this set
53 char _pad[4];
54 };
55
56 struct MODD
57 {
61 float Scale;
63 };
64}
65
66/* for whatever reason a certain company just can't stick to one coordinate system... */
67static inline Vec3D fixCoords(Vec3D const& v){ return Vec3D(v.z, v.x, v.y); }
68
70{
71 std::vector<WMO::MODS> Sets;
72 std::unique_ptr<char[]> Paths;
73 std::unique_ptr<uint32[]> FileDataIds;
74 std::vector<WMO::MODD> Spawns;
75 std::unordered_set<uint16> References;
76};
77
79{
80private:
81 std::string filename;
82public:
83 unsigned int color;
85 float bbcorn1[3];
86 float bbcorn2[3];
88
89 std::vector<char> GroupNames;
91 std::unordered_set<uint32> ValidDoodadNames;
92 std::vector<uint32> groupFileDataIDs;
93
94 WMORoot(std::string const& filename);
95
96 bool open();
97 bool ConvertToVMAPRootWmo(FILE* output);
98};
99
100#pragma pack(push, 1)
101
103{
105 float pos_x;
106 float pos_y;
107 float pos_z;
108 short material;
109};
110
112{
115 float height;
116};
117
118#pragma pack(pop)
119
121{
122private:
123 std::string filename;
124public:
125 // MOGP
126
127 std::unique_ptr<uint16[]> MPY2;
128 std::unique_ptr<uint32[]> MOVX;
129 float* MOVT;
131 int* MobaEx;
137 float bbcorn1[3];
138 float bbcorn2[3];
144
147 unsigned int nVertices; // number when loaded
148 int nTriangles; // number when loaded
150
151 std::vector<uint16> DoodadReferences;
152
153 WMOGroup(std::string const& filename);
154 ~WMOGroup();
155
156 bool open(WMORoot* rootWMO);
157 int ConvertToVMAPGroupWmo(FILE* output, bool preciseVectorData);
158 uint32 GetLiquidTypeId(uint32 liquidTypeId);
159 bool ShouldSkip(WMORoot const* root) const;
160};
161
162namespace MapObject
163{
164 void Extract(ADT::MODF const& mapObjDef, char const* WmoInstName, bool isGlobalWmo, uint32 mapID, uint32 originalMapId,
165 FILE* pDirfile, std::vector<ADTOutputCache>* dirfileCache);
166}
167
168#endif
uint16_t uint16
Definition: Define.h:143
uint32_t uint32
Definition: Define.h:142
Definition: vec3d.h:25
float x
Definition: vec3d.h:27
float y
Definition: vec3d.h:27
float z
Definition: vec3d.h:27
Definition: wmo.h:121
uint32 nBatchC
Definition: wmo.h:143
float * MOVT
Definition: wmo.h:129
int moba_size
Definition: wmo.h:145
WMOGroup(std::string const &filename)
Definition: wmo.cpp:208
std::unique_ptr< uint16[]> MPY2
Definition: wmo.h:127
uint16 nBatchA
Definition: wmo.h:141
uint32 fogIdx
Definition: wmo.h:143
uint32 groupLiquid
Definition: wmo.h:143
uint16 moprIdx
Definition: wmo.h:139
std::string filename
Definition: wmo.h:123
int groupName
Definition: wmo.h:135
int descGroupName
Definition: wmo.h:135
int LiquEx_size
Definition: wmo.h:146
uint32 groupWMOID
Definition: wmo.h:143
uint16 nBatchB
Definition: wmo.h:142
float bbcorn2[3]
Definition: wmo.h:138
std::vector< uint16 > DoodadReferences
Definition: wmo.h:151
int mogpFlags
Definition: wmo.h:136
unsigned int nVertices
Definition: wmo.h:147
WMOLiquidVert * LiquEx
Definition: wmo.h:133
uint16 * MOBA
Definition: wmo.h:130
uint32 liquflags
Definition: wmo.h:149
bool open(WMORoot *rootWMO)
Definition: wmo.cpp:219
int nTriangles
Definition: wmo.h:148
uint32 GetLiquidTypeId(uint32 liquidTypeId)
Definition: wmo.cpp:541
char * LiquBytes
Definition: wmo.h:134
~WMOGroup()
Definition: wmo.cpp:573
int * MobaEx
Definition: wmo.h:131
WMOLiquidHeader * hlq
Definition: wmo.h:132
int ConvertToVMAPGroupWmo(FILE *output, bool preciseVectorData)
Definition: wmo.cpp:352
bool ShouldSkip(WMORoot const *root) const
Definition: wmo.cpp:557
uint16 moprNItems
Definition: wmo.h:140
float bbcorn1[3]
Definition: wmo.h:137
std::unique_ptr< uint32[]> MOVX
Definition: wmo.h:128
Definition: wmo.h:79
float bbcorn1[3]
Definition: wmo.h:85
std::vector< char > GroupNames
Definition: wmo.h:89
uint32 nDoodadSets
Definition: wmo.h:84
uint32 nDoodadDefs
Definition: wmo.h:84
WMODoodadData DoodadData
Definition: wmo.h:90
uint16 numLod
Definition: wmo.h:87
std::vector< uint32 > groupFileDataIDs
Definition: wmo.h:92
uint32 nLights
Definition: wmo.h:84
uint32 nPortals
Definition: wmo.h:84
bool open()
Definition: wmo.cpp:42
float bbcorn2[3]
Definition: wmo.h:86
uint32 nGroups
Definition: wmo.h:84
std::unordered_set< uint32 > ValidDoodadNames
Definition: wmo.h:91
uint16 flags
Definition: wmo.h:87
std::string filename
Definition: wmo.h:81
bool ConvertToVMAPRootWmo(FILE *output)
Definition: wmo.cpp:194
uint32 nDoodadNames
Definition: wmo.h:84
unsigned int color
Definition: wmo.h:83
uint32 nTextures
Definition: wmo.h:84
WMORoot(std::string const &filename)
Definition: wmo.cpp:32
uint32 RootWMOID
Definition: wmo.h:84
Definition: adtfile.h:27
Definition: wmo.h:163
void Extract(ADT::MODF const &mapObjDef, char const *WmoInstName, bool isGlobalWmo, uint32 mapID, uint32 originalMapId, FILE *pDirfile, std::vector< ADTOutputCache > *dirfileCache)
Definition: wmo.h:47
std::unordered_set< uint16 > References
Definition: wmo.h:75
std::vector< WMO::MODS > Sets
Definition: wmo.h:71
std::vector< WMO::MODD > Spawns
Definition: wmo.h:74
std::unique_ptr< uint32[]> FileDataIds
Definition: wmo.h:73
std::unique_ptr< char[]> Paths
Definition: wmo.h:72
float pos_z
Definition: wmo.h:107
float pos_y
Definition: wmo.h:106
short material
Definition: wmo.h:108
int ytiles
Definition: wmo.h:104
int xverts
Definition: wmo.h:104
int yverts
Definition: wmo.h:104
float pos_x
Definition: wmo.h:105
int xtiles
Definition: wmo.h:104
uint16 unk2
Definition: wmo.h:114
uint16 unk1
Definition: wmo.h:113
float height
Definition: wmo.h:115
Definition: wmo.h:57
uint32 Color
Definition: wmo.h:62
Quaternion Rotation
Definition: wmo.h:60
uint32 NameIndex
Definition: wmo.h:58
float Scale
Definition: wmo.h:61
Vec3D Position
Definition: wmo.h:59
Definition: wmo.h:49
uint32 StartIndex
Definition: wmo.h:51
uint32 Count
Definition: wmo.h:52
char _pad[4]
Definition: wmo.h:53
char Name[20]
Definition: wmo.h:50
bool preciseVectorData
Definition: vmapexport.cpp:65
MopyFlags
Definition: wmo.h:29
@ WMO_MATERIAL_DETAIL
Definition: wmo.h:32
@ WMO_MATERIAL_COLLISION
Definition: wmo.h:33
@ WMO_MATERIAL_RENDER
Definition: wmo.h:35
@ WMO_MATERIAL_UNK01
Definition: wmo.h:30
@ WMO_MATERIAL_WALL_SURFACE
Definition: wmo.h:36
@ WMO_MATERIAL_COLLIDE_HIT
Definition: wmo.h:37
@ WMO_MATERIAL_NOCAMCOLLIDE
Definition: wmo.h:31
@ WMO_MATERIAL_HINT
Definition: wmo.h:34
static Vec3D fixCoords(Vec3D const &v)
Definition: wmo.h:67