private LegacyRulesetOverride ReadSongRule(string ruleFile) { LegacyRulesetOverride rule = new LegacyRulesetOverride(); string[] lines = File.ReadAllLines(ruleFile); int lineNumber = 0; Action <string> proceedToLine = (string prefix) => { while (lineNumber < lines.Length) { if (lines[lineNumber].StartsWith(prefix)) { return; } lineNumber++; } }; Func <string, float> readNumber = (string prefix) => { proceedToLine(prefix); string[] splits = lines[lineNumber].Split(" = "); return(float.Parse(splits[1])); }; proceedToLine("[JudgmentDelta]"); rule.timeWindows = new List <float>() { readNumber("JUDGMENT_MISS") * kDefaultTickToPulse, readNumber("JUDGMENT_FAIR") * kDefaultTickToPulse, readNumber("JUDGMENT_GREAT") * kDefaultTickToPulse, readNumber("JUDGMENT_PERFECT") * kDefaultTickToPulse, readNumber("JUDGMENT_PERFECT2") * kDefaultTickToPulse }; rule.timeWindows.Reverse(); proceedToLine("[GaugeUpDownRate]"); rule.hpDeltaBasic = new List <int>() { (int)(readNumber("JUDGMENT_FAIL") * kHpDeltaCoeff), (int)(readNumber("JUDGMENT_MISS") * kHpDeltaCoeff), (int)(readNumber("JUDGMENT_FAIR") * kHpDeltaCoeff), (int)(readNumber("JUDGMENT_GREAT") * kHpDeltaCoeff), (int)(readNumber("JUDGMENT_PERFECT") * kHpDeltaCoeff), (int)(readNumber("JUDGMENT_PERFECT2") * kHpDeltaCoeff), }; rule.hpDeltaBasic.Reverse(); rule.hpDeltaDrag = new List <int>(rule.hpDeltaBasic); rule.hpDeltaHold = new List <int>(rule.hpDeltaBasic); rule.hpDeltaChain = new List <int>(rule.hpDeltaBasic); rule.hpDeltaRepeat = new List <int>(rule.hpDeltaBasic); rule.hpDeltaBasicDuringFever = HpDeltaDuringFeverFromHpDelta(rule.hpDeltaBasic); rule.hpDeltaDragDuringFever = new List <int>(rule.hpDeltaBasicDuringFever); rule.hpDeltaHoldDuringFever = new List <int>(rule.hpDeltaBasicDuringFever); rule.hpDeltaChainDuringFever = new List <int>(rule.hpDeltaBasicDuringFever); rule.hpDeltaRepeatDuringFever = new List <int>(rule.hpDeltaBasicDuringFever); return(rule); }
public Pattern() { patternMetadata = new PatternMetadata(); legacyRulesetOverride = new LegacyRulesetOverride(); bpmEvents = new List <BpmEvent>(); timeStops = new List <TimeStop>(); notes = new SortedSet <Note>(new NoteComparer()); }
private LegacyRulesetOverride CombineRule(LegacyRulesetOverride baseRule, LegacyRulesetOverride songRule) { LegacyRulesetOverride rule = new LegacyRulesetOverride(); rule.timeWindows = AddList(baseRule.timeWindows, songRule.timeWindows); rule.hpDeltaBasic = AddList(baseRule.hpDeltaBasic, songRule.hpDeltaBasic); rule.hpDeltaDrag = AddList(baseRule.hpDeltaDrag, songRule.hpDeltaDrag); rule.hpDeltaHold = AddList(baseRule.hpDeltaHold, songRule.hpDeltaHold); rule.hpDeltaChain = AddList(baseRule.hpDeltaChain, songRule.hpDeltaChain); rule.hpDeltaRepeat = AddList(baseRule.hpDeltaRepeat, songRule.hpDeltaRepeat); rule.hpDeltaBasicDuringFever = AddList(baseRule.hpDeltaBasicDuringFever, songRule.hpDeltaBasicDuringFever); rule.hpDeltaDragDuringFever = AddList(baseRule.hpDeltaDragDuringFever, songRule.hpDeltaDragDuringFever); rule.hpDeltaHoldDuringFever = AddList(baseRule.hpDeltaHoldDuringFever, songRule.hpDeltaHoldDuringFever); rule.hpDeltaChainDuringFever = AddList(baseRule.hpDeltaChainDuringFever, songRule.hpDeltaChainDuringFever); rule.hpDeltaRepeatDuringFever = AddList(baseRule.hpDeltaRepeatDuringFever, songRule.hpDeltaRepeatDuringFever); return(rule); }
private LegacyRulesetOverride ReadBaseRule(string baseRuleFile) { LegacyRulesetOverride rule = new LegacyRulesetOverride(); using StreamReader stream = new StreamReader(baseRuleFile); XmlReaderSettings settings = new XmlReaderSettings(); settings.CloseInput = true; using XmlReader reader = XmlReader.Create(stream, settings); Action <string> proceedToElement = (string elementName) => { while (reader.Read()) { if (reader.NodeType != XmlNodeType.Element) { continue; } if (reader.Name == elementName) { break; } } }; proceedToElement("PopMode"); proceedToElement("Delta"); proceedToElement("Delta"); Func <string, float> attributeToPulse = (string attribute) => float.Parse(reader.GetAttribute(attribute)) * kDefaultTickToPulse; rule.timeWindows = new List <float>() { attributeToPulse("NormalPerPect2"), attributeToPulse("NormalPerPect"), attributeToPulse("NormalGreat"), attributeToPulse("NormalFair"), attributeToPulse("NormalMiss") }; proceedToElement("Gauge"); Func <string, int> attributeToHpDelta = (string attribute) => (int)(float.Parse(reader.GetAttribute(attribute)) * kHpDeltaCoeff); proceedToElement("Gauge"); rule.hpDeltaBasic = new List <int>() { attributeToHpDelta("NormalPerPect2"), attributeToHpDelta("NormalPerPect"), attributeToHpDelta("NormalGreat"), attributeToHpDelta("NormalFair"), attributeToHpDelta("NormalMiss"), attributeToHpDelta("NormalFail") }; proceedToElement("Gauge"); rule.hpDeltaDrag = new List <int>() { attributeToHpDelta("LongPerPect2"), attributeToHpDelta("LongPerPect"), attributeToHpDelta("LongGreat"), attributeToHpDelta("LongFair"), attributeToHpDelta("LongMiss"), attributeToHpDelta("LongFail") }; proceedToElement("Gauge"); rule.hpDeltaHold = new List <int>() { attributeToHpDelta("HoldingPerPect2"), attributeToHpDelta("HoldingPerPect"), attributeToHpDelta("HoldingGreat"), attributeToHpDelta("HoldingFair"), attributeToHpDelta("HoldingMiss"), attributeToHpDelta("HoldingFail") }; proceedToElement("Gauge"); rule.hpDeltaChain = new List <int>() { attributeToHpDelta("PressPerPect2"), attributeToHpDelta("PressPerPect"), attributeToHpDelta("PressGreat"), attributeToHpDelta("PressFair"), attributeToHpDelta("PressMiss"), attributeToHpDelta("PressFail") }; proceedToElement("Gauge"); rule.hpDeltaRepeat = new List <int>() { attributeToHpDelta("OnePointPerPect2"), attributeToHpDelta("OnePointPerPect"), attributeToHpDelta("OnePointGreat"), attributeToHpDelta("OnePointFair"), attributeToHpDelta("OnePointMiss"), attributeToHpDelta("OnePointFail") }; rule.hpDeltaBasicDuringFever = HpDeltaDuringFeverFromHpDelta(rule.hpDeltaBasic); rule.hpDeltaDragDuringFever = HpDeltaDuringFeverFromHpDelta(rule.hpDeltaDrag); rule.hpDeltaHoldDuringFever = HpDeltaDuringFeverFromHpDelta(rule.hpDeltaHold); rule.hpDeltaChainDuringFever = HpDeltaDuringFeverFromHpDelta(rule.hpDeltaChain); rule.hpDeltaRepeatDuringFever = HpDeltaDuringFeverFromHpDelta(rule.hpDeltaRepeat); return(rule); }