public LevelDataDTO ToLevelDataDTO(LevelVersion version, Int32 versionNumber) { return(new LevelDataDTO { Id = this.Id, Version = versionNumber, UserId = this.AuthorId, Title = this.Title, Note = version.Note, Live = this.IsPublished, GameMode = version.GameMode, MinLevel = version.MinRank, Gravity = version.Gravity, Song = version.Song, Items = version.Items, MaxTime = version.MaxTime, PassHash = version.PassHash, Data = version.Data, CowboyChance = version.CowboyChance, SubmittedDate = version.SubmittedDate }); }
public static Level FromString(String data, Int64 authorId) { if (String.IsNullOrEmpty(data) || data.Length < 32) { return(null); } // Trim out the checksum. data = data.Substring(0, data.Length - 32); IEnumerable <KeyValuePair <String, String> > attributes = data .Split(Separators.AMPERSAND_SEPARATOR, StringSplitOptions.RemoveEmptyEntries) .Where(g => g.Contains(Separators.EQ_CHAR)) .Select(g => new KeyValuePair <String, String>(g.Split(Separators.EQ_CHAR)[0], g.Split(Separators.EQ_CHAR)[1])); Level level = new Level { AuthorId = authorId, IsDeleted = false, IsPublished = true, Title = String.Concat(DateTime.UtcNow.GetSecondsSinceUnixTime(), DateTime.UtcNow.Millisecond) }; LevelVersion version = new LevelVersion { Note = String.Empty, GameMode = GameMode.Race, MinRank = 0, MaxTime = 600, Gravity = 1, Song = 1, CowboyChance = 0, Items = String.Empty, Data = String.Empty, PassHash = String.Empty, SubmittedDate = DateTime.UtcNow.AddSeconds(-60), SubmittedIP = String.Empty, Level = level }; level.Versions.Add(version); foreach (KeyValuePair <String, String> attribute in attributes) { // .NET reflection anyone? Noone? Ok... String value = attribute.Value; switch (attribute.Key) { case LevelDataKeys.TITLE: level.Title = value; break; case LevelDataKeys.NOTE: version.Note = value; break; case LevelDataKeys.MIN_LEVEL: Byte minRankParsed; if (Byte.TryParse(value, out minRankParsed)) { version.MinRank = minRankParsed; } break; case LevelDataKeys.SONG: Int16 songParsed; if (Int16.TryParse(value, out songParsed)) { version.Song = songParsed; } break; case LevelDataKeys.GRAVITY: Single gravityParsed; if (Single.TryParse(value, out gravityParsed)) { version.Gravity = gravityParsed; } break; case LevelDataKeys.MAX_TIME: Int16 maxTimeParsed; if (Int16.TryParse(value, out maxTimeParsed)) { version.MaxTime = maxTimeParsed; } break; case LevelDataKeys.COWBOY_CHANCE: Byte cowboyChanceParsed; if (Byte.TryParse(value, out cowboyChanceParsed)) { version.CowboyChance = cowboyChanceParsed; } break; case LevelDataKeys.LIVE: Byte liveParsed; if (Byte.TryParse(value, out liveParsed)) { level.IsPublished = Convert.ToBoolean(liveParsed); } break; case LevelDataKeys.ITEMS: version.Items = value; break; case LevelDataKeys.GAME_MODE: GameMode gameModeParsed = attribute.Value.FromEnumDescription(GameMode.Unknown); if (gameModeParsed != GameMode.Unknown) { version.GameMode = gameModeParsed; } break; case LevelDataKeys.DATA: version.Data = attribute.Value; break; } } return(level); }