Exemple #1
0
        private ConvertResult convert(string name)
        {
            var beatmap = getBeatmap(name);

            var rulesetInstance = CreateRuleset();

            beatmap.BeatmapInfo.Ruleset = beatmap.BeatmapInfo.RulesetID == rulesetInstance.RulesetInfo.ID ? rulesetInstance.RulesetInfo : new RulesetInfo();

            Converter = rulesetInstance.CreateBeatmapConverter(beatmap);

            var result = new ConvertResult();

            Converter.ObjectConverted += (orig, converted) =>
            {
                converted.ForEach(h => h.ApplyDefaults(beatmap.ControlPointInfo, beatmap.BeatmapInfo.BaseDifficulty));

                var mapping = CreateConvertMapping();
                mapping.StartTime = orig.StartTime;

                foreach (var obj in converted)
                {
                    mapping.Objects.AddRange(CreateConvertValue(obj));
                }
                result.Mappings.Add(mapping);
            };

            IBeatmap convertedBeatmap = Converter.Convert();

            rulesetInstance.CreateBeatmapProcessor(convertedBeatmap)?.PostProcess();

            return(result);
        }
 public void ApplyToBeatmapConverter(IBeatmapConverter beatmapConverter)
 {
     if (beatmapConverter is HexBeatmapConverter c)
     {
         c.CustomLaneCount = _lanes;
     }
 }
Exemple #3
0
        public IBeatmap GetPlayableBeatmap(RulesetInfo ruleset, IReadOnlyList <Mod> mods)
        {
            var rulesetInstance = ruleset.CreateInstance();

            IBeatmapConverter converter = CreateBeatmapConverter(Beatmap, rulesetInstance);

            // Check if the beatmap can be converted
            if (!converter.CanConvert)
            {
                throw new BeatmapInvalidForRulesetException($"{nameof(Beatmaps.Beatmap)} can not be converted for the ruleset (ruleset: {ruleset.InstantiationInfo}, converter: {converter}).");
            }

            // Apply conversion mods
            foreach (var mod in mods.OfType <IApplicableToBeatmapConverter>())
            {
                mod.ApplyToBeatmapConverter(converter);
            }

            // Convert
            IBeatmap converted = converter.Convert();

            // Apply difficulty mods
            if (mods.Any(m => m is IApplicableToDifficulty))
            {
                converted.BeatmapInfo = converted.BeatmapInfo.Clone();
                converted.BeatmapInfo.BaseDifficulty = converted.BeatmapInfo.BaseDifficulty.Clone();

                foreach (var mod in mods.OfType <IApplicableToDifficulty>())
                {
                    mod.ApplyToDifficulty(converted.BeatmapInfo.BaseDifficulty);
                }
            }

            IBeatmapProcessor processor = rulesetInstance.CreateBeatmapProcessor(converted);

            processor?.PreProcess();

            // Compute default values for hitobjects, including creating nested hitobjects in-case they're needed
            foreach (var obj in converted.HitObjects)
            {
                obj.ApplyDefaults(converted.ControlPointInfo, converted.BeatmapInfo.BaseDifficulty);
            }

            foreach (var mod in mods.OfType <IApplicableToHitObject>())
            {
                foreach (var obj in converted.HitObjects)
                {
                    mod.ApplyToHitObject(obj);
                }
            }

            processor?.PostProcess();

            foreach (var mod in mods.OfType <IApplicableToBeatmap>())
            {
                mod.ApplyToBeatmap(converted);
            }

            return(converted);
        }
Exemple #4
0
        public void ApplyToBeatmapConverter(IBeatmapConverter beatmapConverter)
        {
            var converter = (TauBeatmapConverter)beatmapConverter;

            converter.CanConvertToSliders   = !ToggleSliders.Value;
            converter.CanConvertToHardBeats = !ToggleHardBeats.Value;
            converter.SliderDivisionLevel   = SlidersDivisionLevel.Value;
        }
Exemple #5
0
        public CrossConvertMapping(IBeatmapConverter converter)
        {
            var crossConverter = (CrossBeatmapConverter)converter;

            RandomW = crossConverter.Random.W;
            RandomX = crossConverter.Random.X;
            RandomY = crossConverter.Random.Y;
            RandomZ = crossConverter.Random.Z;
        }
Exemple #6
0
        public RngSnapshot(IBeatmapConverter converter)
        {
            var maniaConverter = (ManiaBeatmapConverter)converter;

            RandomW = maniaConverter.Random.W;
            RandomX = maniaConverter.Random.X;
            RandomY = maniaConverter.Random.Y;
            RandomZ = maniaConverter.Random.Z;
        }
        public ManiaConvertMapping(IBeatmapConverter converter)
        {
            var maniaConverter = (ManiaBeatmapConverter)converter;

            RandomW = maniaConverter.Random.W;
            RandomX = maniaConverter.Random.X;
            RandomY = maniaConverter.Random.Y;
            RandomZ = maniaConverter.Random.Z;
        }
Exemple #8
0
        public RushBeatmapConverter(IBeatmap beatmap, Ruleset ruleset)
        {
            bool crafted = !string.IsNullOrEmpty(beatmap.Metadata.Tags) &&
                           beatmap.Metadata.Tags
                           .Split(" ")
                           .Any(tag => tag.Equals(CRAFTED_TAG, StringComparison.OrdinalIgnoreCase));

            BackedConverter = crafted
                ? (IBeatmapConverter) new RushCraftedBeatmapConverter(beatmap, ruleset)
                : new RushGeneratedBeatmapConverter(beatmap, ruleset);
        }
Exemple #9
0
        public void ApplyToBeatmapConverter(IBeatmapConverter beatmapConverter)
        {
            if (EnableTwinNotes.Value)
            {
                (beatmapConverter as SentakkiBeatmapConverter).EnabledExperiments.Value |= ConversionExperiments.twinNotes;
            }

            if (EnableTwinSlides.Value)
            {
                (beatmapConverter as SentakkiBeatmapConverter).EnabledExperiments.Value |= ConversionExperiments.twinSlides;
            }
        }
Exemple #10
0
        public void ApplyToBeatmapConverter(IBeatmapConverter beatmapConverter)
        {
            var mbc = (ManiaBeatmapConverter)beatmapConverter;

            // Although this can work, for now let's not allow keymods for mania-specific beatmaps
            if (mbc.IsForCurrentRuleset)
            {
                return;
            }

            mbc.TargetColumns = KeyCount;
        }
        public void ApplyToBeatmapConverter(IBeatmapConverter beatmapConverter)
        {
            var mbc = (ManiaBeatmapConverter)beatmapConverter;

            isForCurrentRuleset = mbc.IsForCurrentRuleset;

            // Although this can work, for now let's not allow keymods for mania-specific beatmaps
            if (isForCurrentRuleset)
            {
                return;
            }

            mbc.Dual = true;
        }
Exemple #12
0
        public virtual IBeatmap GetPlayableBeatmap(IRulesetInfo ruleset, IReadOnlyList <Mod> mods, CancellationToken token)
        {
            var rulesetInstance = ruleset.CreateInstance();

            if (rulesetInstance == null)
            {
                throw new RulesetLoadException("Creating ruleset instance failed when attempting to create playable beatmap.");
            }

            IBeatmapConverter converter = CreateBeatmapConverter(Beatmap, rulesetInstance);

            // Check if the beatmap can be converted
            if (Beatmap.HitObjects.Count > 0 && !converter.CanConvert())
            {
                throw new BeatmapInvalidForRulesetException($"{nameof(Beatmaps.Beatmap)} can not be converted for the ruleset (ruleset: {ruleset.InstantiationInfo}, converter: {converter}).");
            }

            // Apply conversion mods
            foreach (var mod in mods.OfType <IApplicableToBeatmapConverter>())
            {
                token.ThrowIfCancellationRequested();
                mod.ApplyToBeatmapConverter(converter);
            }

            // Convert
            IBeatmap converted = converter.Convert(token);

            // Apply conversion mods to the result
            foreach (var mod in mods.OfType <IApplicableAfterBeatmapConversion>())
            {
                token.ThrowIfCancellationRequested();
                mod.ApplyToBeatmap(converted);
            }

            // Apply difficulty mods
            if (mods.Any(m => m is IApplicableToDifficulty))
            {
                foreach (var mod in mods.OfType <IApplicableToDifficulty>())
                {
                    token.ThrowIfCancellationRequested();
                    mod.ApplyToDifficulty(converted.Difficulty);
                }
            }

            IBeatmapProcessor processor = rulesetInstance.CreateBeatmapProcessor(converted);

            foreach (var mod in mods.OfType <IApplicableToBeatmapProcessor>())
            {
                mod.ApplyToBeatmapProcessor(processor);
            }

            processor?.PreProcess();

            // Compute default values for hitobjects, including creating nested hitobjects in-case they're needed
            foreach (var obj in converted.HitObjects)
            {
                token.ThrowIfCancellationRequested();
                obj.ApplyDefaults(converted.ControlPointInfo, converted.Difficulty, token);
            }

            foreach (var mod in mods.OfType <IApplicableToHitObject>())
            {
                foreach (var obj in converted.HitObjects)
                {
                    token.ThrowIfCancellationRequested();
                    mod.ApplyToHitObject(obj);
                }
            }

            processor?.PostProcess();

            foreach (var mod in mods.OfType <IApplicableToBeatmap>())
            {
                token.ThrowIfCancellationRequested();
                mod.ApplyToBeatmap(converted);
            }

            return(converted);
        }
Exemple #13
0
        public IBeatmap GetPlayableBeatmap(RulesetInfo ruleset, IReadOnlyList <Mod> mods = null, TimeSpan?timeout = null)
        {
            using (var cancellationSource = createCancellationTokenSource(timeout))
            {
                mods ??= Array.Empty <Mod>();

                var rulesetInstance = ruleset.CreateInstance();

                IBeatmapConverter converter = CreateBeatmapConverter(Beatmap, rulesetInstance);

                // Check if the beatmap can be converted
                if (Beatmap.HitObjects.Count > 0 && !converter.CanConvert())
                {
                    throw new BeatmapInvalidForRulesetException($"{nameof(Beatmaps.Beatmap)} can not be converted for the ruleset (ruleset: {ruleset.InstantiationInfo}, converter: {converter}).");
                }

                // Apply conversion mods
                foreach (var mod in mods.OfType <IApplicableToBeatmapConverter>())
                {
                    if (cancellationSource.IsCancellationRequested)
                    {
                        throw new BeatmapLoadTimeoutException(BeatmapInfo);
                    }

                    mod.ApplyToBeatmapConverter(converter);
                }

                // Convert
                IBeatmap converted = converter.Convert();

                // Apply difficulty mods
                if (mods.Any(m => m is IApplicableToDifficulty))
                {
                    converted.BeatmapInfo = converted.BeatmapInfo.Clone();
                    converted.BeatmapInfo.BaseDifficulty = converted.BeatmapInfo.BaseDifficulty.Clone();

                    foreach (var mod in mods.OfType <IApplicableToDifficulty>())
                    {
                        if (cancellationSource.IsCancellationRequested)
                        {
                            throw new BeatmapLoadTimeoutException(BeatmapInfo);
                        }

                        mod.ApplyToDifficulty(converted.BeatmapInfo.BaseDifficulty);
                    }
                }

                IBeatmapProcessor processor = rulesetInstance.CreateBeatmapProcessor(converted);

                processor?.PreProcess();

                // Compute default values for hitobjects, including creating nested hitobjects in-case they're needed
                foreach (var obj in converted.HitObjects)
                {
                    if (cancellationSource.IsCancellationRequested)
                    {
                        throw new BeatmapLoadTimeoutException(BeatmapInfo);
                    }

                    obj.ApplyDefaults(converted.ControlPointInfo, converted.BeatmapInfo.BaseDifficulty);
                }

                foreach (var mod in mods.OfType <IApplicableToHitObject>())
                {
                    foreach (var obj in converted.HitObjects)
                    {
                        if (cancellationSource.IsCancellationRequested)
                        {
                            throw new BeatmapLoadTimeoutException(BeatmapInfo);
                        }

                        mod.ApplyToHitObject(obj);
                    }
                }

                processor?.PostProcess();

                foreach (var mod in mods.OfType <IApplicableToBeatmap>())
                {
                    cancellationSource.Token.ThrowIfCancellationRequested();
                    mod.ApplyToBeatmap(converted);
                }

                return(converted);
            }
        }
Exemple #14
0
        protected override void OnConversionGenerated(HitObject original, IEnumerable <HitObject> result, IBeatmapConverter beatmapConverter)
        {
            base.OnConversionGenerated(original, result, beatmapConverter);

            rngSnapshots[original] = new RngSnapshot(beatmapConverter);
        }
Exemple #15
0
        public void ApplyToBeatmapConverter(IBeatmapConverter beatmapConverter)
        {
            var bc = (DivaBeatmapConverter)beatmapConverter;

            bc.AllowDoubles = false;
        }
Exemple #16
0
        public void ApplyToBeatmapConverter(IBeatmapConverter beatmapConverter)
        {
            var bosuBeatmapConverter = (BosuBeatmapConverter)beatmapConverter;

            bosuBeatmapConverter.Symmetry = true;
        }
Exemple #17
0
        public void ApplyToBeatmapConverter(IBeatmapConverter beatmapConverter)
        {
            var bosuBeatmapConverter = (BosuBeatmapConverter)beatmapConverter;

            bosuBeatmapConverter.SlidersOnly = true;
        }
 protected virtual void OnConversionGenerated(HitObject original, IEnumerable <HitObject> result, IBeatmapConverter beatmapConverter)
 {
 }
Exemple #19
0
 public void ApplyToBeatmapConverter(IBeatmapConverter beatmapConverter)
 {
     ModCompatibility.ApplyMod(this, beatmapConverter);
 }
Exemple #20
0
        public void ApplyToBeatmapConverter(IBeatmapConverter beatmapConverter)
        {
            var bc = (DivaBeatmapConverter)beatmapConverter;

            bc.TargetButtons = KeyCount;
        }
 public void ApplyToBeatmapConverter(IBeatmapConverter beatmapConverter)
 {
     (beatmapConverter as SentakkiBeatmapConverter).Experimental = true;
 }