private void LevelSelectScreen_ReplaySelected(object sender, CachedLevelData cld, string replayId) { var level = new SoundodgerLevel(cld.XmlPath); LoadReplayAndStart(level, replayId, cld.Settings); }
public static CachedLevelData GetLevelData(string xmlHash) { return(DoQuery(command => { command.CommandText = @" WITH level_scores AS (SELECT s.percent, s.heart_gotten, s.mod_game_speed FROM level_data l JOIN scores s ON l.level_id = s.level_id WHERE l.hash = $hash) SELECT d.*, (SELECT percent FROM level_scores WHERE mod_game_speed >= 1 ORDER BY percent DESC LIMIT 1) AS best_score, (SELECT COUNT(1) FROM level_scores WHERE heart_gotten = '1') AS heart_gotten, IFNULL(s.invert_colors, 'false') AS invert_colors, IFNULL(s.thirty_ticks, 'false') AS thirty_ticks, IFNULL(s.naive_warp, 'false') AS naive_warp FROM level_data d LEFT JOIN level_settings s ON d.level_id = s.level_id WHERE d.hash = $hash"; command.Parameters.AddWithValue("$hash", xmlHash); using var reader = command.ExecuteReader(); if (!reader.HasRows) { return null; } var cld = new CachedLevelData(); cld.XmlHash = xmlHash; while (reader.Read()) { cld.Info.Nick = reader.GetString(reader.GetOrdinal("nick")); cld.Info.AudioFile = reader.GetString(reader.GetOrdinal("mp3_name")); cld.Info.Enemies = reader.GetInt32(reader.GetOrdinal("enemies")); cld.Info.Title = reader.GetString(reader.GetOrdinal("title")); cld.Info.Artist = reader.GetString(reader.GetOrdinal("artist")); cld.Info.Difficulty = reader.GetInt32(reader.GetOrdinal("difficulty")); cld.Info.Designer = reader.GetString(reader.GetOrdinal("designer")); cld.Info.HasHeart = reader.GetBoolean(reader.GetOrdinal("has_heart")); cld.Info.AudioPreviewPoint = reader.GetInt32(reader.GetOrdinal("audio_preview_point")); cld.Info.AdvancedFlag = reader.GetBoolean(reader.GetOrdinal("advanced_flag")); var audioDurationOrdinal = reader.GetOrdinal("audio_duration"); cld.AudioDuration = reader.IsDBNull(audioDurationOrdinal) ? null : (TimeSpan?)TimeSpan.FromMilliseconds(reader.GetDouble(audioDurationOrdinal)); cld.Playcount = reader.GetInt32(reader.GetOrdinal("playcount")); var scoreOrdinal = reader.GetOrdinal("best_score"); cld.BestScore = reader.IsDBNull(scoreOrdinal) ? null : reader.GetFloat(scoreOrdinal); cld.HeartGotten = reader.GetInt32(reader.GetOrdinal("heart_gotten")) > 0; var settings = new LevelSettings { InvertColors = reader.GetBoolean(reader.GetOrdinal("invert_colors")), ThirtyTicks = reader.GetBoolean(reader.GetOrdinal("thirty_ticks")), NaiveWarp = reader.GetBoolean(reader.GetOrdinal("naive_warp")), }; cld.Settings = settings; } return cld; })); }
public static void InsertLevelData(CachedLevelData cld) => DoQuery(command =>
private void LevelSelectScreen_LevelSelected(object sender, CachedLevelData cld, Mod mods) { var level = new SoundodgerLevel(cld.XmlPath); SwitchToArenaAndStart(level, mods, cld.Settings); }