Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 public Pattern()
 {
     patternMetadata       = new PatternMetadata();
     legacyRulesetOverride = new LegacyRulesetOverride();
     bpmEvents             = new List <BpmEvent>();
     timeStops             = new List <TimeStop>();
     notes = new SortedSet <Note>(new NoteComparer());
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }