diff --git a/Directory.Build.props b/Directory.Build.props
index 9735c78913..838851b712 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -18,10 +18,14 @@
+
+ true
+ $(NoWarn);CS1591
+
- NU1701
+ $(NoWarn);NU1701
ppy Pty Ltd
diff --git a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/PatternGenerator.cs b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/PatternGenerator.cs
index fba52dfc32..f989f22298 100644
--- a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/PatternGenerator.cs
+++ b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/PatternGenerator.cs
@@ -139,7 +139,7 @@ namespace osu.Game.Rulesets.Mania.Beatmaps.Patterns.Legacy
/// A function to retrieve the next column. If null, a randomisation scheme will be used.
/// A function to perform additional validation checks to determine if a column is a valid candidate for a .
/// The minimum column index. If null, is used.
- /// The maximum column index. If null, is used.
+ /// The maximum column index. If null, TotalColumns is used.
/// A list of patterns for which the validity of a column should be checked against.
/// A column is not a valid candidate if a occupies the same column in any of the patterns.
/// A column which has passed the check and for which there are no
@@ -184,7 +184,7 @@ namespace osu.Game.Rulesets.Mania.Beatmaps.Patterns.Legacy
/// Returns a random column index in the range [, ).
///
/// The minimum column index. If null, is used.
- /// The maximum column index. If null, is used.
+ /// The maximum column index. If null, is used.
protected int GetRandomColumn(int? lowerBound = null, int? upperBound = null) => Random.Next(lowerBound ?? RandomStart, upperBound ?? TotalColumns);
///
diff --git a/osu.Game/Beatmaps/BeatmapDifficulty.cs b/osu.Game/Beatmaps/BeatmapDifficulty.cs
index 8727431e0e..c56fec67aa 100644
--- a/osu.Game/Beatmaps/BeatmapDifficulty.cs
+++ b/osu.Game/Beatmaps/BeatmapDifficulty.cs
@@ -56,10 +56,22 @@ namespace osu.Game.Beatmaps
/// Maps a difficulty value [0, 10] to a two-piece linear range of values.
///
/// The difficulty value to be mapped.
- /// The values that define the two linear ranges.
- /// Minimum of the resulting range which will be achieved by a difficulty value of 0.
- /// Midpoint of the resulting range which will be achieved by a difficulty value of 5.
- /// Maximum of the resulting range which will be achieved by a difficulty value of 10.
+ /// The values that define the two linear ranges.
+ ///
+ /// -
+ /// od0
+ /// Minimum of the resulting range which will be achieved by a difficulty value of 0.
+ ///
+ /// -
+ /// od5
+ /// Midpoint of the resulting range which will be achieved by a difficulty value of 5.
+ ///
+ /// -
+ /// od10
+ /// Maximum of the resulting range which will be achieved by a difficulty value of 10.
+ ///
+ ///
+ ///
/// Value to which the difficulty value maps in the specified range.
public static double DifficultyRange(double difficulty, (double od0, double od5, double od10) range)
=> DifficultyRange(difficulty, range.od0, range.od5, range.od10);
diff --git a/osu.Game/Beatmaps/ControlPoints/ControlPointInfo.cs b/osu.Game/Beatmaps/ControlPoints/ControlPointInfo.cs
index c3e2b469ae..ce2783004c 100644
--- a/osu.Game/Beatmaps/ControlPoints/ControlPointInfo.cs
+++ b/osu.Game/Beatmaps/ControlPoints/ControlPointInfo.cs
@@ -218,7 +218,7 @@ namespace osu.Game.Beatmaps.ControlPoints
}
///
- /// Check whether should be added.
+ /// Check whether should be added.
///
/// The time to find the timing control point at.
/// A point to be added.
diff --git a/osu.Game/Beatmaps/Formats/Decoder.cs b/osu.Game/Beatmaps/Formats/Decoder.cs
index 40c329eb7e..45122f6312 100644
--- a/osu.Game/Beatmaps/Formats/Decoder.cs
+++ b/osu.Game/Beatmaps/Formats/Decoder.cs
@@ -93,7 +93,7 @@ namespace osu.Game.Beatmaps.Formats
///
/// Registers a fallback decoder instantiation function.
/// The fallback will be returned if the first non-empty line of the decoded stream does not match any known magic.
- /// Calling this method will overwrite any existing global fallback registration for type - use with caution.
+ /// Calling this method will overwrite any existing global fallback registration for type - use with caution.
///
/// Type of object being decoded.
/// A function that constructs the fallback.
diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs
index 8fa4eaf267..7cce2fb92f 100644
--- a/osu.Game/Database/ArchiveModelManager.cs
+++ b/osu.Game/Database/ArchiveModelManager.cs
@@ -54,13 +54,13 @@ namespace osu.Game.Database
public Action PostNotification { protected get; set; }
///
- /// Fired when a new becomes available in the database.
+ /// Fired when a new becomes available in the database.
/// This is not guaranteed to run on the update thread.
///
public event Action ItemAdded;
///
- /// Fired when a is removed from the database.
+ /// Fired when a is removed from the database.
/// This is not guaranteed to run on the update thread.
///
public event Action ItemRemoved;
@@ -95,7 +95,7 @@ namespace osu.Game.Database
}
///
- /// Import one or more items from filesystem .
+ /// Import one or more items from filesystem .
/// This will post notifications tracking progress.
///
/// One or more archive locations on disk.
@@ -173,7 +173,7 @@ namespace osu.Game.Database
}
///
- /// Import one from the filesystem and delete the file on success.
+ /// Import one from the filesystem and delete the file on success.
///
/// The archive location on disk.
/// An optional cancellation token.
@@ -275,7 +275,7 @@ namespace osu.Game.Database
}
///
- /// Import an item from a .
+ /// Import an item from a .
///
/// The model to be imported.
/// An optional archive to use for model population.
@@ -589,7 +589,7 @@ namespace osu.Game.Database
protected TModel CheckForExisting(TModel model) => model.Hash == null ? null : ModelStore.ConsumableItems.FirstOrDefault(b => b.Hash == model.Hash);
///
- /// After an existing is found during an import process, the default behaviour is to restore the existing
+ /// After an existing is found during an import process, the default behaviour is to restore the existing
/// item and skip the import. This method allows changing that behaviour.
///
/// The existing model.
diff --git a/osu.Game/Database/DownloadableArchiveModelManager.cs b/osu.Game/Database/DownloadableArchiveModelManager.cs
index a81dff3475..0b7d63f469 100644
--- a/osu.Game/Database/DownloadableArchiveModelManager.cs
+++ b/osu.Game/Database/DownloadableArchiveModelManager.cs
@@ -41,17 +41,17 @@ namespace osu.Game.Database
}
///
- /// Creates the download request for this .
+ /// Creates the download request for this .
///
- /// The to be downloaded.
+ /// The to be downloaded.
/// Whether this download should be optimised for slow connections. Generally means extras are not included in the download bundle.
/// The request object.
protected abstract ArchiveDownloadRequest CreateDownloadRequest(TModel model, bool minimiseDownloadSize);
///
- /// Begin a download for the requested .
+ /// Begin a download for the requested .
///
- /// The to be downloaded.
+ /// The to be downloaded.
/// Whether this download should be optimised for slow connections. Generally means extras are not included in the download bundle.
/// Whether the download was started.
public bool Download(TModel model, bool minimiseDownloadSize = false)
@@ -131,9 +131,9 @@ namespace osu.Game.Database
///
/// Performs implementation specific comparisons to determine whether a given model is present in the local store.
///
- /// The whose existence needs to be checked.
+ /// The whose existence needs to be checked.
/// The usable items present in the store.
- /// Whether the exists.
+ /// Whether the exists.
protected abstract bool CheckLocalAvailability(TModel model, IQueryable items);
public ArchiveDownloadRequest GetExistingDownload(TModel model) => currentDownloads.Find(r => r.Model.Equals(model));
diff --git a/osu.Game/Database/IModelDownloader.cs b/osu.Game/Database/IModelDownloader.cs
index f6f4b0aa42..17f1ccab06 100644
--- a/osu.Game/Database/IModelDownloader.cs
+++ b/osu.Game/Database/IModelDownloader.cs
@@ -14,34 +14,34 @@ namespace osu.Game.Database
where TModel : class
{
///
- /// Fired when a download begins.
+ /// Fired when a download begins.
///
event Action> DownloadBegan;
///
- /// Fired when a download is interrupted, either due to user cancellation or failure.
+ /// Fired when a download is interrupted, either due to user cancellation or failure.
///
event Action> DownloadFailed;
///
- /// Checks whether a given is already available in the local store.
+ /// Checks whether a given is already available in the local store.
///
- /// The whose existence needs to be checked.
- /// Whether the exists.
+ /// The whose existence needs to be checked.
+ /// Whether the exists.
bool IsAvailableLocally(TModel model);
///
- /// Begin a download for the requested .
+ /// Begin a download for the requested .
///
- /// The to be downloaded.
+ /// The to be downloaded.
/// Whether this download should be optimised for slow connections. Generally means extras are not included in the download bundle..
/// Whether the download was started.
bool Download(TModel model, bool minimiseDownloadSize);
///
- /// Gets an existing download request if it exists.
+ /// Gets an existing download request if it exists.
///
- /// The whose request is wanted.
+ /// The whose request is wanted.
/// The object if it exists, otherwise null.
ArchiveDownloadRequest GetExistingDownload(TModel model);
}
diff --git a/osu.Game/Database/IModelManager.cs b/osu.Game/Database/IModelManager.cs
index 884814cb38..1bdbbb48e6 100644
--- a/osu.Game/Database/IModelManager.cs
+++ b/osu.Game/Database/IModelManager.cs
@@ -6,7 +6,7 @@ using System;
namespace osu.Game.Database
{
///
- /// Represents a model manager that publishes events when s are added or removed.
+ /// Represents a model manager that publishes events when s are added or removed.
///
/// The model type.
public interface IModelManager
diff --git a/osu.Game/Database/MutableDatabaseBackedStore.cs b/osu.Game/Database/MutableDatabaseBackedStore.cs
index 39a48b5be6..4ca1eef989 100644
--- a/osu.Game/Database/MutableDatabaseBackedStore.cs
+++ b/osu.Game/Database/MutableDatabaseBackedStore.cs
@@ -30,7 +30,7 @@ namespace osu.Game.Database
public IQueryable ConsumableItems => AddIncludesForConsumption(ContextFactory.Get().Set());
///
- /// Add a to the database.
+ /// Add a to the database.
///
/// The item to add.
public void Add(T item)
@@ -45,7 +45,7 @@ namespace osu.Game.Database
}
///
- /// Update a in the database.
+ /// Update a in the database.
///
/// The item to update.
public void Update(T item)
@@ -58,7 +58,7 @@ namespace osu.Game.Database
}
///
- /// Delete a from the database.
+ /// Delete a from the database.
///
/// The item to delete.
public bool Delete(T item)
@@ -77,7 +77,7 @@ namespace osu.Game.Database
}
///
- /// Restore a from a deleted state.
+ /// Restore a from a deleted state.
///
/// The item to undelete.
public bool Undelete(T item)
diff --git a/osu.Game/Graphics/Sprites/OsuSpriteText.cs b/osu.Game/Graphics/Sprites/OsuSpriteText.cs
index ed771bb03f..cd988c347b 100644
--- a/osu.Game/Graphics/Sprites/OsuSpriteText.cs
+++ b/osu.Game/Graphics/Sprites/OsuSpriteText.cs
@@ -19,7 +19,7 @@ namespace osu.Game.Graphics.Sprites
public static class OsuSpriteTextTransformExtensions
{
///
- /// Sets to a new value after a duration.
+ /// Sets Text to a new value after a duration.
///
/// A to which further transforms can be added.
public static TransformSequence TransformTextTo(this T spriteText, string newText, double duration = 0, Easing easing = Easing.None)
@@ -27,7 +27,7 @@ namespace osu.Game.Graphics.Sprites
=> spriteText.TransformTo(nameof(OsuSpriteText.Text), newText, duration, easing);
///
- /// Sets to a new value after a duration.
+ /// Sets Text to a new value after a duration.
///
/// A to which further transforms can be added.
public static TransformSequence TransformTextTo(this TransformSequence t, string newText, double duration = 0, Easing easing = Easing.None)
diff --git a/osu.Game/Graphics/UserInterface/IconButton.cs b/osu.Game/Graphics/UserInterface/IconButton.cs
index 27427581fd..d7e5666545 100644
--- a/osu.Game/Graphics/UserInterface/IconButton.cs
+++ b/osu.Game/Graphics/UserInterface/IconButton.cs
@@ -16,7 +16,7 @@ namespace osu.Game.Graphics.UserInterface
private Color4? iconColour;
///
- /// The icon colour. This does not affect .
+ /// The icon colour. This does not affect Colour.
///
public Color4 IconColour
{
@@ -49,7 +49,7 @@ namespace osu.Game.Graphics.UserInterface
}
///
- /// The icon scale. This does not affect .
+ /// The icon scale. This does not affect Scale.
///
public Vector2 IconScale
{
diff --git a/osu.Game/Graphics/UserInterface/OsuTabControl.cs b/osu.Game/Graphics/UserInterface/OsuTabControl.cs
index 5d1bdc62e9..585a46f3e1 100644
--- a/osu.Game/Graphics/UserInterface/OsuTabControl.cs
+++ b/osu.Game/Graphics/UserInterface/OsuTabControl.cs
@@ -32,7 +32,7 @@ namespace osu.Game.Graphics.UserInterface
protected virtual float StripHeight() => 1;
///
- /// Whether entries should be automatically populated if is an type.
+ /// Whether entries should be automatically populated if is an type.
///
protected virtual bool AddEnumEntriesAutomatically => true;
diff --git a/osu.Game/Input/Bindings/DatabasedKeyBindingContainer.cs b/osu.Game/Input/Bindings/DatabasedKeyBindingContainer.cs
index f34b8f14b0..ea274284ac 100644
--- a/osu.Game/Input/Bindings/DatabasedKeyBindingContainer.cs
+++ b/osu.Game/Input/Bindings/DatabasedKeyBindingContainer.cs
@@ -30,7 +30,7 @@ namespace osu.Game.Input.Bindings
///
/// A reference to identify the current . Used to lookup mappings. Null for global mappings.
/// An optional variant for the specified . Used when a ruleset has more than one possible keyboard layouts.
- /// Specify how to deal with multiple matches of s and s.
+ /// Specify how to deal with multiple matches of s and s.
public DatabasedKeyBindingContainer(RulesetInfo ruleset = null, int? variant = null, SimultaneousBindingMode simultaneousMode = SimultaneousBindingMode.None)
: base(simultaneousMode)
{
diff --git a/osu.Game/Online/DownloadTrackingComposite.cs b/osu.Game/Online/DownloadTrackingComposite.cs
index 7bfdc7ff69..dcec17788a 100644
--- a/osu.Game/Online/DownloadTrackingComposite.cs
+++ b/osu.Game/Online/DownloadTrackingComposite.cs
@@ -11,7 +11,7 @@ using osu.Game.Online.API;
namespace osu.Game.Online
{
///
- /// A component which tracks a through potential download/import/deletion.
+ /// A component which tracks a through potential download/import/deletion.
///
public abstract class DownloadTrackingComposite : CompositeDrawable
where TModel : class, IEquatable
@@ -22,7 +22,7 @@ namespace osu.Game.Online
private TModelManager manager;
///
- /// Holds the current download state of the , whether is has already been downloaded, is in progress, or is not downloaded.
+ /// Holds the current download state of the , whether is has already been downloaded, is in progress, or is not downloaded.
///
protected readonly Bindable State = new Bindable();
diff --git a/osu.Game/Overlays/OnScreenDisplay.cs b/osu.Game/Overlays/OnScreenDisplay.cs
index a92320945e..e6708093c4 100644
--- a/osu.Game/Overlays/OnScreenDisplay.cs
+++ b/osu.Game/Overlays/OnScreenDisplay.cs
@@ -86,7 +86,7 @@ namespace osu.Game.Overlays
/// The object that registered the to be tracked.
/// The that is being tracked.
/// If is null.
- /// If is not being tracked from the same .
+ /// If is not being tracked from the same .
public void StopTracking(object source, ITrackableConfigManager configManager)
{
if (configManager == null) throw new ArgumentNullException(nameof(configManager));
diff --git a/osu.Game/Rulesets/UI/DrawableRuleset.cs b/osu.Game/Rulesets/UI/DrawableRuleset.cs
index d1749d33c0..aec0e58a10 100644
--- a/osu.Game/Rulesets/UI/DrawableRuleset.cs
+++ b/osu.Game/Rulesets/UI/DrawableRuleset.cs
@@ -246,9 +246,9 @@ namespace osu.Game.Rulesets.UI
}
///
- /// Creates and adds the visual representation of a to this .
+ /// Creates and adds the visual representation of a to this .
///
- /// The to add the visual representation for.
+ /// The to add the visual representation for.
private void addHitObject(TObject hitObject)
{
var drawableObject = CreateDrawableRepresentation(hitObject);
diff --git a/osu.Game/Rulesets/UI/Scrolling/Algorithms/IScrollAlgorithm.cs b/osu.Game/Rulesets/UI/Scrolling/Algorithms/IScrollAlgorithm.cs
index b7a5eedc22..5f053975c7 100644
--- a/osu.Game/Rulesets/UI/Scrolling/Algorithms/IScrollAlgorithm.cs
+++ b/osu.Game/Rulesets/UI/Scrolling/Algorithms/IScrollAlgorithm.cs
@@ -13,7 +13,7 @@ namespace osu.Game.Rulesets.UI.Scrolling.Algorithms
///
/// The point in time.
/// The amount of visible time.
- /// The time at which enters .
+ /// The time at which enters .
double GetDisplayStartTime(double time, double timeRange);
///
@@ -22,7 +22,7 @@ namespace osu.Game.Rulesets.UI.Scrolling.Algorithms
/// The start time.
/// The end time.
/// The amount of visible time.
- /// The absolute spatial length through .
+ /// The absolute spatial length through .
/// The absolute spatial length.
float GetLength(double startTime, double endTime, double timeRange, float scrollLength);
@@ -32,7 +32,7 @@ namespace osu.Game.Rulesets.UI.Scrolling.Algorithms
/// The time to compute the spatial position of.
/// The current time.
/// The amount of visible time.
- /// The absolute spatial length through .
+ /// The absolute spatial length through .
/// The absolute spatial position.
float PositionAt(double time, double currentTime, double timeRange, float scrollLength);
@@ -42,7 +42,7 @@ namespace osu.Game.Rulesets.UI.Scrolling.Algorithms
/// The absolute spatial position.
/// The current time.
/// The amount of visible time.
- /// The absolute spatial length through .
+ /// The absolute spatial length through .
/// The time at which == .
double TimeAt(float position, double currentTime, double timeRange, float scrollLength);
diff --git a/osu.Game/Scoring/ScoreInfo.cs b/osu.Game/Scoring/ScoreInfo.cs
index d3c37bd4f4..f7bac82e74 100644
--- a/osu.Game/Scoring/ScoreInfo.cs
+++ b/osu.Game/Scoring/ScoreInfo.cs
@@ -183,6 +183,10 @@ namespace osu.Game.Scoring
public override string ToString() => $"{User} playing {Beatmap}";
- public bool Equals(ScoreInfo other) => other?.OnlineScoreID == OnlineScoreID;
+ public bool Equals(ScoreInfo other) =>
+ other != null
+ && other.OnlineScoreID == OnlineScoreID
+ && other.BeatmapInfoID == BeatmapInfoID
+ && other.Hash == Hash;
}
}
diff --git a/osu.Game/Scoring/ScoreManager.cs b/osu.Game/Scoring/ScoreManager.cs
index 8475158c78..3279af05b6 100644
--- a/osu.Game/Scoring/ScoreManager.cs
+++ b/osu.Game/Scoring/ScoreManager.cs
@@ -69,6 +69,6 @@ namespace osu.Game.Scoring
protected override ArchiveDownloadRequest CreateDownloadRequest(ScoreInfo score, bool minimiseDownload) => new DownloadReplayRequest(score);
- protected override bool CheckLocalAvailability(ScoreInfo model, IQueryable items) => items.Any(s => s.OnlineScoreID == model.OnlineScoreID && s.Files.Any());
+ protected override bool CheckLocalAvailability(ScoreInfo model, IQueryable items) => items.Any(s => s.Equals(model) && s.Files.Any());
}
}
diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs
index c3436ffd45..fa0ca3d9b3 100644
--- a/osu.Game/Screens/Select/BeatmapCarousel.cs
+++ b/osu.Game/Screens/Select/BeatmapCarousel.cs
@@ -351,7 +351,7 @@ namespace osu.Game.Screens.Select
///
/// Half the height of the visible content.
///
- /// This is different from the height of , since
+ /// This is different from the height of .displayableContent, since
/// the beatmap carousel bleeds into the and the
///
///