public static string FullOsuFileLocation(this Beatmap beatmap, string songsDirectory) { var beatmapDirectory = beatmap.BeatmapDirectory(songsDirectory); if (string.IsNullOrEmpty(beatmapDirectory) || string.IsNullOrEmpty(beatmap.OsuFileName)) { return(""); } return(Path.Combine(beatmapDirectory, beatmap.OsuFileName)); }
public static void Read(this Beatmap beatmap, SQLiteDataReader reader) { int i = 1; beatmap.TitleRoman = reader.GetString(i); i++; beatmap.ArtistRoman = reader.GetString(i); i++; beatmap.TitleUnicode = reader.GetString(i); i++; beatmap.ArtistUnicode = reader.GetString(i); i++; beatmap.Creator = reader.GetString(i); i++; beatmap.DiffName = reader.GetString(i); i++; beatmap.Mp3Name = reader.GetString(i); i++; beatmap.Md5 = reader.GetString(i); i++; beatmap.OsuFileName = reader.GetString(i); i++; beatmap.MaxBpm = reader.GetDouble(i); i++; beatmap.MinBpm = reader.GetDouble(i); i++; beatmap.Tags = reader.GetString(i); i++; beatmap.State = reader.GetByte(i); i++; beatmap.Circles = (short)reader.GetInt32(i); i++; beatmap.Sliders = (short)reader.GetInt32(i); i++; beatmap.Spinners = (short)reader.GetInt32(i); i++; beatmap.EditDate = reader.GetDateTime(i); i++; beatmap.ApproachRate = (float)reader.GetDouble(i); i++; beatmap.CircleSize = (float)reader.GetDouble(i); i++; beatmap.HpDrainRate = (float)reader.GetDouble(i); i++; beatmap.OverallDifficulty = (float)reader.GetDouble(i); i++; beatmap.SliderVelocity = reader.GetDouble(i); i++; beatmap.DrainingTime = reader.GetInt32(i); i++; beatmap.TotalTime = reader.GetInt32(i); i++; beatmap.PreviewTime = reader.GetInt32(i); i++; beatmap.MapId = reader.GetInt32(i); i++; beatmap.MapSetId = reader.GetInt32(i); i++; beatmap.ThreadId = reader.GetInt32(i); i++; beatmap.MapRating = reader.GetInt32(i); i++; beatmap.Offset = (short)reader.GetInt32(i); i++; beatmap.StackLeniency = (float)reader.GetDouble(i); i++; beatmap.PlayMode = (PlayMode)reader.GetByte(i); i++; beatmap.Source = reader.GetString(i); i++; beatmap.AudioOffset = (short)reader.GetInt32(i); i++; beatmap.LetterBox = reader.GetString(i); i++; beatmap.Played = reader.GetBoolean(i); i++; beatmap.LastPlayed = reader.GetDateTime(i); i++; beatmap.IsOsz2 = reader.GetBoolean(i); i++; beatmap.Dir = reader.GetString(i); i++; beatmap.LastSync = reader.GetDateTime(i); i++; beatmap.DisableHitsounds = reader.GetBoolean(i); i++; beatmap.DisableSkin = reader.GetBoolean(i); i++; beatmap.DisableSb = reader.GetBoolean(i); i++; beatmap.BgDim = reader.GetInt16(i); i++; beatmap.Somestuff = reader.GetInt16(i); i++; beatmap.VideoDir = reader.GetString(i); i++; beatmap.DeSerializeStars((byte[])reader.GetValue(i)); }
public static byte[] SerializeStars(this Beatmap bm) { using (MemoryStream mStream = new MemoryStream()) { mStream.WriteAll(bm.ModPpStars.Count); foreach (var stars in bm.ModPpStars) { var vals = bm.ModPpStars[stars.Key]; mStream.WriteAll((byte)stars.Key); mStream.WriteAll(vals.Count); foreach (var val in vals) { mStream.WriteAll(val.Key); mStream.WriteAll(val.Value); } } return(mStream.ToArray()); } }
public static void DeSerializeStars(this Beatmap bm, byte[] starsData) { using (MemoryStream mStream = new MemoryStream()) { mStream.Write(starsData, 0, starsData.Length); mStream.Position = 0; _binaryReader = new BinaryReader(mStream); int modesCount = _binaryReader.ReadInt32(); for (int i = 0; i < modesCount; i++) { var key = (PlayMode)_binaryReader.ReadInt32(); if (!bm.ModPpStars.ContainsKey(key)) { bm.ModPpStars.Add(key, new Dictionary <int, double>()); } var dict = bm.ModPpStars[key]; var starsCount = _binaryReader.ReadInt32(); for (int j = 0; j < starsCount; j++) { dict.Add(_binaryReader.ReadInt32(), _binaryReader.ReadDouble()); } } } }
ar_ms_step2 = 150; // ar5-10 public Dictionary <string, float> ApplyMods(Beatmap map, Mods mods) { float od = map.OverallDifficulty; float ar = map.ApproachRate; float cs = map.CircleSize; var retValue = new Dictionary <string, float>(); if ((mods & Mods.MapChanging) == 0) { retValue.Add("AR", ar); retValue.Add("CS", cs); retValue.Add("OD", od); return(retValue); } float speed = 1; if ((mods & Mods.Dt) != 0 || (mods & Mods.Nc) != 0) { speed *= 1.5f; } if ((mods & Mods.Ht) != 0) { speed *= 0.75f; } float od_multiplier = 1; if ((mods & Mods.Hr) != 0) { od_multiplier *= 1.4f; } if ((mods & Mods.Ez) != 0) { od_multiplier *= 0.5f; } od *= od_multiplier; float odms = od0_ms - (float)Math.Ceiling(od_ms_step * od); //ar float ar_multiplier = 1; if ((mods & Mods.Hr) != 0) { ar_multiplier *= 1.4f; } if ((mods & Mods.Ez) != 0) { ar_multiplier *= 0.5f; } ar *= ar_multiplier; float arms = ar <= 5 ? (ar0_ms - ar_ms_step1 * ar) : (ar5_ms - ar_ms_step2 * (ar - 5)); //cs float cs_multiplier = 1; if ((mods & Mods.Hr) != 0) { cs_multiplier *= 1.3f; } if ((mods & Mods.Ez) != 0) { cs_multiplier *= 0.5f; } // stats must be capped to 0-10 before HT/DT which bring them to a range // of -4.42 to 11.08 for OD and -5 to 11 for AR odms = Math.Min(od0_ms, Math.Max(od10_ms, odms)); arms = Math.Min(ar0_ms, Math.Max(ar10_ms, arms)); // apply speed-changing mods odms /= speed; arms /= speed; // convert OD and AR back into their stat form //od = (-(odms - od0_ms)) / od_ms_step; od = (od0_ms - odms) / od_ms_step; ar = ar <= 5.0f ? ((ar0_ms - arms) / ar_ms_step1) : (5.0f + (ar5_ms - arms) / ar_ms_step2); cs *= cs_multiplier; cs = Math.Max(0.0f, Math.Min(10.0f, cs)); retValue.Add("AR", ar); retValue.Add("CS", cs); retValue.Add("OD", od); if ((mods & Mods.SpeedChanging) == 0) { return(retValue); } return(retValue); }
public static string FullOsuFileLocation(this Beatmap beatmap, string songsDirectory) { return(Path.Combine(beatmap.BeatmapDirectory(songsDirectory), beatmap.OsuFileName)); }
public static string BeatmapDirectory(this Beatmap beatmap, string songsDirectory) { return(Path.Combine(songsDirectory, beatmap.Dir)); }
public static Dictionary <string, string> GetDict(this Beatmap bm, bool empty = false) { Dictionary <string, string> dict; if (bm == null || empty) { dict = new Dictionary <string, string> { { "!TitleRoman!", string.Empty }, { "!ArtistRoman!", string.Empty }, { "!TitleUnicode!", string.Empty }, { "!ArtistUnicode!", string.Empty }, { "!Creator!", string.Empty }, { "!DiffName!", string.Empty }, { "!Mp3Name!", string.Empty }, { "!Md5!", string.Empty }, { "!OsuFileName!", string.Empty }, { "!MaxBpm!", string.Empty }, { "!MinBpm!", string.Empty }, { "!Bpm!", string.Empty }, { "!tags!", string.Empty }, { "!state!", string.Empty }, { "!circles!", string.Empty }, { "!sliders!", string.Empty }, { "!spinners!", string.Empty }, { "!ar!", string.Empty }, { "!cs!", string.Empty }, { "!hp!", string.Empty }, { "!od!", string.Empty }, { "!sv!", string.Empty }, { "!starsNomod!", string.Empty }, { "!drainingtime!", string.Empty }, { "!totaltime!", string.Empty }, { "!previewtime!", string.Empty }, { "!mapid!", string.Empty }, { "!dl!", string.Empty }, { "!mapsetid!", string.Empty }, { "!threadid!", string.Empty }, { "!SL!", string.Empty }, { "!mode!", string.Empty }, { "!source!", string.Empty }, { "!dir!", string.Empty }, { "!lb!", string.Empty }, }; } else { dict = new Dictionary <string, string> { { "!TitleRoman!", bm.TitleRoman }, { "!ArtistRoman!", bm.ArtistRoman }, { "!TitleUnicode!", bm.TitleUnicode }, { "!ArtistUnicode!", bm.ArtistUnicode }, { "!Creator!", bm.Creator }, { "!DiffName!", bm.DiffName }, { "!Mp3Name!", bm.Mp3Name }, { "!Md5!", bm.Md5 }, { "!OsuFileName!", bm.OsuFileName }, { "!MaxBpm!", Math.Round(bm.MaxBpm, 2).ToString(CultureInfo.InvariantCulture) }, { "!MinBpm!", Math.Round(bm.MinBpm, 2).ToString(CultureInfo.InvariantCulture) }, { "!Bpm!", bm.MinBpm == bm.MaxBpm ? Math.Round(bm.MinBpm, 2).ToString(CultureInfo.InvariantCulture) : string.Format("{0} - {1}", Math.Round(bm.MinBpm, 2).ToString(CultureInfo.InvariantCulture), Math.Round(bm.MaxBpm, 2).ToString(CultureInfo.InvariantCulture)) }, { "!tags!", bm.Tags }, { "!state!", bm.StateStr }, { "!circles!", bm.Circles.ToString() }, { "!sliders!", bm.Sliders.ToString() }, { "!spinners!", bm.Spinners.ToString() }, { "!ar!", bm.ApproachRate.ToString(CultureInfo.InvariantCulture) }, { "!cs!", bm.CircleSize.ToString(CultureInfo.InvariantCulture) }, { "!hp!", bm.HpDrainRate.ToString(CultureInfo.InvariantCulture) }, { "!od!", bm.OverallDifficulty.ToString(CultureInfo.InvariantCulture) }, { "!sv!", bm.SliderVelocity.ToString(CultureInfo.InvariantCulture) }, { "!starsNomod!", bm.StarsNomod.ToString("##.###", CultureInfo.InvariantCulture) }, { "!drainingtime!", bm.DrainingTime.ToString() }, { "!totaltime!", bm.TotalTime.ToString() }, { "!previewtime!", bm.PreviewTime.ToString() }, { "!mapid!", bm.MapId.ToString() }, { "!dl!", bm.MapLink }, { "!mapsetid!", bm.MapSetId.ToString() }, { "!threadid!", bm.ThreadId.ToString() }, { "!SL!", bm.StackLeniency.ToString(CultureInfo.InvariantCulture) }, { "!mode!", bm.PlayMode.GetHashCode().ToString() }, { "!source!", bm.Source }, { "!dir!", bm.Dir }, { "!lb!", Environment.NewLine } }; } return(dict); }