public void Load(Stream stream) { using (var io = IoBuffer.FromStream(stream, ByteOrder.LITTLE_ENDIAN)) { var magic = io.ReadCString(4); if (magic != "NBHm") { throw new Exception("Not a valid neighbourhood model!"); } Version = io.ReadInt32(); var houseC = io.ReadInt32(); for (int i = 0; i < houseC; i++) { var house = new NBHmHouse() { HouseNum = io.ReadInt16(), Position = new Vector3() { X = io.ReadFloat(), Y = io.ReadFloat(), Z = io.ReadFloat() } }; Houses[house.HouseNum] = house; } io.ReadByte(); //has model. right now there is no model. } }
public NBHm(OBJ obj) { foreach (var group in obj.FacesByObjgroup) { if (group.Key[0] == 'p') { //lot group var split = group.Key.Split('_'); if (split.Length > 1 && split[1] == "floor") { Vector2 minLocation = new Vector2(999999999, 999999999); var candidates = new List <Vector3>(); foreach (var inds in group.Value) { var vtx = obj.Vertices[inds[0] - 1]; if (vtx.X < minLocation.X) { minLocation.X = vtx.X; candidates.Clear(); } if (vtx.Z < minLocation.Y) { minLocation.Y = vtx.Z; candidates.Clear(); } if ((int)vtx.Z == (int)minLocation.Y && (int)vtx.X == (int)minLocation.X) { candidates.Add(vtx); } } var minLocation3 = new Vector3(minLocation.X, candidates.Min(x => x.Y), minLocation.Y); //add this house var house = new NBHmHouse() { HouseNum = short.Parse(split[0].Substring(1)), Position = minLocation3 }; Houses[house.HouseNum] = house; } } } }