public void InjectCollisonMesh(string FilePath, Meta meta)
{
FileStream FS = new FileStream(FilePath, FileMode.Open);
StreamReader SR = new StreamReader(FS);
string temps = string.Empty;
int verticecount = 0;
int facecount = 0;
List<Vector3> vertices = new List<Vector3>();
List<ushort> faces = new List<ushort>();
do
{
temps = SR.ReadLine();
if (temps == null)
{
continue;
}
char[] search = new[] { ',', ' ' };
string[] tempstrings = temps.Split(search, StringSplitOptions.RemoveEmptyEntries);
switch (tempstrings[0])
{
case "v":
Vector3 tempv = new Vector3();
tempv.X = float.Parse(tempstrings[1]);
tempv.Y = float.Parse(tempstrings[2]);
tempv.Z = float.Parse(tempstrings[3]);
vertices.Add(tempv);
verticecount++;
break;
case "f":
string[] split1 = tempstrings[1].Split('/');
string[] split2 = tempstrings[2].Split('/');
string[] split3 = tempstrings[3].Split('/');
ushort temp1 = ushort.Parse(split1[0]);
ushort temp2 = ushort.Parse(split2[0]);
ushort temp3 = ushort.Parse(split3[0]);
temp1--;
temp2--;
temp3--;
faces.Add(temp1);
faces.Add(temp2);
faces.Add(temp3);
facecount += 3;
break;
}
}
while (temps != null);
SR.Close();
FS.Close();
if (this.Vertices.Length >= verticecount && this.Faces.Length >= facecount)
{
meta.Map.OpenMap(MapTypes.Internal);
meta.Map.BW.BaseStream.Position = meta.offset + this.VerticeReflexiveOffset;
meta.Map.BW.Write(verticecount);
for (int x = 0; x < verticecount; x++)
{
meta.Map.BW.BaseStream.Position = meta.offset + this.VerticeReflexiveTranslation + (x * 16);
meta.Map.BW.Write(vertices[x].X);
meta.Map.BW.Write(vertices[x].Y);
meta.Map.BW.Write(vertices[x].Z);
}
meta.Map.BW.BaseStream.Position = meta.offset + this.FaceReflexiveOffset;
int tempint = facecount / 3;
meta.Map.BW.Write(tempint);
for (int x = 0; x < facecount; x += 3)
{
int fuck = x / 3;
if (meta.Map.HaloVersion == HaloVersionEnum.Halo2 ||
meta.Map.HaloVersion == HaloVersionEnum.Halo2Vista)
{
meta.Map.BW.BaseStream.Position = meta.offset + this.FaceReflexiveTranslation + (fuck * 12);
meta.Map.BW.Write(faces[x]);
meta.Map.BW.Write(faces[x + 1]);
}
else
{
meta.Map.BW.BaseStream.Position = meta.offset + this.FaceReflexiveTranslation + (fuck * 24);
meta.Map.BW.Write((int)faces[x]);
meta.Map.BW.Write((int)faces[x + 1]);
}
}
meta.Map.CloseMap();
}
}