private void LoadTiles(string fileName) { string[] loadPathDirs = fileName.Split('\\'); string relativeNotesPath = "notes_" + loadPathDirs.Last(); string notesLoadPath = ""; foreach (string dir in loadPathDirs) { if (dir != loadPathDirs.Last()) { notesLoadPath += dir + '\\'; } } notesLoadPath += relativeNotesPath; using (StreamReader sr = new StreamReader(fileName)) { // Exception: Get first two lines differently // Line 1 string line = sr.ReadLine(); string[] line1Values = line.Split(' '); levelWidthInTiles = Convert.ToInt32(line1Values[0]); levelHeightInTiles = Convert.ToInt32(line1Values[1]); textboxLevelWidth.Text = levelWidthInTiles.ToString(); textboxLevelHeight.Text = levelHeightInTiles.ToString(); textboxNumLayers.Text = (line1Values.Length - 2).ToString(); // Line 2 line = sr.ReadLine(); Console.WriteLine(line); setImageSource(line); createTables(); int count = 0; while ((line = sr.ReadLine()) != null) { string[] splitLine = line.Split(' '); if (splitLine[0].StartsWith("-")) { int skipValue = int.Parse(splitLine[0].Split('-').Last()); count += skipValue; continue; } List <Button> buttonsAtLocation = new List <Button>(numLayers); for (int i = 0; i < numLayers; i++) { buttonsAtLocation.Add(gameboardButtons[i][count]); } List <Tile> tilesAtLocation = new List <Tile>(numLayers); for (int i = 0; i < numLayers; i++) { tilesAtLocation.Add(null); } int currentLayer = 0; const int tileCoordFirstIndex = 10; int tileCoordLastIndex = tileCoordFirstIndex - 1 + numLayers * 2; for (int i = tileCoordFirstIndex; i <= tileCoordLastIndex; i++) { if (i >= splitLine.Length) { break; } if (splitLine[i] == "-1") { tileCoordLastIndex--; currentLayer++; continue; } if (i + 1 >= splitLine.Length) { Console.WriteLine("Looking past splitLine's length for the y-coord of a tile. This shouldn't happen."); break; } tilesAtLocation[currentLayer] = srcTiles.SingleOrDefault(t => t.x * tileWidth == int.Parse(splitLine[i]) && t.y * tileHeight == int.Parse(splitLine[i + 1])); currentLayer++; i++; } UnitEnum unit = UnitEnum.None; ItemEnum item = ItemEnum.None; unit = (UnitEnum)Enum.Parse(typeof(UnitEnum), splitLine[8]); item = (ItemEnum)Enum.Parse(typeof(ItemEnum), splitLine[9]); // If has unit or item, indicate this via string in the button // For now, let's assume that the best button to indicate this in is in the foremost layer if (unit != UnitEnum.None) { foreach (Button button in buttonsAtLocation) { button.Content = unit.ToString(); } int numNullsAtLocation = numLayers - tilesAtLocation.Count(tile => tile != null); int numNotNullsAtLocation = numLayers - numNullsAtLocation; // If moving platform, set up that object as well if (unit == UnitEnum.MovingPlatformRed || unit == UnitEnum.MovingPlatformPink) { int platformDestFirstIndex = tileCoordFirstIndex + numNotNullsAtLocation * 2 + numNullsAtLocation; MovingPlatform platform = GetOrCreatePlatform(count); // Read in destinations from the last expected property to the end of the line for (int i = platformDestFirstIndex; i < splitLine.Length; i += 2) { platform.tileDests.Add(new Tuple <int, int>(int.Parse(splitLine[i]), int.Parse(splitLine[i + 1]))); } for (int i = 0; i < platform.tileDests.Count; i++) { Button destButton = (Button)FindName("levelTile" + GetButtonIndexFromCoordinates(platform.tileDests[i])); destButton.Content = "D" + (i + 1); } platforms.Add(platform); } } if (item != ItemEnum.None) { foreach (Button button in buttonsAtLocation) { button.Content = item.ToString(); } } // Set location properties LocationData location = locations[count]; if (location != null) { location.unit = unit; location.item = item; } // Set button images for each tile at location for (int i = 0; i < tilesAtLocation.Count; i++) { if (tilesAtLocation[i] != null) { buttonsAtLocation[i].Background = new ImageBrush(tilesAtLocation[i].image.Source); } } int?lastNonNullIndex = null; for (int i = 0; i < tilesAtLocation.Count; i++) { if (tilesAtLocation[i] == null) { continue; } placedTiles[i][count] = tilesAtLocation[i]; lastNonNullIndex = i; } // Set foremost-layer tile's properties if (lastNonNullIndex.HasValue) { Tile lastTile = placedTiles[lastNonNullIndex.Value][count]; lastTile.leftHeight = int.Parse(splitLine[0]); lastTile.rightHeight = int.Parse(splitLine[1]); lastTile.topCollision = splitLine[2].ToString() == "1" ? true : false; lastTile.rightCollision = splitLine[3].ToString() == "1" ? true : false; lastTile.bottomCollision = splitLine[4].ToString() == "1" ? true : false; lastTile.leftCollision = splitLine[5].ToString() == "1" ? true : false; lastTile.isEdge = splitLine[6].ToString() == "1" ? true : false; // Mutex properties will default to false, so only need to think about setting them to true string mutexProperty = splitLine[7].ToString(); if (mutexProperty == "1") { lastTile.isPole = true; } else if (mutexProperty == "2") { lastTile.isPoleEdge = true; } else if (mutexProperty == "3") { lastTile.isDeadly = true; } } count++; } } Console.WriteLine("File loaded."); isLevelLoaded = true; }
public static double FormatNumericValue(UnitEnum unit, double value) { switch (unit) { case UnitEnum.Number: return(value); case UnitEnum.Byte: return(value); case UnitEnum.Kilobyte: return(value / 1024.0); case UnitEnum.Megabyte: return(value / (1024.0 * 1024.0)); case UnitEnum.Gigabyte: return(value / (1024.0 * 1024.0 * 1024.0)); case UnitEnum.Second: return(value); case UnitEnum.Minute: return(value / 60.0); case UnitEnum.Hour: return(value / 3600.0); default: throw new ArgumentException("Invalid Unit in GetValueForNameAndDate", unit.ToString()); } }