diff --git a/osu.Game.Rulesets.PumpTrainer/Beatmaps/PumpTrainerBeatmapConverter.cs b/osu.Game.Rulesets.PumpTrainer/Beatmaps/PumpTrainerBeatmapConverter.cs index 9c7f7d8..5fc60d2 100644 --- a/osu.Game.Rulesets.PumpTrainer/Beatmaps/PumpTrainerBeatmapConverter.cs +++ b/osu.Game.Rulesets.PumpTrainer/Beatmaps/PumpTrainerBeatmapConverter.cs @@ -1,7 +1,6 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. -using System; using System.Collections.Generic; using System.Threading; using osu.Game.Beatmaps; diff --git a/osu.Game.Rulesets.PumpTrainer/Beatmaps/PumpTrainerHitObjectGenerator.cs b/osu.Game.Rulesets.PumpTrainer/Beatmaps/PumpTrainerHitObjectGenerator.cs index 87848a0..0504a6d 100644 --- a/osu.Game.Rulesets.PumpTrainer/Beatmaps/PumpTrainerHitObjectGenerator.cs +++ b/osu.Game.Rulesets.PumpTrainer/Beatmaps/PumpTrainerHitObjectGenerator.cs @@ -97,6 +97,7 @@ public class PumpTrainerHitObjectGenerator private PumpTrainerHitObjectGeneratorSettingsPerHitObject perHitObjectsettings; private int fullDoublesEdgeStreak = 0; + private int p1SinglesEdgeStreak = 0; public PumpTrainerHitObjectGenerator() { @@ -152,7 +153,7 @@ private Column getNextColumn(Foot nextFoot, Column previousColumn) banColumnsCausingBannedPatterns(candidateColumns, nextFoot == Foot.Left ? Foot.Right : Foot.Left); } - return getRandomCandidateColumn(candidateColumns); + return getRandomCandidateColumnWeighted(candidateColumns); } private List getCandidateColumns(Foot nextFoot, Column previousColumn, bool maximizeCandidateCount) @@ -576,7 +577,7 @@ private void banColumnsCausingBannedPatterns(List candidateColumns, Foot } } - private Column getRandomCandidateColumn(List candidateColumns) + private Column getRandomCandidateColumnWeighted(List candidateColumns) { if (candidateColumns.Count == 0) { @@ -604,23 +605,41 @@ private Column getRandomCandidateColumn(List candidateColumns) } } - // If full-doubles, increase the likelihood of the half-doubles area, - // especially if there's an edge streak going on + // If full-doubles, decrease the likelihood of a panel on the same column as the previous if on the edge if (Settings.AllowedColumns.Count == 10 && - columnToPhysicalColumn[candidateColumn] >= 1 && columnToPhysicalColumn[candidateColumn] <= 4) + fullDoublesEdgeStreak > 0 && + previousColumn != null && + columnToPhysicalColumn[candidateColumn] != columnToPhysicalColumn[previousColumn.Value]) { for (int i = 0; i < 4 * fullDoublesEdgeStreak; i++) { candidateColumnsWeighted.Add(candidateColumn); } } + + // Also apply for singles + if (Settings.AllowedColumns.SequenceEqual([Column.P1DL, Column.P1UL, Column.P1C, Column.P1UR, Column.P1DR]) && + p1SinglesEdgeStreak > 0 && + previousColumn != null && + columnToPhysicalColumn[candidateColumn] != columnToPhysicalColumn[previousColumn.Value]) + { + for (int i = 0; i < 4 * p1SinglesEdgeStreak; i++) + { + candidateColumnsWeighted.Add(candidateColumn); + } + } } Column selectedColumn = candidateColumnsWeighted[random.Next(candidateColumnsWeighted.Count)]; - fullDoublesEdgeStreak = columnToPhysicalColumn[selectedColumn] == 0 || columnToPhysicalColumn[selectedColumn] == 5 ? + fullDoublesEdgeStreak = + columnToPhysicalColumn[selectedColumn] == 0 || columnToPhysicalColumn[selectedColumn] == 5 ? fullDoublesEdgeStreak + 1 : 0; + p1SinglesEdgeStreak = + columnToPhysicalColumn[selectedColumn] == 0 || columnToPhysicalColumn[selectedColumn] == 2 ? + p1SinglesEdgeStreak + 1 : 0; + return selectedColumn; } diff --git a/osu.Game.Rulesets.PumpTrainer/Objects/Drawables/DrawablePumpTrainerHitObject.cs b/osu.Game.Rulesets.PumpTrainer/Objects/Drawables/DrawablePumpTrainerHitObject.cs index 75b2796..331918f 100644 --- a/osu.Game.Rulesets.PumpTrainer/Objects/Drawables/DrawablePumpTrainerHitObject.cs +++ b/osu.Game.Rulesets.PumpTrainer/Objects/Drawables/DrawablePumpTrainerHitObject.cs @@ -64,7 +64,7 @@ protected override void UpdateHitStateTransforms(ArmedState state) switch (state) { case ArmedState.Hit: - this.FadeOut().Expire(); // todo i guess + this.FadeOut().Expire(); break; case ArmedState.Miss: