public MapInfo(DataBuffer data) { int count = data.ReadInt32(4, true); Areas = new MapAreaInfo[count]; for (int i = 0; i < count; i++) { var area = new MapAreaInfo(); int start = data.Position; area.Name = data.ReadUTF8Z(); area.DisplayName = area.Name; data.Position = start + 32; float xLo = data.ReadSingle(); float yLo = data.ReadSingle(); float zLo = data.ReadSingle(); float xHi = data.ReadSingle(); float yHi = data.ReadSingle(); float zHi = data.ReadSingle(); area.LowerBound = new Point3(xLo, yLo, zLo); area.UpperBound = new Point3(xHi, yHi, zHi); area.Size = new Point3(xHi - xLo, yHi - yLo, zHi - zLo); data.Position = start + 72; Areas[i] = area; if (area.Name.EndsWith("_cave1")) { area.Name = "dlc3_" + area.Name.Replace("_cave1", ""); } } }
public MapInfo(DataBuffer data) { var count = data.ReadInt32(4, true); Areas = new MapAreaInfo[count]; for (int i = 0; i < count; i++) { var area = new MapAreaInfo(); int start = data.Position; area.Name = data.ReadUTF8Z(); area.DisplayName = area.Name; data.Position = start + 32; var xLo = data.ReadSingle(); var yLo = data.ReadSingle(); var zLo = data.ReadSingle(); var xHi = data.ReadSingle(); var yHi = data.ReadSingle(); var zHi = data.ReadSingle(); area.LowerBound = new Point3(xLo, yLo, zLo); area.UpperBound = new Point3(xHi, yHi, zHi); area.Size = new Point3(xHi - xLo, yHi - yLo, zHi - zLo); data.Position = start + 72; Areas[i] = area; } }
public static void AssignGimmickAreas(Dictionary <string, Lvb> set, MapInfo mapInfo) { mapInfo.Gimmicks = set; foreach (var gmkType in set) { var type = gmkType.Key; foreach (var gmk in gmkType.Value.Info) { MapAreaInfo area = mapInfo.GetContainingArea(gmk.Xfrm.Position); area?.AddGimmick(gmk, type); } } }
public MapAreaInfo GetContainingArea(Point3 point) { MapAreaInfo containingArea = null; int minPriority = int.MaxValue; foreach (MapAreaInfo area in Areas) { if (area.Contains(point) && area.Priority < minPriority) { containingArea = area; minPriority = area.Priority; } } return(containingArea); }