Core/Vmaps: Fix loading vmaps

This commit is contained in:
hondacrx
2018-05-04 11:05:32 -04:00
parent 1a7f31d4f2
commit 91ab38cc13
2 changed files with 19 additions and 14 deletions
@@ -247,9 +247,10 @@ namespace Game.Collision
return null; return null;
} }
Log.outDebug(LogFilter.Maps, "VMapManager: loading file '{0}'", filename); Log.outDebug(LogFilter.Maps, "VMapManager: loading file '{0}'", filename);
iLoadedModelFiles.Add(filename, new ManagedModel()); model = new ManagedModel();
model = iLoadedModelFiles.LookupByKey(filename);
model.setModel(worldmodel); model.setModel(worldmodel);
iLoadedModelFiles.Add(filename, model);
} }
model.incRefCount(); model.incRefCount();
return model.getModel(); return model.getModel();
+16 -12
View File
@@ -97,6 +97,7 @@ namespace Game.Collision
uint tx = (uint)tx_f; uint tx = (uint)tx_f;
if (tx_f < 0.0f || tx >= iTilesX) if (tx_f < 0.0f || tx >= iTilesX)
return false; return false;
float ty_f = (pos.Y - iCorner.Y) / MapConst.LiquidTileSize; float ty_f = (pos.Y - iCorner.Y) / MapConst.LiquidTileSize;
uint ty = (uint)ty_f; uint ty = (uint)ty_f;
if (ty_f < 0.0f || ty >= iTilesY) if (ty_f < 0.0f || ty >= iTilesY)
@@ -200,8 +201,6 @@ namespace Game.Collision
public bool readFromFile(BinaryReader reader) public bool readFromFile(BinaryReader reader)
{ {
uint chunkSize = 0;
uint count = 0;
triangles.Clear(); triangles.Clear();
vertices.Clear(); vertices.Clear();
iLiquid = null; iLiquid = null;
@@ -216,8 +215,8 @@ namespace Game.Collision
if (reader.ReadStringFromChars(4) != "VERT") if (reader.ReadStringFromChars(4) != "VERT")
return false; return false;
chunkSize = reader.ReadUInt32(); uint chunkSize = reader.ReadUInt32();
count = reader.ReadUInt32(); uint count = reader.ReadUInt32();
if (count == 0) if (count == 0)
return false; return false;
@@ -237,11 +236,13 @@ namespace Game.Collision
// read mesh BIH // read mesh BIH
if (reader.ReadStringFromChars(4) != "MBIH") if (reader.ReadStringFromChars(4) != "MBIH")
return false; return false;
meshTree.readFromFile(reader); meshTree.readFromFile(reader);
// write liquid data // write liquid data
if (reader.ReadStringFromChars(4).ToString() != "LIQU") if (reader.ReadStringFromChars(4).ToString() != "LIQU")
return false; return false;
chunkSize = reader.ReadUInt32(); chunkSize = reader.ReadUInt32();
if (chunkSize > 0) if (chunkSize > 0)
iLiquid = WmoLiquid.readFromFile(reader); iLiquid = WmoLiquid.readFromFile(reader);
@@ -362,25 +363,30 @@ namespace Game.Collision
public bool readFile(string filename) public bool readFile(string filename)
{ {
filename = filename.Replace("\0", "");
if (!File.Exists(filename)) if (!File.Exists(filename))
return false; {
filename = filename.Replace(".vmo", "");
if (!File.Exists(filename))
return false;
}
using (BinaryReader reader = new BinaryReader(new FileStream(filename, FileMode.Open, FileAccess.Read))) using (BinaryReader reader = new BinaryReader(new FileStream(filename, FileMode.Open, FileAccess.Read)))
{ {
uint chunkSize = 0;
uint count = 0;
if (reader.ReadStringFromChars(8) != MapConst.VMapMagic) if (reader.ReadStringFromChars(8) != MapConst.VMapMagic)
return false; return false;
if (reader.ReadStringFromChars(4) != "WMOD") if (reader.ReadStringFromChars(4) != "WMOD")
return false; return false;
chunkSize = reader.ReadUInt32();
uint chunkSize = reader.ReadUInt32();
RootWMOID = reader.ReadUInt32(); RootWMOID = reader.ReadUInt32();
// read group models // read group models
if (reader.ReadStringFromChars(4) != "GMOD") if (reader.ReadStringFromChars(4) != "GMOD")
return false; return false;
count = reader.ReadUInt32(); uint count = reader.ReadUInt32();
for (var i = 0; i < count; ++i) for (var i = 0; i < count; ++i)
{ {
GroupModel group = new GroupModel(); GroupModel group = new GroupModel();
@@ -391,10 +397,8 @@ namespace Game.Collision
// read group BIH // read group BIH
if (reader.ReadStringFromChars(4) != "GBIH") if (reader.ReadStringFromChars(4) != "GBIH")
return false; return false;
groupTree.readFromFile(reader);
return groupTree.readFromFile(reader);
return true;
} }
} }