1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-06 04:13:11 +08:00

Merge branch 'master' into fix-cursor-hiding

This commit is contained in:
Dean Herbert 2018-01-16 18:15:22 +09:00 committed by GitHub
commit 5edff5c5fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 65 additions and 66 deletions

View File

@ -45,7 +45,7 @@ namespace osu.Desktop
{ {
protected override string LocateBasePath() protected override string LocateBasePath()
{ {
Func<string, bool> checkExists = p => Directory.Exists(Path.Combine(p, "Songs")); bool checkExists(string p) => Directory.Exists(Path.Combine(p, "Songs"));
string stableInstallPath; string stableInstallPath;

View File

@ -58,6 +58,7 @@ namespace osu.Game.Rulesets.Catch.UI
public override void Add(DrawableHitObject h) public override void Add(DrawableHitObject h)
{ {
h.Depth = (float)h.HitObject.StartTime; h.Depth = (float)h.HitObject.StartTime;
h.OnJudgement += onJudgement;
base.Add(h); base.Add(h);
@ -65,6 +66,6 @@ namespace osu.Game.Rulesets.Catch.UI
fruit.CheckPosition = CheckIfWeCanCatch; fruit.CheckPosition = CheckIfWeCanCatch;
} }
public override void OnJudgement(DrawableHitObject judgedObject, Judgement judgement) => catcherArea.OnJudgement((DrawableCatchHitObject)judgedObject, judgement); private void onJudgement(DrawableHitObject judgedObject, Judgement judgement) => catcherArea.OnJudgement((DrawableCatchHitObject)judgedObject, judgement);
} }
} }

View File

@ -321,7 +321,7 @@ namespace osu.Game.Rulesets.Mania.Beatmaps.Patterns.Legacy
break; break;
} }
Func<SampleInfo, bool> isDoubleSample = sample => sample.Name == SampleInfo.HIT_CLAP && sample.Name == SampleInfo.HIT_FINISH; bool isDoubleSample(SampleInfo sample) => sample.Name == SampleInfo.HIT_CLAP && sample.Name == SampleInfo.HIT_FINISH;
bool canGenerateTwoNotes = (convertType & PatternType.LowProbability) == 0; bool canGenerateTwoNotes = (convertType & PatternType.LowProbability) == 0;
canGenerateTwoNotes &= HitObject.Samples.Any(isDoubleSample) || sampleInfoListAt(HitObject.StartTime).Any(isDoubleSample); canGenerateTwoNotes &= HitObject.Samples.Any(isDoubleSample) || sampleInfoListAt(HitObject.StartTime).Any(isDoubleSample);

View File

@ -204,12 +204,13 @@ namespace osu.Game.Rulesets.Mania.UI
public override void Add(DrawableHitObject hitObject) public override void Add(DrawableHitObject hitObject)
{ {
hitObject.Depth = (float)hitObject.HitObject.StartTime; hitObject.Depth = (float)hitObject.HitObject.StartTime;
hitObject.AccentColour = AccentColour; hitObject.AccentColour = AccentColour;
hitObject.OnJudgement += onJudgement;
HitObjects.Add(hitObject); HitObjects.Add(hitObject);
} }
public override void OnJudgement(DrawableHitObject judgedObject, Judgement judgement) private void onJudgement(DrawableHitObject judgedObject, Judgement judgement)
{ {
if (!judgement.IsHit) if (!judgement.IsHit)
return; return;

View File

@ -192,11 +192,8 @@ namespace osu.Game.Rulesets.Mania.UI
} }
} }
public override void OnJudgement(DrawableHitObject judgedObject, Judgement judgement) internal void OnJudgement(DrawableHitObject judgedObject, Judgement judgement)
{ {
var maniaObject = (ManiaHitObject)judgedObject.HitObject;
columns[maniaObject.Column].OnJudgement(judgedObject, judgement);
judgements.Clear(); judgements.Clear();
judgements.Add(new DrawableManiaJudgement(judgement) judgements.Add(new DrawableManiaJudgement(judgement)
{ {
@ -224,7 +221,11 @@ namespace osu.Game.Rulesets.Mania.UI
} }
} }
public override void Add(DrawableHitObject h) => Columns.ElementAt(((ManiaHitObject)h.HitObject).Column).Add(h); public override void Add(DrawableHitObject h)
{
h.OnJudgement += OnJudgement;
Columns.ElementAt(((ManiaHitObject)h.HitObject).Column).Add(h);
}
public void Add(DrawableBarLine barline) => HitObjects.Add(barline); public void Add(DrawableBarLine barline) => HitObjects.Add(barline);

View File

@ -70,6 +70,8 @@ namespace osu.Game.Rulesets.Osu.UI
{ {
h.Depth = (float)h.HitObject.StartTime; h.Depth = (float)h.HitObject.StartTime;
h.OnJudgement += onJudgement;
var c = h as IDrawableHitObjectWithProxiedApproach; var c = h as IDrawableHitObjectWithProxiedApproach;
if (c != null && ProxyApproachCircles) if (c != null && ProxyApproachCircles)
approachCircles.Add(c.ProxiedLayer.CreateProxy()); approachCircles.Add(c.ProxiedLayer.CreateProxy());
@ -84,7 +86,7 @@ namespace osu.Game.Rulesets.Osu.UI
.OrderBy(h => h.StartTime).OfType<OsuHitObject>(); .OrderBy(h => h.StartTime).OfType<OsuHitObject>();
} }
public override void OnJudgement(DrawableHitObject judgedObject, Judgement judgement) private void onJudgement(DrawableHitObject judgedObject, Judgement judgement)
{ {
var osuJudgement = (OsuJudgement)judgement; var osuJudgement = (OsuJudgement)judgement;
var osuObject = (OsuHitObject)judgedObject.HitObject; var osuObject = (OsuHitObject)judgedObject.HitObject;

View File

@ -143,18 +143,18 @@ namespace osu.Game.Rulesets.Taiko.Tests
var h = new DrawableTestHit(hit) { X = RNG.NextSingle(hitResult == HitResult.Good ? -0.1f : -0.05f, hitResult == HitResult.Good ? 0.1f : 0.05f) }; var h = new DrawableTestHit(hit) { X = RNG.NextSingle(hitResult == HitResult.Good ? -0.1f : -0.05f, hitResult == HitResult.Good ? 0.1f : 0.05f) };
rulesetContainer.Playfield.OnJudgement(h, new TaikoJudgement { Result = hitResult }); ((TaikoPlayfield)rulesetContainer.Playfield).OnJudgement(h, new TaikoJudgement { Result = hitResult });
if (RNG.Next(10) == 0) if (RNG.Next(10) == 0)
{ {
rulesetContainer.Playfield.OnJudgement(h, new TaikoJudgement { Result = hitResult }); ((TaikoPlayfield)rulesetContainer.Playfield).OnJudgement(h, new TaikoJudgement { Result = hitResult });
rulesetContainer.Playfield.OnJudgement(h, new TaikoStrongHitJudgement()); ((TaikoPlayfield)rulesetContainer.Playfield).OnJudgement(h, new TaikoStrongHitJudgement());
} }
} }
private void addMissJudgement() private void addMissJudgement()
{ {
rulesetContainer.Playfield.OnJudgement(new DrawableTestHit(new Hit()), new TaikoJudgement { Result = HitResult.Miss }); ((TaikoPlayfield)rulesetContainer.Playfield).OnJudgement(new DrawableTestHit(new Hit()), new TaikoJudgement { Result = HitResult.Miss });
} }
private void addBarLine(bool major, double delay = scroll_time) private void addBarLine(bool major, double delay = scroll_time)

View File

@ -209,6 +209,8 @@ namespace osu.Game.Rulesets.Taiko.UI
{ {
h.Depth = (float)h.HitObject.StartTime; h.Depth = (float)h.HitObject.StartTime;
h.OnJudgement += OnJudgement;
base.Add(h); base.Add(h);
var barline = h as DrawableBarLine; var barline = h as DrawableBarLine;
@ -221,7 +223,7 @@ namespace osu.Game.Rulesets.Taiko.UI
swell.OnStart += () => topLevelHitContainer.Add(swell.CreateProxy()); swell.OnStart += () => topLevelHitContainer.Add(swell.CreateProxy());
} }
public override void OnJudgement(DrawableHitObject judgedObject, Judgement judgement) internal void OnJudgement(DrawableHitObject judgedObject, Judgement judgement)
{ {
if (judgedObject.DisplayJudgement && judgementContainer.FirstOrDefault(j => j.JudgedObject == judgedObject) == null) if (judgedObject.DisplayJudgement && judgementContainer.FirstOrDefault(j => j.JudgedObject == judgedObject) == null)
{ {

View File

@ -117,8 +117,8 @@ namespace osu.Game.Tests.Beatmaps.IO
//ensure we were stored to beatmap database backing... //ensure we were stored to beatmap database backing...
Assert.IsTrue(resultSets.Count() == 1, $@"Incorrect result count found ({resultSets.Count()} but should be 1)."); Assert.IsTrue(resultSets.Count() == 1, $@"Incorrect result count found ({resultSets.Count()} but should be 1).");
Func<IEnumerable<BeatmapInfo>> queryBeatmaps = () => store.QueryBeatmaps(s => s.BeatmapSet.OnlineBeatmapSetID == 241526 && s.BaseDifficultyID > 0); IEnumerable<BeatmapInfo> queryBeatmaps() => store.QueryBeatmaps(s => s.BeatmapSet.OnlineBeatmapSetID == 241526 && s.BaseDifficultyID > 0);
Func<IEnumerable<BeatmapSetInfo>> queryBeatmapSets = () => store.QueryBeatmapSets(s => s.OnlineBeatmapSetID == 241526); IEnumerable<BeatmapSetInfo> queryBeatmapSets() => store.QueryBeatmapSets(s => s.OnlineBeatmapSetID == 241526);
//if we don't re-check here, the set will be inserted but the beatmaps won't be present yet. //if we don't re-check here, the set will be inserted but the beatmaps won't be present yet.
waitForOrAssert(() => queryBeatmaps().Count() == 12, waitForOrAssert(() => queryBeatmaps().Count() == 12,

View File

@ -65,7 +65,7 @@ namespace osu.Game.Tests.Visual
// this is by no means clean. should be replacing inside of OsuGameBase somehow. // this is by no means clean. should be replacing inside of OsuGameBase somehow.
var context = new OsuDbContext(); var context = new OsuDbContext();
Func<OsuDbContext> contextFactory = () => context; OsuDbContext contextFactory() => context;
dependencies.Cache(rulesets = new RulesetStore(contextFactory)); dependencies.Cache(rulesets = new RulesetStore(contextFactory));
dependencies.Cache(manager = new BeatmapManager(storage, contextFactory, rulesets, null) dependencies.Cache(manager = new BeatmapManager(storage, contextFactory, rulesets, null)

View File

@ -121,7 +121,7 @@ namespace osu.Game.Overlays
trackSetting(frameworkConfig.GetBindable<string>(FrameworkSetting.AudioDevice), v => display(v, "Audio Device", string.IsNullOrEmpty(v) ? "Default" : v, v)); trackSetting(frameworkConfig.GetBindable<string>(FrameworkSetting.AudioDevice), v => display(v, "Audio Device", string.IsNullOrEmpty(v) ? "Default" : v, v));
trackSetting(frameworkConfig.GetBindable<bool>(FrameworkSetting.ShowLogOverlay), v => display(v, "Debug Logs", v ? "visible" : "hidden", "Ctrl+F10")); trackSetting(frameworkConfig.GetBindable<bool>(FrameworkSetting.ShowLogOverlay), v => display(v, "Debug Logs", v ? "visible" : "hidden", "Ctrl+F10"));
Action displayResolution = delegate { display(null, "Screen Resolution", frameworkConfig.Get<int>(FrameworkSetting.Width) + "x" + frameworkConfig.Get<int>(FrameworkSetting.Height)); }; void displayResolution() => display(null, "Screen Resolution", frameworkConfig.Get<int>(FrameworkSetting.Width) + "x" + frameworkConfig.Get<int>(FrameworkSetting.Height));
trackSetting(frameworkConfig.GetBindable<int>(FrameworkSetting.Width), v => displayResolution()); trackSetting(frameworkConfig.GetBindable<int>(FrameworkSetting.Width), v => displayResolution());
trackSetting(frameworkConfig.GetBindable<int>(FrameworkSetting.Height), v => displayResolution()); trackSetting(frameworkConfig.GetBindable<int>(FrameworkSetting.Height), v => displayResolution());

View File

@ -319,11 +319,11 @@ namespace osu.Game.Overlays.Profile
colourBar.Show(); colourBar.Show();
} }
Action<SpriteText> boldItalic = t => void boldItalic(SpriteText t)
{ {
t.Font = @"Exo2.0-BoldItalic"; t.Font = @"Exo2.0-BoldItalic";
t.Alpha = 1; t.Alpha = 1;
}; }
if (user.Age != null) if (user.Age != null)
{ {

View File

@ -20,7 +20,7 @@ namespace osu.Game.Rulesets.Mods
{ {
const float ratio = 1.4f; const float ratio = 1.4f;
difficulty.CircleSize *= 1.3f; // CS uses a custom 1.3 ratio. difficulty.CircleSize *= 1.3f; // CS uses a custom 1.3 ratio.
difficulty.ApproachRate *= ratio; difficulty.ApproachRate = Math.Min(difficulty.ApproachRate * ratio, 10.0f);
difficulty.DrainRate *= ratio; difficulty.DrainRate *= ratio;
difficulty.OverallDifficulty *= ratio; difficulty.OverallDifficulty *= ratio;
} }

View File

@ -167,6 +167,11 @@ namespace osu.Game.Rulesets.Objects.Drawables
{ {
if (nestedHitObjects == null) if (nestedHitObjects == null)
nestedHitObjects = new List<DrawableHitObject>(); nestedHitObjects = new List<DrawableHitObject>();
h.OnJudgement += (d, j) => OnJudgement?.Invoke(d, j);
h.OnJudgementRemoved += (d, j) => OnJudgementRemoved?.Invoke(d, j);
h.ApplyCustomUpdateState += (d, j) => ApplyCustomUpdateState?.Invoke(d, j);
nestedHitObjects.Add(h); nestedHitObjects.Add(h);
} }

View File

@ -2,11 +2,11 @@
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System; using System;
using System.Collections.Generic;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Objects.Drawables;
using OpenTK; using OpenTK;
using osu.Game.Rulesets.Judgements;
using osu.Framework.Allocation; using osu.Framework.Allocation;
namespace osu.Game.Rulesets.UI namespace osu.Game.Rulesets.UI
@ -23,6 +23,13 @@ namespace osu.Game.Rulesets.UI
protected override Container<Drawable> Content => content; protected override Container<Drawable> Content => content;
private readonly Container<Drawable> content; private readonly Container<Drawable> content;
private List<Playfield> nestedPlayfields;
/// <summary>
/// All the <see cref="Playfield"/>s nested inside this playfield.
/// </summary>
public IReadOnlyList<Playfield> NestedPlayfields => nestedPlayfields;
/// <summary> /// <summary>
/// A container for keeping track of DrawableHitObjects. /// A container for keeping track of DrawableHitObjects.
/// </summary> /// </summary>
@ -64,7 +71,7 @@ namespace osu.Game.Rulesets.UI
/// <summary> /// <summary>
/// Performs post-processing tasks (if any) after all DrawableHitObjects are loaded into this Playfield. /// Performs post-processing tasks (if any) after all DrawableHitObjects are loaded into this Playfield.
/// </summary> /// </summary>
public virtual void PostProcess() { } public virtual void PostProcess() => nestedPlayfields?.ForEach(p => p.PostProcess());
/// <summary> /// <summary>
/// Adds a DrawableHitObject to this Playfield. /// Adds a DrawableHitObject to this Playfield.
@ -79,11 +86,17 @@ namespace osu.Game.Rulesets.UI
public virtual void Remove(DrawableHitObject h) => HitObjects.Remove(h); public virtual void Remove(DrawableHitObject h) => HitObjects.Remove(h);
/// <summary> /// <summary>
/// Triggered when a new <see cref="Judgement"/> occurs on a <see cref="DrawableHitObject"/>. /// Registers a <see cref="Playfield"/> as a nested <see cref="Playfield"/>.
/// This does not add the <see cref="Playfield"/> to the draw hierarchy.
/// </summary> /// </summary>
/// <param name="judgedObject">The object that <paramref name="judgement"/> occured for.</param> /// <param name="otherPlayfield">The <see cref="Playfield"/> to add.</param>
/// <param name="judgement">The <see cref="Judgement"/> that occurred.</param> protected void AddNested(Playfield otherPlayfield)
public virtual void OnJudgement(DrawableHitObject judgedObject, Judgement judgement) { } {
if (nestedPlayfields == null)
nestedPlayfields = new List<Playfield>();
nestedPlayfields.Add(otherPlayfield);
}
/// <summary> /// <summary>
/// Creates the container that will be used to contain the <see cref="DrawableHitObject"/>s. /// Creates the container that will be used to contain the <see cref="DrawableHitObject"/>s.

View File

@ -262,12 +262,7 @@ namespace osu.Game.Rulesets.UI
if (drawableObject == null) if (drawableObject == null)
continue; continue;
drawableObject.OnJudgement += (d, j) => drawableObject.OnJudgement += (d, j) => OnJudgement?.Invoke(j);
{
Playfield.OnJudgement(d, j);
OnJudgement?.Invoke(j);
};
drawableObject.OnJudgementRemoved += (d, j) => OnJudgementRemoved?.Invoke(j); drawableObject.OnJudgementRemoved += (d, j) => OnJudgementRemoved?.Invoke(j);
Playfield.Add(drawableObject); Playfield.Add(drawableObject);

View File

@ -1,7 +1,6 @@
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>. // Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System.Collections.Generic;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Configuration; using osu.Framework.Configuration;
using osu.Framework.Graphics; using osu.Framework.Graphics;
@ -76,25 +75,6 @@ namespace osu.Game.Rulesets.UI.Scrolling
HitObjects.TimeRange.BindTo(VisibleTimeRange); HitObjects.TimeRange.BindTo(VisibleTimeRange);
} }
private List<ScrollingPlayfield> nestedPlayfields;
/// <summary>
/// All the <see cref="ScrollingPlayfield"/>s nested inside this playfield.
/// </summary>
public IEnumerable<ScrollingPlayfield> NestedPlayfields => nestedPlayfields;
/// <summary>
/// Adds a <see cref="ScrollingPlayfield"/> to this playfield. The nested <see cref="ScrollingPlayfield"/>
/// will be given all of the same speed adjustments as this playfield.
/// </summary>
/// <param name="otherPlayfield">The <see cref="ScrollingPlayfield"/> to add.</param>
protected void AddNested(ScrollingPlayfield otherPlayfield)
{
if (nestedPlayfields == null)
nestedPlayfields = new List<ScrollingPlayfield>();
nestedPlayfields.Add(otherPlayfield);
}
protected override bool OnKeyDown(InputState state, KeyDownEventArgs args) protected override bool OnKeyDown(InputState state, KeyDownEventArgs args)
{ {
if (!UserScrollSpeedAdjustment) if (!UserScrollSpeedAdjustment)

View File

@ -87,7 +87,7 @@ namespace osu.Game.Rulesets.UI.Scrolling
private void applySpeedAdjustment(MultiplierControlPoint controlPoint, ScrollingPlayfield playfield) private void applySpeedAdjustment(MultiplierControlPoint controlPoint, ScrollingPlayfield playfield)
{ {
playfield.HitObjects.AddControlPoint(controlPoint); playfield.HitObjects.AddControlPoint(controlPoint);
playfield.NestedPlayfields.ForEach(p => applySpeedAdjustment(controlPoint, p)); playfield.NestedPlayfields?.OfType<ScrollingPlayfield>().ForEach(p => applySpeedAdjustment(controlPoint, p));
} }
/// <summary> /// <summary>

View File

@ -1,7 +1,6 @@
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>. // Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System;
using System.Linq; using System.Linq;
using OpenTK; using OpenTK;
using OpenTK.Graphics; using OpenTK.Graphics;
@ -188,7 +187,7 @@ namespace osu.Game.Screens.Menu
mediumRing.ResizeTo(130, 340, Easing.OutQuad); mediumRing.ResizeTo(130, 340, Easing.OutQuad);
mediumRing.Foreground.ResizeTo(1, 880, Easing.Out); mediumRing.Foreground.ResizeTo(1, 880, Easing.Out);
Func<double> remainingTime = () => length - TransformDelay; double remainingTime() => length - TransformDelay;
using (BeginDelayedSequence(250, true)) using (BeginDelayedSequence(250, true))
{ {

View File

@ -231,7 +231,7 @@ namespace osu.Game.Screens.Menu
/// <param name="waitForPrevious">If true, the new animation is delayed until all previous transforms finish. If false, existing transformed are cleared.</param> /// <param name="waitForPrevious">If true, the new animation is delayed until all previous transforms finish. If false, existing transformed are cleared.</param>
public void AppendAnimatingAction(Action action, bool waitForPrevious) public void AppendAnimatingAction(Action action, bool waitForPrevious)
{ {
Action runnableAction = () => void runnableAction()
{ {
if (waitForPrevious) if (waitForPrevious)
this.DelayUntilTransformsFinished().Schedule(action); this.DelayUntilTransformsFinished().Schedule(action);
@ -240,12 +240,12 @@ namespace osu.Game.Screens.Menu
ClearTransforms(); ClearTransforms();
action(); action();
} }
}; }
if (IsLoaded) if (IsLoaded)
runnableAction(); runnableAction();
else else
Schedule(() => runnableAction()); Schedule(runnableAction);
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]

View File

@ -266,7 +266,7 @@ namespace osu.Game.Screens.Select
/// </summary> /// </summary>
private void carouselSelectionChanged(BeatmapInfo beatmap) private void carouselSelectionChanged(BeatmapInfo beatmap)
{ {
Action performLoad = delegate void performLoad()
{ {
// We may be arriving here due to another component changing the bindable Beatmap. // We may be arriving here due to another component changing the bindable Beatmap.
// In these cases, the other component has already loaded the beatmap, so we don't need to do so again. // In these cases, the other component has already loaded the beatmap, so we don't need to do so again.
@ -279,7 +279,7 @@ namespace osu.Game.Screens.Select
} }
UpdateBeatmap(Beatmap.Value); UpdateBeatmap(Beatmap.Value);
}; }
if (beatmap?.Equals(beatmapNoDebounce) == true) if (beatmap?.Equals(beatmapNoDebounce) == true)
return; return;

View File

@ -265,7 +265,7 @@ namespace osu.Game.Screens.Tournament
private void writeResults(string text) private void writeResults(string text)
{ {
Action writeAction = () => void writeAction()
{ {
try try
{ {
@ -280,9 +280,9 @@ namespace osu.Game.Screens.Tournament
{ {
Logger.Error(ex, "Failed to write results."); Logger.Error(ex, "Failed to write results.");
} }
}; }
writeOp = writeOp?.ContinueWith(t => { writeAction(); }) ?? Task.Run(writeAction); writeOp = writeOp?.ContinueWith(t => { writeAction(); }) ?? Task.Run((Action)writeAction);
} }
private void reloadTeams() private void reloadTeams()