示例#1
0
        private void LevelSelectScreen_ReplaySelected(object sender, CachedLevelData cld,
                                                      string replayId)
        {
            var level = new SoundodgerLevel(cld.XmlPath);

            LoadReplayAndStart(level, replayId, cld.Settings);
        }
示例#2
0
        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;
            }));
        }
示例#3
0
 public static void InsertLevelData(CachedLevelData cld) =>
 DoQuery(command =>
示例#4
0
        private void LevelSelectScreen_LevelSelected(object sender, CachedLevelData cld, Mod mods)
        {
            var level = new SoundodgerLevel(cld.XmlPath);

            SwitchToArenaAndStart(level, mods, cld.Settings);
        }