/// <summary>
/// Adds a WMO to the manager
/// </summary>
/// <param name="currentMODF">MODF (placement information for this WMO)</param>
public void AddWMO(MapObjectDefinition currentMODF)
{
_fileNames.Add(currentMODF.FilePath);
// Parse the WMORoot
var wmoRoot = WMORootParser.Process(MpqTerrainManager.MpqManager, currentMODF.FilePath);
// Parse the WMOGroups
for (var wmoGroup = 0; wmoGroup < wmoRoot.Header.GroupCount; wmoGroup++)
{
var newFile = wmoRoot.FilePath.Substring(0, wmoRoot.FilePath.LastIndexOf('.'));
var currentFilePath = String.Format("{0}_{1:000}.wmo", newFile, wmoGroup);
var group = WMOGroupParser.Process(MpqTerrainManager.MpqManager, currentFilePath, wmoRoot, wmoGroup);
wmoRoot.Groups[wmoGroup] = group;
}
//wmoRoot.DumpLiqChunks();
// Parse in the WMO's M2s
var curDoodadSet = currentMODF.DoodadSetId;
var setIndices = new List <int> {
0
};
if (curDoodadSet > 0)
{
setIndices.Add(curDoodadSet);
}
foreach (var index in setIndices)
{
var doodadSetOffset = wmoRoot.DoodadSets[index].FirstInstanceIndex;
var doodadSetCount = wmoRoot.DoodadSets[index].InstanceCount;
wmoRoot.WMOM2s = new List <M2.M2>((int)doodadSetCount);
for (var i = doodadSetOffset; i < (doodadSetOffset + doodadSetCount); i++)
{
var curDoodadDef = wmoRoot.DoodadDefinitions[i];
var curM2 = M2ModelParser.Process(MpqTerrainManager.MpqManager, curDoodadDef.FilePath);
var tempIndices = new List <int>();
for (var j = 0; j < curM2.BoundingTriangles.Length; j++)
{
var tri = curM2.BoundingTriangles[j];
tempIndices.Add(tri.Index2);
tempIndices.Add(tri.Index1);
tempIndices.Add(tri.Index0);
}
var rotatedM2 = TransformWMOM2(curM2, tempIndices, curDoodadDef);
wmoRoot.WMOM2s.Add(rotatedM2);
}
}
TransformWMO(currentMODF, wmoRoot);
var bounds = new BoundingBox(wmoRoot.WmoVertices);
wmoRoot.Bounds = bounds;
WMOs.Add(wmoRoot);
}