Example #1
0
File: Map.cs Project: jaydn/Quaver
        /// <summary>
        ///     Responsible for converting a Qua object, to a Map object
        ///     a Map object is one that is stored in the db.
        /// </summary>
        /// <param name="qua"></param>
        /// <param name="path"></param>
        /// <returns></returns>
        public static Map FromQua(Qua qua, string path)
        {
            var map = new Map
            {
                Md5Checksum      = MapsetHelper.GetMd5Checksum(path),
                Directory        = new DirectoryInfo(System.IO.Path.GetDirectoryName(path) ?? throw new InvalidOperationException()).Name.Replace("\\", "/"),
                Path             = System.IO.Path.GetFileName(path)?.Replace("\\", "/"),
                Artist           = qua.Artist,
                Title            = qua.Title,
                HighestRank      = Grade.None,
                AudioPath        = qua.AudioFile,
                AudioPreviewTime = qua.SongPreviewTime,
                BackgroundPath   = qua.BackgroundFile,
                Description      = qua.Description,
                MapId            = qua.MapId,
                MapSetId         = qua.MapSetId,
                Bpm            = qua.GetCommonBpm(),
                Creator        = qua.Creator,
                DifficultyName = qua.DifficultyName,
                Source         = qua.Source,
                Tags           = qua.Tags,
                SongLength     = qua.Length,
                Mode           = qua.Mode,
            };

            map.LastFileWrite = File.GetLastWriteTimeUtc(map.Path);
            return(map);
        }
Example #2
0
File: Map.cs Project: AiAe/Quaver-1
        /// <summary>
        ///     Responsible for converting a Qua object, to a Map object
        ///     a Map object is one that is stored in the db.
        /// </summary>
        /// <param name="qua"></param>
        /// <param name="path"></param>
        /// <returns></returns>
        public static Map FromQua(Qua qua, string path, bool skipPathSetting = false)
        {
            var map = new Map
            {
                Artist           = qua.Artist,
                Title            = qua.Title,
                HighestRank      = Grade.None,
                AudioPath        = qua.AudioFile,
                AudioPreviewTime = qua.SongPreviewTime,
                BackgroundPath   = qua.BackgroundFile,
                Description      = qua.Description,
                MapId            = qua.MapId,
                MapSetId         = qua.MapSetId,
                Creator          = qua.Creator,
                DifficultyName   = qua.DifficultyName,
                Source           = qua.Source,
                Tags             = qua.Tags,
                SongLength       = qua.Length,
                Mode             = qua.Mode,
                RegularNoteCount = qua.HitObjects.Count(x => !x.IsLongNote),
                LongNoteCount    = qua.HitObjects.Count(x => x.IsLongNote),
            };

            if (!skipPathSetting)
            {
                try
                {
                    map.Md5Checksum   = MapsetHelper.GetMd5Checksum(path);
                    map.Directory     = new DirectoryInfo(System.IO.Path.GetDirectoryName(path) ?? throw new InvalidOperationException()).Name.Replace("\\", "/");
                    map.Path          = System.IO.Path.GetFileName(path)?.Replace("\\", "/");
                    map.LastFileWrite = File.GetLastWriteTimeUtc(map.Path);
                }
                // ReSharper disable once EmptyGeneralCatchClause
                catch (Exception)
                {
                }
            }

            try
            {
                map.Bpm = qua.GetCommonBpm();
            }
            catch (Exception)
            {
                map.Bpm = 0;
            }

            map.DateAdded = DateTime.Now;
            return(map);
        }
Example #3
0
        /// <summary>
        ///     Generate Scroll Velocity points.
        /// </summary>
        /// <param name="qua"></param>
        private void InitializeScrollVelocities(Qua qua)
        {
            // Find average bpm
            var commonBpm = qua.GetCommonBpm();

            // Create SV multiplier timing points
            var index = 0;

            for (var i = 0; i < qua.TimingPoints.Count; i++)
            {
                var svFound = false;

                // SV starts after the last timing point
                if (i == qua.TimingPoints.Count - 1)
                {
                    for (var j = index; j < qua.SliderVelocities.Count; j++)
                    {
                        var sv = new SliderVelocityInfo()
                        {
                            StartTime  = qua.SliderVelocities[j].StartTime,
                            Multiplier = qua.SliderVelocities[j].Multiplier * (float)(qua.TimingPoints[i].Bpm / commonBpm)
                        };
                        ScrollVelocities.Add(sv);

                        // Toggle SvFound if inheriting point is overlapping timing point
                        if (Math.Abs(sv.StartTime - qua.TimingPoints[i].StartTime) < 1)
                        {
                            svFound = true;
                        }
                    }
                }

                // SV does not start after the last timing point
                else
                {
                    for (var j = index; j < qua.SliderVelocities.Count; j++)
                    {
                        // SV starts before the first timing point
                        if (qua.SliderVelocities[j].StartTime < qua.TimingPoints[0].StartTime)
                        {
                            var sv = new SliderVelocityInfo()
                            {
                                StartTime  = qua.SliderVelocities[j].StartTime,
                                Multiplier = qua.SliderVelocities[j].Multiplier * (float)(qua.TimingPoints[0].Bpm / commonBpm)
                            };
                            ScrollVelocities.Add(sv);

                            // Toggle SvFound if inheriting point is overlapping timing point
                            if (Math.Abs(sv.StartTime - qua.TimingPoints[0].StartTime) < 1)
                            {
                                svFound = true;
                            }
                        }

                        // SV start is in between two timing points
                        else if (qua.SliderVelocities[j].StartTime >= qua.TimingPoints[i].StartTime &&
                                 qua.SliderVelocities[j].StartTime < qua.TimingPoints[i + 1].StartTime)
                        {
                            var sv = new SliderVelocityInfo()
                            {
                                StartTime  = qua.SliderVelocities[j].StartTime,
                                Multiplier = qua.SliderVelocities[j].Multiplier * (float)(qua.TimingPoints[i].Bpm / commonBpm)
                            };
                            ScrollVelocities.Add(sv);

                            // Toggle SvFound if inheriting point is overlapping timing point
                            if (Math.Abs(sv.StartTime - qua.TimingPoints[i].StartTime) < 1)
                            {
                                svFound = true;
                            }
                        }

                        // Update current index if SV falls out of range for optimization
                        else
                        {
                            index = j;
                            break;
                        }
                    }
                }

                // Create BPM SV if no inheriting point is overlapping the current timing point
                if (!svFound)
                {
                    var sv = new SliderVelocityInfo()
                    {
                        StartTime  = qua.TimingPoints[i].StartTime,
                        Multiplier = (float)(qua.TimingPoints[i].Bpm / commonBpm)
                    };
                    ScrollVelocities.Add(sv);
                }
            }

            // Sort SV points by start time
            ScrollVelocities = ScrollVelocities.OrderBy(o => o.StartTime).ToList();
        }