void MarkBasicMapKnowledge() { foreach (var area in Minimap.Areas) { foreach (var room in area.Rooms) { var roomKey = new Roomkey(area.LevelID, room.RoomID); if (preservedRoomStates.Contains(roomKey)) { continue; } preservedRoomStates.Add(new MinimapRoomState(roomKey, room)); room.SetKnown(true); foreach (var block in room.Blocks.Values) { if (block.IsCheckpoint || block.IsTransition) { block.IsVisited = true; } if (!block.IsVisited && (block.IsBoss || block.IsTimespinner)) { MarkBlockAsBossOrTimespinner(block); } } } } }
void MarkAvailableItemLocations() { preservedRoomStates = new LookupDictionairy <Roomkey, MinimapRoomState>(r => r.RoomKey); var visableAreas = (List <EMinimapEraType>)Dynamic._availableEras; foreach (var itemLocation in GetAvailableItemLocations()) { var roomKey = new Roomkey(itemLocation.Key.LevelId, itemLocation.Key.RoomId); //somehow they keys dont match if we use itemLocation.Key directly if (preservedRoomStates.Contains(roomKey)) { continue; } var room = GetRoom(roomKey); MakeSureEraIsVisable(visableAreas, room); preservedRoomStates.Add(new MinimapRoomState(roomKey, room)); foreach (var block in room.Blocks.Values) { if (block.IsSolidWall) { continue; } block.IsKnown = true; block.IsVisited = true; if (block.IsTransition || block.IsCheckpoint || block.IsBoss) { block.IsTransition = false; block.IsCheckpoint = false; block.RoomColor = EMinimapRoomColor.Yellow; } else { block.RoomColor = EMinimapRoomColor.Orange; } } } }
public MinimapRoomState(Roomkey key, MinimapRoom room) { RoomKey = key; blockStates = room.Blocks.ToDictionary(b => b.Key, b => new MiniMapBlockState(b.Value)); }
MinimapRoom GetRoom(Roomkey roomKey) => Minimap.GetRoomFromLevelAndRoom(roomKey.LevelId, roomKey.RoomId);