mirror of
https://github.com/ppy/osu.git
synced 2024-12-15 23:03:21 +08:00
Merge branch 'master' into reduce-chat-overhead
This commit is contained in:
commit
e7d7587ea5
@ -52,7 +52,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="ppy.osu.Game.Resources" Version="2021.1215.0" />
|
<PackageReference Include="ppy.osu.Game.Resources" Version="2021.1215.0" />
|
||||||
<PackageReference Include="ppy.osu.Framework.Android" Version="2021.1225.0" />
|
<PackageReference Include="ppy.osu.Framework.Android" Version="2021.1227.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Label="Transitive Dependencies">
|
<ItemGroup Label="Transitive Dependencies">
|
||||||
<!-- Realm needs to be directly referenced in all Xamarin projects, as it will not pull in its transitive dependencies otherwise. -->
|
<!-- Realm needs to be directly referenced in all Xamarin projects, as it will not pull in its transitive dependencies otherwise. -->
|
||||||
|
@ -76,7 +76,7 @@ namespace osu.Desktop.Security
|
|||||||
private void load(OsuColour colours, NotificationOverlay notificationOverlay)
|
private void load(OsuColour colours, NotificationOverlay notificationOverlay)
|
||||||
{
|
{
|
||||||
Icon = FontAwesome.Solid.ShieldAlt;
|
Icon = FontAwesome.Solid.ShieldAlt;
|
||||||
IconBackgound.Colour = colours.YellowDark;
|
IconBackground.Colour = colours.YellowDark;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,7 @@ namespace osu.Game.Rulesets.Catch.Tests
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestJuicestream()
|
public void TestJuiceStream()
|
||||||
{
|
{
|
||||||
AddStep("hit juicestream", () => spawnJuiceStream(true));
|
AddStep("hit juicestream", () => spawnJuiceStream(true));
|
||||||
AddUntilStep("wait for completion", () => playfieldIsEmpty);
|
AddUntilStep("wait for completion", () => playfieldIsEmpty);
|
||||||
|
@ -37,20 +37,20 @@ namespace osu.Game.Rulesets.Catch.Tests
|
|||||||
AddStep("show hyperdash droplet", () => SetContents(_ => createDrawableDroplet(true)));
|
AddStep("show hyperdash droplet", () => SetContents(_ => createDrawableDroplet(true)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Drawable createDrawableFruit(int indexInBeatmap, bool hyperdash = false) =>
|
private Drawable createDrawableFruit(int indexInBeatmap, bool hyperDash = false) =>
|
||||||
new TestDrawableCatchHitObjectSpecimen(new DrawableFruit(new Fruit
|
new TestDrawableCatchHitObjectSpecimen(new DrawableFruit(new Fruit
|
||||||
{
|
{
|
||||||
IndexInBeatmap = indexInBeatmap,
|
IndexInBeatmap = indexInBeatmap,
|
||||||
HyperDashBindable = { Value = hyperdash }
|
HyperDashBindable = { Value = hyperDash }
|
||||||
}));
|
}));
|
||||||
|
|
||||||
private Drawable createDrawableBanana() =>
|
private Drawable createDrawableBanana() =>
|
||||||
new TestDrawableCatchHitObjectSpecimen(new DrawableBanana(new Banana()));
|
new TestDrawableCatchHitObjectSpecimen(new DrawableBanana(new Banana()));
|
||||||
|
|
||||||
private Drawable createDrawableDroplet(bool hyperdash = false) =>
|
private Drawable createDrawableDroplet(bool hyperDash = false) =>
|
||||||
new TestDrawableCatchHitObjectSpecimen(new DrawableDroplet(new Droplet
|
new TestDrawableCatchHitObjectSpecimen(new DrawableDroplet(new Droplet
|
||||||
{
|
{
|
||||||
HyperDashBindable = { Value = hyperdash }
|
HyperDashBindable = { Value = hyperDash }
|
||||||
}));
|
}));
|
||||||
|
|
||||||
private Drawable createDrawableTinyDroplet() => new TestDrawableCatchHitObjectSpecimen(new DrawableTinyDroplet(new TinyDroplet()));
|
private Drawable createDrawableTinyDroplet() => new TestDrawableCatchHitObjectSpecimen(new DrawableTinyDroplet(new TinyDroplet()));
|
||||||
|
@ -90,9 +90,9 @@ namespace osu.Game.Rulesets.Catch.Skinning.Default
|
|||||||
.ResizeTo(largeFaint.Size * new Vector2(5, 1), duration, Easing.OutQuint)
|
.ResizeTo(largeFaint.Size * new Vector2(5, 1), duration, Easing.OutQuint)
|
||||||
.FadeOut(duration * 2);
|
.FadeOut(duration * 2);
|
||||||
|
|
||||||
const float angle_variangle = 15; // should be less than 45
|
const float angle_variance = 15; // should be less than 45
|
||||||
directionalGlow1.Rotation = StatelessRNG.NextSingle(-angle_variangle, angle_variangle, randomSeed, 4);
|
directionalGlow1.Rotation = StatelessRNG.NextSingle(-angle_variance, angle_variance, randomSeed, 4);
|
||||||
directionalGlow2.Rotation = StatelessRNG.NextSingle(-angle_variangle, angle_variangle, randomSeed, 5);
|
directionalGlow2.Rotation = StatelessRNG.NextSingle(-angle_variance, angle_variance, randomSeed, 5);
|
||||||
|
|
||||||
this.FadeInFromZero(50).Then().FadeOut(duration, Easing.Out);
|
this.FadeInFromZero(50).Then().FadeOut(duration, Easing.Out);
|
||||||
}
|
}
|
||||||
|
@ -24,13 +24,13 @@ namespace osu.Game.Rulesets.Mania.Tests.Skinning
|
|||||||
|
|
||||||
public TestSceneHitExplosion()
|
public TestSceneHitExplosion()
|
||||||
{
|
{
|
||||||
int runcount = 0;
|
int runCount = 0;
|
||||||
|
|
||||||
AddRepeatStep("explode", () =>
|
AddRepeatStep("explode", () =>
|
||||||
{
|
{
|
||||||
runcount++;
|
runCount++;
|
||||||
|
|
||||||
if (runcount % 15 > 12)
|
if (runCount % 15 > 12)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int poolIndex = 0;
|
int poolIndex = 0;
|
||||||
@ -39,7 +39,7 @@ namespace osu.Game.Rulesets.Mania.Tests.Skinning
|
|||||||
{
|
{
|
||||||
c.Add(hitExplosionPools[poolIndex].Get(e =>
|
c.Add(hitExplosionPools[poolIndex].Get(e =>
|
||||||
{
|
{
|
||||||
e.Apply(new JudgementResult(new HitObject(), runcount % 6 == 0 ? new HoldNoteTickJudgement() : new ManiaJudgement()));
|
e.Apply(new JudgementResult(new HitObject(), runCount % 6 == 0 ? new HoldNoteTickJudgement() : new ManiaJudgement()));
|
||||||
|
|
||||||
e.Anchor = Anchor.Centre;
|
e.Anchor = Anchor.Centre;
|
||||||
e.Origin = Anchor.Centre;
|
e.Origin = Anchor.Centre;
|
||||||
|
@ -40,7 +40,7 @@ namespace osu.Game.Rulesets.Mania.Beatmaps
|
|||||||
public override IEnumerable<BeatmapStatistic> GetStatistics()
|
public override IEnumerable<BeatmapStatistic> GetStatistics()
|
||||||
{
|
{
|
||||||
int notes = HitObjects.Count(s => s is Note);
|
int notes = HitObjects.Count(s => s is Note);
|
||||||
int holdnotes = HitObjects.Count(s => s is HoldNote);
|
int holdNotes = HitObjects.Count(s => s is HoldNote);
|
||||||
|
|
||||||
return new[]
|
return new[]
|
||||||
{
|
{
|
||||||
@ -54,7 +54,7 @@ namespace osu.Game.Rulesets.Mania.Beatmaps
|
|||||||
{
|
{
|
||||||
Name = @"Hold Note Count",
|
Name = @"Hold Note Count",
|
||||||
CreateIcon = () => new BeatmapStatisticIcon(BeatmapStatisticsIconType.Sliders),
|
CreateIcon = () => new BeatmapStatisticIcon(BeatmapStatisticsIconType.Sliders),
|
||||||
Content = holdnotes.ToString(),
|
Content = holdNotes.ToString(),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ namespace osu.Game.Rulesets.Mania.Skinning.Legacy
|
|||||||
/// Mapping of <see cref="HitResult"/> to their corresponding
|
/// Mapping of <see cref="HitResult"/> to their corresponding
|
||||||
/// <see cref="LegacyManiaSkinConfigurationLookups"/> value.
|
/// <see cref="LegacyManiaSkinConfigurationLookups"/> value.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static readonly IReadOnlyDictionary<HitResult, LegacyManiaSkinConfigurationLookups> hitresult_mapping
|
private static readonly IReadOnlyDictionary<HitResult, LegacyManiaSkinConfigurationLookups> hit_result_mapping
|
||||||
= new Dictionary<HitResult, LegacyManiaSkinConfigurationLookups>
|
= new Dictionary<HitResult, LegacyManiaSkinConfigurationLookups>
|
||||||
{
|
{
|
||||||
{ HitResult.Perfect, LegacyManiaSkinConfigurationLookups.Hit300g },
|
{ HitResult.Perfect, LegacyManiaSkinConfigurationLookups.Hit300g },
|
||||||
@ -39,7 +39,7 @@ namespace osu.Game.Rulesets.Mania.Skinning.Legacy
|
|||||||
/// Mapping of <see cref="HitResult"/> to their corresponding
|
/// Mapping of <see cref="HitResult"/> to their corresponding
|
||||||
/// default filenames.
|
/// default filenames.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static readonly IReadOnlyDictionary<HitResult, string> default_hitresult_skin_filenames
|
private static readonly IReadOnlyDictionary<HitResult, string> default_hit_result_skin_filenames
|
||||||
= new Dictionary<HitResult, string>
|
= new Dictionary<HitResult, string>
|
||||||
{
|
{
|
||||||
{ HitResult.Perfect, "mania-hit300g" },
|
{ HitResult.Perfect, "mania-hit300g" },
|
||||||
@ -126,11 +126,11 @@ namespace osu.Game.Rulesets.Mania.Skinning.Legacy
|
|||||||
|
|
||||||
private Drawable getResult(HitResult result)
|
private Drawable getResult(HitResult result)
|
||||||
{
|
{
|
||||||
if (!hitresult_mapping.ContainsKey(result))
|
if (!hit_result_mapping.ContainsKey(result))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
string filename = this.GetManiaSkinConfig<string>(hitresult_mapping[result])?.Value
|
string filename = this.GetManiaSkinConfig<string>(hit_result_mapping[result])?.Value
|
||||||
?? default_hitresult_skin_filenames[result];
|
?? default_hit_result_skin_filenames[result];
|
||||||
|
|
||||||
var animation = this.GetAnimation(filename, true, true);
|
var animation = this.GetAnimation(filename, true, true);
|
||||||
return animation == null ? null : new LegacyManiaJudgementPiece(result, animation);
|
return animation == null ? null : new LegacyManiaJudgementPiece(result, animation);
|
||||||
|
@ -42,7 +42,7 @@ namespace osu.Game.Rulesets.Mania.UI
|
|||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(IScrollingInfo scrollingInfo)
|
private void load(IScrollingInfo scrollingInfo)
|
||||||
{
|
{
|
||||||
const float angle_variangle = 15; // should be less than 45
|
const float angle_variance = 15; // should be less than 45
|
||||||
const float roundness = 80;
|
const float roundness = 80;
|
||||||
const float initial_height = 10;
|
const float initial_height = 10;
|
||||||
|
|
||||||
@ -90,7 +90,7 @@ namespace osu.Game.Rulesets.Mania.UI
|
|||||||
Masking = true,
|
Masking = true,
|
||||||
Size = new Vector2(0.01f, initial_height),
|
Size = new Vector2(0.01f, initial_height),
|
||||||
Blending = BlendingParameters.Additive,
|
Blending = BlendingParameters.Additive,
|
||||||
Rotation = RNG.NextSingle(-angle_variangle, angle_variangle),
|
Rotation = RNG.NextSingle(-angle_variance, angle_variance),
|
||||||
EdgeEffect = new EdgeEffectParameters
|
EdgeEffect = new EdgeEffectParameters
|
||||||
{
|
{
|
||||||
Type = EdgeEffectType.Glow,
|
Type = EdgeEffectType.Glow,
|
||||||
@ -107,7 +107,7 @@ namespace osu.Game.Rulesets.Mania.UI
|
|||||||
Masking = true,
|
Masking = true,
|
||||||
Size = new Vector2(0.01f, initial_height),
|
Size = new Vector2(0.01f, initial_height),
|
||||||
Blending = BlendingParameters.Additive,
|
Blending = BlendingParameters.Additive,
|
||||||
Rotation = RNG.NextSingle(-angle_variangle, angle_variangle),
|
Rotation = RNG.NextSingle(-angle_variance, angle_variance),
|
||||||
EdgeEffect = new EdgeEffectParameters
|
EdgeEffect = new EdgeEffectParameters
|
||||||
{
|
{
|
||||||
Type = EdgeEffectType.Glow,
|
Type = EdgeEffectType.Glow,
|
||||||
|
@ -65,7 +65,7 @@ namespace osu.Game.Rulesets.Mania.UI
|
|||||||
|
|
||||||
public override bool Remove(DrawableHitObject h) => getStageByColumn(((ManiaHitObject)h.HitObject).Column).Remove(h);
|
public override bool Remove(DrawableHitObject h) => getStageByColumn(((ManiaHitObject)h.HitObject).Column).Remove(h);
|
||||||
|
|
||||||
public void Add(BarLine barline) => stages.ForEach(s => s.Add(barline));
|
public void Add(BarLine barLine) => stages.ForEach(s => s.Add(barLine));
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Retrieves a column from a screen-space position.
|
/// Retrieves a column from a screen-space position.
|
||||||
|
@ -147,7 +147,7 @@ namespace osu.Game.Rulesets.Mania.UI
|
|||||||
|
|
||||||
public override bool Remove(DrawableHitObject h) => Columns.ElementAt(((ManiaHitObject)h.HitObject).Column - firstColumnIndex).Remove(h);
|
public override bool Remove(DrawableHitObject h) => Columns.ElementAt(((ManiaHitObject)h.HitObject).Column - firstColumnIndex).Remove(h);
|
||||||
|
|
||||||
public void Add(BarLine barline) => base.Add(new DrawableBarLine(barline));
|
public void Add(BarLine barLine) => base.Add(new DrawableBarLine(barLine));
|
||||||
|
|
||||||
internal void OnNewResult(DrawableHitObject judgedObject, JudgementResult result)
|
internal void OnNewResult(DrawableHitObject judgedObject, JudgementResult result)
|
||||||
{
|
{
|
||||||
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
BIN
osu.Game.Rulesets.Osu.Tests/Resources/special-skin/hitcircleoverlay-1@2x.png
Executable file
BIN
osu.Game.Rulesets.Osu.Tests/Resources/special-skin/hitcircleoverlay-1@2x.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 40 KiB |
@ -70,8 +70,15 @@ namespace osu.Game.Rulesets.Osu.Difficulty
|
|||||||
SliderFactor = values[ATTRIB_ID_SLIDER_FACTOR];
|
SliderFactor = values[ATTRIB_ID_SLIDER_FACTOR];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Used implicitly by Newtonsoft.Json to not serialize flashlight property in some cases.
|
#region Newtonsoft.Json implicit ShouldSerialize() methods
|
||||||
|
|
||||||
|
// The properties in this region are used implicitly by Newtonsoft.Json to not serialise certain fields in some cases.
|
||||||
|
// They rely on being named exactly the same as the corresponding fields (casing included) and as such should NOT be renamed
|
||||||
|
// unless the fields are also renamed.
|
||||||
|
|
||||||
[UsedImplicitly]
|
[UsedImplicitly]
|
||||||
public bool ShouldSerializeFlashlightRating() => Mods.Any(m => m is ModFlashlight);
|
public bool ShouldSerializeFlashlightRating() => Mods.Any(m => m is ModFlashlight);
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -250,7 +250,7 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders.Components
|
|||||||
switch (pathType)
|
switch (pathType)
|
||||||
{
|
{
|
||||||
case PathType.Catmull:
|
case PathType.Catmull:
|
||||||
return colours.Seafoam;
|
return colours.SeaFoam;
|
||||||
|
|
||||||
case PathType.Bezier:
|
case PathType.Bezier:
|
||||||
return colours.Pink;
|
return colours.Pink;
|
||||||
|
@ -16,7 +16,7 @@ namespace osu.Game.Rulesets.Osu.Mods
|
|||||||
{
|
{
|
||||||
public override string Name => "Spun Out";
|
public override string Name => "Spun Out";
|
||||||
public override string Acronym => "SO";
|
public override string Acronym => "SO";
|
||||||
public override IconUsage? Icon => OsuIcon.ModSpunout;
|
public override IconUsage? Icon => OsuIcon.ModSpunOut;
|
||||||
public override ModType Type => ModType.Automation;
|
public override ModType Type => ModType.Automation;
|
||||||
public override string Description => @"Spinners will be automatically completed.";
|
public override string Description => @"Spinners will be automatically completed.";
|
||||||
public override double ScoreMultiplier => 0.9;
|
public override double ScoreMultiplier => 0.9;
|
||||||
|
@ -0,0 +1,52 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using osu.Framework.Audio.Track;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Game.Beatmaps.ControlPoints;
|
||||||
|
using osu.Game.Graphics.Containers;
|
||||||
|
|
||||||
|
#nullable enable
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Osu.Skinning.Legacy
|
||||||
|
{
|
||||||
|
internal class KiaiFlashingDrawable : BeatSyncedContainer
|
||||||
|
{
|
||||||
|
private readonly Drawable flashingDrawable;
|
||||||
|
|
||||||
|
private const float flash_opacity = 0.3f;
|
||||||
|
|
||||||
|
public KiaiFlashingDrawable(Func<Drawable?> creationFunc)
|
||||||
|
{
|
||||||
|
AutoSizeAxes = Axes.Both;
|
||||||
|
|
||||||
|
Children = new[]
|
||||||
|
{
|
||||||
|
(creationFunc.Invoke() ?? Empty()).With(d =>
|
||||||
|
{
|
||||||
|
d.Anchor = Anchor.Centre;
|
||||||
|
d.Origin = Anchor.Centre;
|
||||||
|
}),
|
||||||
|
flashingDrawable = (creationFunc.Invoke() ?? Empty()).With(d =>
|
||||||
|
{
|
||||||
|
d.Anchor = Anchor.Centre;
|
||||||
|
d.Origin = Anchor.Centre;
|
||||||
|
d.Alpha = 0;
|
||||||
|
d.Blending = BlendingParameters.Additive;
|
||||||
|
})
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnNewBeat(int beatIndex, TimingControlPoint timingPoint, EffectControlPoint effectPoint, ChannelAmplitudes amplitudes)
|
||||||
|
{
|
||||||
|
if (!effectPoint.KiaiMode)
|
||||||
|
return;
|
||||||
|
|
||||||
|
flashingDrawable
|
||||||
|
.FadeTo(flash_opacity)
|
||||||
|
.Then()
|
||||||
|
.FadeOut(timingPoint.BeatLength * 0.75f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,61 +0,0 @@
|
|||||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
|
||||||
// See the LICENCE file in the repository root for full licence text.
|
|
||||||
|
|
||||||
using osu.Framework.Audio.Track;
|
|
||||||
using osu.Framework.Graphics;
|
|
||||||
using osu.Framework.Graphics.Sprites;
|
|
||||||
using osu.Framework.Graphics.Textures;
|
|
||||||
using osu.Game.Beatmaps.ControlPoints;
|
|
||||||
using osu.Game.Graphics.Containers;
|
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Osu.Skinning.Legacy
|
|
||||||
{
|
|
||||||
internal class KiaiFlashingSprite : BeatSyncedContainer
|
|
||||||
{
|
|
||||||
private readonly Sprite mainSprite;
|
|
||||||
private readonly Sprite flashingSprite;
|
|
||||||
|
|
||||||
public Texture Texture
|
|
||||||
{
|
|
||||||
set
|
|
||||||
{
|
|
||||||
mainSprite.Texture = value;
|
|
||||||
flashingSprite.Texture = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private const float flash_opacity = 0.3f;
|
|
||||||
|
|
||||||
public KiaiFlashingSprite()
|
|
||||||
{
|
|
||||||
AutoSizeAxes = Axes.Both;
|
|
||||||
|
|
||||||
Children = new Drawable[]
|
|
||||||
{
|
|
||||||
mainSprite = new Sprite
|
|
||||||
{
|
|
||||||
Anchor = Anchor.Centre,
|
|
||||||
Origin = Anchor.Centre,
|
|
||||||
},
|
|
||||||
flashingSprite = new Sprite
|
|
||||||
{
|
|
||||||
Anchor = Anchor.Centre,
|
|
||||||
Origin = Anchor.Centre,
|
|
||||||
Alpha = 0,
|
|
||||||
Blending = BlendingParameters.Additive,
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnNewBeat(int beatIndex, TimingControlPoint timingPoint, EffectControlPoint effectPoint, ChannelAmplitudes amplitudes)
|
|
||||||
{
|
|
||||||
if (!effectPoint.KiaiMode)
|
|
||||||
return;
|
|
||||||
|
|
||||||
flashingSprite
|
|
||||||
.FadeTo(flash_opacity)
|
|
||||||
.Then()
|
|
||||||
.FadeOut(timingPoint.BeatLength * 0.75f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -5,6 +5,7 @@ using osu.Framework.Allocation;
|
|||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
|
using osu.Framework.Graphics.Sprites;
|
||||||
using osu.Framework.Graphics.Textures;
|
using osu.Framework.Graphics.Textures;
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Graphics.Sprites;
|
using osu.Game.Graphics.Sprites;
|
||||||
@ -68,13 +69,11 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy
|
|||||||
// at this point, any further texture fetches should be correctly using the priority source if the base texture was retrieved using it.
|
// at this point, any further texture fetches should be correctly using the priority source if the base texture was retrieved using it.
|
||||||
// the flow above handles the case where a sliderendcircle.png is retrieved from the skin, but sliderendcircleoverlay.png doesn't exist.
|
// the flow above handles the case where a sliderendcircle.png is retrieved from the skin, but sliderendcircleoverlay.png doesn't exist.
|
||||||
// expected behaviour in this scenario is not showing the overlay, rather than using hitcircleoverlay.png (potentially from the default/fall-through skin).
|
// expected behaviour in this scenario is not showing the overlay, rather than using hitcircleoverlay.png (potentially from the default/fall-through skin).
|
||||||
Texture overlayTexture = getTextureWithFallback("overlay");
|
|
||||||
|
|
||||||
InternalChildren = new[]
|
InternalChildren = new[]
|
||||||
{
|
{
|
||||||
hitCircleSprite = new KiaiFlashingSprite
|
hitCircleSprite = new KiaiFlashingDrawable(() => new Sprite { Texture = baseTexture })
|
||||||
{
|
{
|
||||||
Texture = baseTexture,
|
|
||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
},
|
},
|
||||||
@ -82,9 +81,8 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy
|
|||||||
{
|
{
|
||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
Child = hitCircleOverlay = new KiaiFlashingSprite
|
Child = hitCircleOverlay = new KiaiFlashingDrawable(() => getAnimationWithFallback(@"overlay", 1000 / 2d))
|
||||||
{
|
{
|
||||||
Texture = overlayTexture,
|
|
||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
},
|
},
|
||||||
@ -126,6 +124,21 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy
|
|||||||
|
|
||||||
return tex ?? skin.GetTexture($"hitcircle{name}");
|
return tex ?? skin.GetTexture($"hitcircle{name}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Drawable getAnimationWithFallback(string name, double frameLength)
|
||||||
|
{
|
||||||
|
Drawable animation = null;
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(priorityLookup))
|
||||||
|
{
|
||||||
|
animation = skin.GetAnimation($"{priorityLookup}{name}", true, true, frameLength: frameLength);
|
||||||
|
|
||||||
|
if (!allowFallback)
|
||||||
|
return animation;
|
||||||
|
}
|
||||||
|
|
||||||
|
return animation ?? skin.GetAnimation($"hitcircle{name}", true, true, frameLength: frameLength);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void LoadComplete()
|
protected override void LoadComplete()
|
||||||
|
@ -83,7 +83,7 @@ namespace osu.Game.Rulesets.Taiko.Tests.Skinning
|
|||||||
|
|
||||||
private BarLine createBarLineAtCurrentTime(bool major = false)
|
private BarLine createBarLineAtCurrentTime(bool major = false)
|
||||||
{
|
{
|
||||||
var barline = new BarLine
|
var barLine = new BarLine
|
||||||
{
|
{
|
||||||
Major = major,
|
Major = major,
|
||||||
StartTime = Time.Current + 2000,
|
StartTime = Time.Current + 2000,
|
||||||
@ -92,9 +92,9 @@ namespace osu.Game.Rulesets.Taiko.Tests.Skinning
|
|||||||
var cpi = new ControlPointInfo();
|
var cpi = new ControlPointInfo();
|
||||||
cpi.Add(0, new TimingControlPoint { BeatLength = 500 });
|
cpi.Add(0, new TimingControlPoint { BeatLength = 500 });
|
||||||
|
|
||||||
barline.ApplyDefaults(cpi, new BeatmapDifficulty());
|
barLine.ApplyDefaults(cpi, new BeatmapDifficulty());
|
||||||
|
|
||||||
return barline;
|
return barLine;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ namespace osu.Game.Rulesets.Taiko.Beatmaps
|
|||||||
public override IEnumerable<BeatmapStatistic> GetStatistics()
|
public override IEnumerable<BeatmapStatistic> GetStatistics()
|
||||||
{
|
{
|
||||||
int hits = HitObjects.Count(s => s is Hit);
|
int hits = HitObjects.Count(s => s is Hit);
|
||||||
int drumrolls = HitObjects.Count(s => s is DrumRoll);
|
int drumRolls = HitObjects.Count(s => s is DrumRoll);
|
||||||
int swells = HitObjects.Count(s => s is Swell);
|
int swells = HitObjects.Count(s => s is Swell);
|
||||||
|
|
||||||
return new[]
|
return new[]
|
||||||
@ -28,7 +28,7 @@ namespace osu.Game.Rulesets.Taiko.Beatmaps
|
|||||||
{
|
{
|
||||||
Name = @"Drumroll Count",
|
Name = @"Drumroll Count",
|
||||||
CreateIcon = () => new BeatmapStatisticIcon(BeatmapStatisticsIconType.Sliders),
|
CreateIcon = () => new BeatmapStatisticIcon(BeatmapStatisticsIconType.Sliders),
|
||||||
Content = drumrolls.ToString(),
|
Content = drumRolls.ToString(),
|
||||||
},
|
},
|
||||||
new BeatmapStatistic
|
new BeatmapStatistic
|
||||||
{
|
{
|
||||||
|
@ -40,80 +40,80 @@ namespace osu.Game.Tests.Editing.Checks
|
|||||||
[Test]
|
[Test]
|
||||||
public void TestNormalControlPointVolume()
|
public void TestNormalControlPointVolume()
|
||||||
{
|
{
|
||||||
var hitcircle = new HitCircle
|
var hitCircle = new HitCircle
|
||||||
{
|
{
|
||||||
StartTime = 0,
|
StartTime = 0,
|
||||||
Samples = new List<HitSampleInfo> { new HitSampleInfo(HitSampleInfo.HIT_NORMAL) }
|
Samples = new List<HitSampleInfo> { new HitSampleInfo(HitSampleInfo.HIT_NORMAL) }
|
||||||
};
|
};
|
||||||
hitcircle.ApplyDefaults(cpi, new BeatmapDifficulty());
|
hitCircle.ApplyDefaults(cpi, new BeatmapDifficulty());
|
||||||
|
|
||||||
assertOk(new List<HitObject> { hitcircle });
|
assertOk(new List<HitObject> { hitCircle });
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestLowControlPointVolume()
|
public void TestLowControlPointVolume()
|
||||||
{
|
{
|
||||||
var hitcircle = new HitCircle
|
var hitCircle = new HitCircle
|
||||||
{
|
{
|
||||||
StartTime = 1000,
|
StartTime = 1000,
|
||||||
Samples = new List<HitSampleInfo> { new HitSampleInfo(HitSampleInfo.HIT_NORMAL) }
|
Samples = new List<HitSampleInfo> { new HitSampleInfo(HitSampleInfo.HIT_NORMAL) }
|
||||||
};
|
};
|
||||||
hitcircle.ApplyDefaults(cpi, new BeatmapDifficulty());
|
hitCircle.ApplyDefaults(cpi, new BeatmapDifficulty());
|
||||||
|
|
||||||
assertLowVolume(new List<HitObject> { hitcircle });
|
assertLowVolume(new List<HitObject> { hitCircle });
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestMutedControlPointVolume()
|
public void TestMutedControlPointVolume()
|
||||||
{
|
{
|
||||||
var hitcircle = new HitCircle
|
var hitCircle = new HitCircle
|
||||||
{
|
{
|
||||||
StartTime = 2000,
|
StartTime = 2000,
|
||||||
Samples = new List<HitSampleInfo> { new HitSampleInfo(HitSampleInfo.HIT_NORMAL) }
|
Samples = new List<HitSampleInfo> { new HitSampleInfo(HitSampleInfo.HIT_NORMAL) }
|
||||||
};
|
};
|
||||||
hitcircle.ApplyDefaults(cpi, new BeatmapDifficulty());
|
hitCircle.ApplyDefaults(cpi, new BeatmapDifficulty());
|
||||||
|
|
||||||
assertMuted(new List<HitObject> { hitcircle });
|
assertMuted(new List<HitObject> { hitCircle });
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestNormalSampleVolume()
|
public void TestNormalSampleVolume()
|
||||||
{
|
{
|
||||||
// The sample volume should take precedence over the control point volume.
|
// The sample volume should take precedence over the control point volume.
|
||||||
var hitcircle = new HitCircle
|
var hitCircle = new HitCircle
|
||||||
{
|
{
|
||||||
StartTime = 2000,
|
StartTime = 2000,
|
||||||
Samples = new List<HitSampleInfo> { new HitSampleInfo(HitSampleInfo.HIT_NORMAL, volume: volume_regular) }
|
Samples = new List<HitSampleInfo> { new HitSampleInfo(HitSampleInfo.HIT_NORMAL, volume: volume_regular) }
|
||||||
};
|
};
|
||||||
hitcircle.ApplyDefaults(cpi, new BeatmapDifficulty());
|
hitCircle.ApplyDefaults(cpi, new BeatmapDifficulty());
|
||||||
|
|
||||||
assertOk(new List<HitObject> { hitcircle });
|
assertOk(new List<HitObject> { hitCircle });
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestLowSampleVolume()
|
public void TestLowSampleVolume()
|
||||||
{
|
{
|
||||||
var hitcircle = new HitCircle
|
var hitCircle = new HitCircle
|
||||||
{
|
{
|
||||||
StartTime = 2000,
|
StartTime = 2000,
|
||||||
Samples = new List<HitSampleInfo> { new HitSampleInfo(HitSampleInfo.HIT_NORMAL, volume: volume_low) }
|
Samples = new List<HitSampleInfo> { new HitSampleInfo(HitSampleInfo.HIT_NORMAL, volume: volume_low) }
|
||||||
};
|
};
|
||||||
hitcircle.ApplyDefaults(cpi, new BeatmapDifficulty());
|
hitCircle.ApplyDefaults(cpi, new BeatmapDifficulty());
|
||||||
|
|
||||||
assertLowVolume(new List<HitObject> { hitcircle });
|
assertLowVolume(new List<HitObject> { hitCircle });
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestMutedSampleVolume()
|
public void TestMutedSampleVolume()
|
||||||
{
|
{
|
||||||
var hitcircle = new HitCircle
|
var hitCircle = new HitCircle
|
||||||
{
|
{
|
||||||
StartTime = 0,
|
StartTime = 0,
|
||||||
Samples = new List<HitSampleInfo> { new HitSampleInfo(HitSampleInfo.HIT_NORMAL, volume: volume_muted) }
|
Samples = new List<HitSampleInfo> { new HitSampleInfo(HitSampleInfo.HIT_NORMAL, volume: volume_muted) }
|
||||||
};
|
};
|
||||||
hitcircle.ApplyDefaults(cpi, new BeatmapDifficulty());
|
hitCircle.ApplyDefaults(cpi, new BeatmapDifficulty());
|
||||||
|
|
||||||
assertMuted(new List<HitObject> { hitcircle });
|
assertMuted(new List<HitObject> { hitCircle });
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -8,6 +8,7 @@ using System.Linq;
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Audio;
|
using osu.Framework.Audio;
|
||||||
using osu.Framework.Audio.Sample;
|
using osu.Framework.Audio.Sample;
|
||||||
using osu.Framework.Graphics.Audio;
|
using osu.Framework.Graphics.Audio;
|
||||||
@ -16,6 +17,7 @@ using osu.Framework.IO.Stores;
|
|||||||
using osu.Framework.Testing;
|
using osu.Framework.Testing;
|
||||||
using osu.Framework.Utils;
|
using osu.Framework.Utils;
|
||||||
using osu.Game.Audio;
|
using osu.Game.Audio;
|
||||||
|
using osu.Game.Configuration;
|
||||||
using osu.Game.Database;
|
using osu.Game.Database;
|
||||||
using osu.Game.IO;
|
using osu.Game.IO;
|
||||||
using osu.Game.Rulesets;
|
using osu.Game.Rulesets;
|
||||||
@ -35,6 +37,9 @@ namespace osu.Game.Tests.Gameplay
|
|||||||
[HeadlessTest]
|
[HeadlessTest]
|
||||||
public class TestSceneStoryboardSamples : OsuTestScene, IStorageResourceProvider
|
public class TestSceneStoryboardSamples : OsuTestScene, IStorageResourceProvider
|
||||||
{
|
{
|
||||||
|
[Resolved]
|
||||||
|
private OsuConfigManager config { get; set; }
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestRetrieveTopLevelSample()
|
public void TestRetrieveTopLevelSample()
|
||||||
{
|
{
|
||||||
@ -166,6 +171,39 @@ namespace osu.Game.Tests.Gameplay
|
|||||||
((IApplicableToRate)testedMod).ApplyToRate(sampleInfo.StartTime)));
|
((IApplicableToRate)testedMod).ApplyToRate(sampleInfo.StartTime)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestSamplePlaybackWithBeatmapHitsoundsOff()
|
||||||
|
{
|
||||||
|
GameplayClockContainer gameplayContainer = null;
|
||||||
|
TestDrawableStoryboardSample sample = null;
|
||||||
|
|
||||||
|
AddStep("disable beatmap hitsounds", () => config.SetValue(OsuSetting.BeatmapHitsounds, false));
|
||||||
|
|
||||||
|
AddStep("setup storyboard sample", () =>
|
||||||
|
{
|
||||||
|
Beatmap.Value = new TestCustomSkinWorkingBeatmap(new OsuRuleset().RulesetInfo, this);
|
||||||
|
|
||||||
|
var beatmapSkinSourceContainer = new BeatmapSkinProvidingContainer(Beatmap.Value.Skin);
|
||||||
|
|
||||||
|
Add(gameplayContainer = new MasterGameplayClockContainer(Beatmap.Value, 0)
|
||||||
|
{
|
||||||
|
Child = beatmapSkinSourceContainer
|
||||||
|
});
|
||||||
|
|
||||||
|
beatmapSkinSourceContainer.Add(sample = new TestDrawableStoryboardSample(new StoryboardSampleInfo("test-sample", 1, 1))
|
||||||
|
{
|
||||||
|
Clock = gameplayContainer.GameplayClock
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
AddStep("start", () => gameplayContainer.Start());
|
||||||
|
|
||||||
|
AddUntilStep("sample played", () => sample.IsPlayed);
|
||||||
|
AddUntilStep("sample has lifetime end", () => sample.LifetimeEnd < double.MaxValue);
|
||||||
|
|
||||||
|
AddStep("restore default", () => config.GetBindable<bool>(OsuSetting.BeatmapHitsounds).SetDefault());
|
||||||
|
}
|
||||||
|
|
||||||
private class TestSkin : LegacySkin
|
private class TestSkin : LegacySkin
|
||||||
{
|
{
|
||||||
public TestSkin(string resourceName, IStorageResourceProvider resources)
|
public TestSkin(string resourceName, IStorageResourceProvider resources)
|
||||||
|
@ -34,20 +34,20 @@ namespace osu.Game.Tests.Mods
|
|||||||
var mod3 = new OsuModDoubleTime { SpeedChange = { Value = 1.26 } };
|
var mod3 = new OsuModDoubleTime { SpeedChange = { Value = 1.26 } };
|
||||||
|
|
||||||
var doubleConvertedMod1 = new APIMod(mod1).ToMod(ruleset);
|
var doubleConvertedMod1 = new APIMod(mod1).ToMod(ruleset);
|
||||||
var doulbeConvertedMod2 = new APIMod(mod2).ToMod(ruleset);
|
var doubleConvertedMod2 = new APIMod(mod2).ToMod(ruleset);
|
||||||
var doulbeConvertedMod3 = new APIMod(mod3).ToMod(ruleset);
|
var doubleConvertedMod3 = new APIMod(mod3).ToMod(ruleset);
|
||||||
|
|
||||||
Assert.That(mod1, Is.Not.EqualTo(mod2));
|
Assert.That(mod1, Is.Not.EqualTo(mod2));
|
||||||
Assert.That(doubleConvertedMod1, Is.Not.EqualTo(doulbeConvertedMod2));
|
Assert.That(doubleConvertedMod1, Is.Not.EqualTo(doubleConvertedMod2));
|
||||||
|
|
||||||
Assert.That(mod2, Is.EqualTo(mod2));
|
Assert.That(mod2, Is.EqualTo(mod2));
|
||||||
Assert.That(doulbeConvertedMod2, Is.EqualTo(doulbeConvertedMod2));
|
Assert.That(doubleConvertedMod2, Is.EqualTo(doubleConvertedMod2));
|
||||||
|
|
||||||
Assert.That(mod2, Is.EqualTo(mod3));
|
Assert.That(mod2, Is.EqualTo(mod3));
|
||||||
Assert.That(doulbeConvertedMod2, Is.EqualTo(doulbeConvertedMod3));
|
Assert.That(doubleConvertedMod2, Is.EqualTo(doubleConvertedMod3));
|
||||||
|
|
||||||
Assert.That(mod3, Is.EqualTo(mod2));
|
Assert.That(mod3, Is.EqualTo(mod2));
|
||||||
Assert.That(doulbeConvertedMod3, Is.EqualTo(doulbeConvertedMod2));
|
Assert.That(doubleConvertedMod3, Is.EqualTo(doubleConvertedMod2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@ namespace osu.Game.Tests.Online
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestSerialiseUnionFailsWithSingalR()
|
public void TestSerialiseUnionFailsWithSignalR()
|
||||||
{
|
{
|
||||||
var state = new TeamVersusUserState();
|
var state = new TeamVersusUserState();
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Testing;
|
||||||
using osu.Game.Rulesets.Scoring;
|
using osu.Game.Rulesets.Scoring;
|
||||||
using osu.Game.Screens.Play.HUD;
|
using osu.Game.Screens.Play.HUD;
|
||||||
|
|
||||||
@ -24,5 +25,17 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
|
|
||||||
AddStep("reset combo", () => scoreProcessor.Combo.Value = 0);
|
AddStep("reset combo", () => scoreProcessor.Combo.Value = 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestLegacyComboCounterHiddenByRulesetImplementation()
|
||||||
|
{
|
||||||
|
AddToggleStep("toggle legacy hidden by ruleset", visible =>
|
||||||
|
{
|
||||||
|
foreach (var legacyCounter in this.ChildrenOfType<LegacyComboCounter>())
|
||||||
|
legacyCounter.HiddenByRulesetImplementation = visible;
|
||||||
|
});
|
||||||
|
|
||||||
|
AddRepeatStep("increase combo", () => scoreProcessor.Combo.Value++, 10);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,8 +53,8 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
CreateTest(null);
|
CreateTest(null);
|
||||||
AddUntilStep("completion set by processor", () => Player.ScoreProcessor.HasCompleted.Value);
|
AddUntilStep("completion set by processor", () => Player.ScoreProcessor.HasCompleted.Value);
|
||||||
AddStep("skip outro", () => InputManager.Key(osuTK.Input.Key.Space));
|
AddStep("skip outro", () => InputManager.Key(osuTK.Input.Key.Space));
|
||||||
|
AddAssert("player is no longer current screen", () => !Player.IsCurrentScreen());
|
||||||
AddUntilStep("wait for score shown", () => Player.IsScoreShown);
|
AddUntilStep("wait for score shown", () => Player.IsScoreShown);
|
||||||
AddUntilStep("time less than storyboard duration", () => Player.GameplayClockContainer.GameplayClock.CurrentTime < currentStoryboardDuration);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -50,6 +50,7 @@ namespace osu.Game.Tests.Visual.Multiplayer
|
|||||||
});
|
});
|
||||||
|
|
||||||
AddUntilStep("wait for load", () => leaderboard.IsLoaded);
|
AddUntilStep("wait for load", () => leaderboard.IsLoaded);
|
||||||
|
AddUntilStep("wait for user population", () => leaderboard.ChildrenOfType<GameplayLeaderboardScore>().Count() == 2);
|
||||||
|
|
||||||
AddStep("add clock sources", () =>
|
AddStep("add clock sources", () =>
|
||||||
{
|
{
|
||||||
|
@ -20,30 +20,30 @@ namespace osu.Game.Tests.Visual.Navigation
|
|||||||
public void TestFromMainMenu()
|
public void TestFromMainMenu()
|
||||||
{
|
{
|
||||||
var firstImport = importBeatmap(1);
|
var firstImport = importBeatmap(1);
|
||||||
var secondimport = importBeatmap(3);
|
var secondImport = importBeatmap(3);
|
||||||
|
|
||||||
presentAndConfirm(firstImport);
|
presentAndConfirm(firstImport);
|
||||||
returnToMenu();
|
returnToMenu();
|
||||||
presentAndConfirm(secondimport);
|
presentAndConfirm(secondImport);
|
||||||
returnToMenu();
|
returnToMenu();
|
||||||
presentSecondDifficultyAndConfirm(firstImport, 1);
|
presentSecondDifficultyAndConfirm(firstImport, 1);
|
||||||
returnToMenu();
|
returnToMenu();
|
||||||
presentSecondDifficultyAndConfirm(secondimport, 3);
|
presentSecondDifficultyAndConfirm(secondImport, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestFromMainMenuDifferentRuleset()
|
public void TestFromMainMenuDifferentRuleset()
|
||||||
{
|
{
|
||||||
var firstImport = importBeatmap(1);
|
var firstImport = importBeatmap(1);
|
||||||
var secondimport = importBeatmap(3, new ManiaRuleset().RulesetInfo);
|
var secondImport = importBeatmap(3, new ManiaRuleset().RulesetInfo);
|
||||||
|
|
||||||
presentAndConfirm(firstImport);
|
presentAndConfirm(firstImport);
|
||||||
returnToMenu();
|
returnToMenu();
|
||||||
presentAndConfirm(secondimport);
|
presentAndConfirm(secondImport);
|
||||||
returnToMenu();
|
returnToMenu();
|
||||||
presentSecondDifficultyAndConfirm(firstImport, 1);
|
presentSecondDifficultyAndConfirm(firstImport, 1);
|
||||||
returnToMenu();
|
returnToMenu();
|
||||||
presentSecondDifficultyAndConfirm(secondimport, 3);
|
presentSecondDifficultyAndConfirm(secondImport, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@ -52,17 +52,17 @@ namespace osu.Game.Tests.Visual.Navigation
|
|||||||
var firstImport = importBeatmap(1);
|
var firstImport = importBeatmap(1);
|
||||||
presentAndConfirm(firstImport);
|
presentAndConfirm(firstImport);
|
||||||
|
|
||||||
var secondimport = importBeatmap(3);
|
var secondImport = importBeatmap(3);
|
||||||
presentAndConfirm(secondimport);
|
presentAndConfirm(secondImport);
|
||||||
|
|
||||||
// Test presenting same beatmap more than once
|
// Test presenting same beatmap more than once
|
||||||
presentAndConfirm(secondimport);
|
presentAndConfirm(secondImport);
|
||||||
|
|
||||||
presentSecondDifficultyAndConfirm(firstImport, 1);
|
presentSecondDifficultyAndConfirm(firstImport, 1);
|
||||||
presentSecondDifficultyAndConfirm(secondimport, 3);
|
presentSecondDifficultyAndConfirm(secondImport, 3);
|
||||||
|
|
||||||
// Test presenting same beatmap more than once
|
// Test presenting same beatmap more than once
|
||||||
presentSecondDifficultyAndConfirm(secondimport, 3);
|
presentSecondDifficultyAndConfirm(secondImport, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@ -71,11 +71,11 @@ namespace osu.Game.Tests.Visual.Navigation
|
|||||||
var firstImport = importBeatmap(1);
|
var firstImport = importBeatmap(1);
|
||||||
presentAndConfirm(firstImport);
|
presentAndConfirm(firstImport);
|
||||||
|
|
||||||
var secondimport = importBeatmap(3, new ManiaRuleset().RulesetInfo);
|
var secondImport = importBeatmap(3, new ManiaRuleset().RulesetInfo);
|
||||||
presentAndConfirm(secondimport);
|
presentAndConfirm(secondImport);
|
||||||
|
|
||||||
presentSecondDifficultyAndConfirm(firstImport, 1);
|
presentSecondDifficultyAndConfirm(firstImport, 1);
|
||||||
presentSecondDifficultyAndConfirm(secondimport, 3);
|
presentSecondDifficultyAndConfirm(secondImport, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void returnToMenu()
|
private void returnToMenu()
|
||||||
|
@ -65,11 +65,11 @@ namespace osu.Game.Tests.Visual.Navigation
|
|||||||
public void TestFromMainMenu([Values] ScorePresentType type)
|
public void TestFromMainMenu([Values] ScorePresentType type)
|
||||||
{
|
{
|
||||||
var firstImport = importScore(1);
|
var firstImport = importScore(1);
|
||||||
var secondimport = importScore(3);
|
var secondImport = importScore(3);
|
||||||
|
|
||||||
presentAndConfirm(firstImport, type);
|
presentAndConfirm(firstImport, type);
|
||||||
returnToMenu();
|
returnToMenu();
|
||||||
presentAndConfirm(secondimport, type);
|
presentAndConfirm(secondImport, type);
|
||||||
returnToMenu();
|
returnToMenu();
|
||||||
returnToMenu();
|
returnToMenu();
|
||||||
}
|
}
|
||||||
@ -78,11 +78,11 @@ namespace osu.Game.Tests.Visual.Navigation
|
|||||||
public void TestFromMainMenuDifferentRuleset([Values] ScorePresentType type)
|
public void TestFromMainMenuDifferentRuleset([Values] ScorePresentType type)
|
||||||
{
|
{
|
||||||
var firstImport = importScore(1);
|
var firstImport = importScore(1);
|
||||||
var secondimport = importScore(3, new ManiaRuleset().RulesetInfo);
|
var secondImport = importScore(3, new ManiaRuleset().RulesetInfo);
|
||||||
|
|
||||||
presentAndConfirm(firstImport, type);
|
presentAndConfirm(firstImport, type);
|
||||||
returnToMenu();
|
returnToMenu();
|
||||||
presentAndConfirm(secondimport, type);
|
presentAndConfirm(secondImport, type);
|
||||||
returnToMenu();
|
returnToMenu();
|
||||||
returnToMenu();
|
returnToMenu();
|
||||||
}
|
}
|
||||||
@ -93,8 +93,8 @@ namespace osu.Game.Tests.Visual.Navigation
|
|||||||
var firstImport = importScore(1);
|
var firstImport = importScore(1);
|
||||||
presentAndConfirm(firstImport, type);
|
presentAndConfirm(firstImport, type);
|
||||||
|
|
||||||
var secondimport = importScore(3);
|
var secondImport = importScore(3);
|
||||||
presentAndConfirm(secondimport, type);
|
presentAndConfirm(secondImport, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@ -103,8 +103,8 @@ namespace osu.Game.Tests.Visual.Navigation
|
|||||||
var firstImport = importScore(1);
|
var firstImport = importScore(1);
|
||||||
presentAndConfirm(firstImport, type);
|
presentAndConfirm(firstImport, type);
|
||||||
|
|
||||||
var secondimport = importScore(3, new ManiaRuleset().RulesetInfo);
|
var secondImport = importScore(3, new ManiaRuleset().RulesetInfo);
|
||||||
presentAndConfirm(secondimport, type);
|
presentAndConfirm(secondImport, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void returnToMenu()
|
private void returnToMenu()
|
||||||
|
@ -30,7 +30,7 @@ namespace osu.Game.Tests.Visual.Online
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
visiblityAssert(true);
|
visibilityAssert(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@ -44,7 +44,7 @@ namespace osu.Game.Tests.Visual.Online
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
visiblityAssert(true);
|
visibilityAssert(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@ -59,7 +59,7 @@ namespace osu.Game.Tests.Visual.Online
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
visiblityAssert(true);
|
visibilityAssert(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@ -73,10 +73,10 @@ namespace osu.Game.Tests.Visual.Online
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
visiblityAssert(false);
|
visibilityAssert(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void visiblityAssert(bool shown)
|
private void visibilityAssert(bool shown)
|
||||||
{
|
{
|
||||||
AddAssert($"is container {(shown ? "visible" : "hidden")}", () => container.Alpha == (shown ? 1 : 0));
|
AddAssert($"is container {(shown ? "visible" : "hidden")}", () => container.Alpha == (shown ? 1 : 0));
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ namespace osu.Game.Tests.Visual.Online
|
|||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(OsuColour colours)
|
private void load(OsuColour colours)
|
||||||
{
|
{
|
||||||
background.Colour = colours.GreySeafoam;
|
background.Colour = colours.GreySeaFoam;
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly IEnumerable<APIKudosuHistory> items = new[]
|
private readonly IEnumerable<APIKudosuHistory> items = new[]
|
||||||
|
@ -87,7 +87,7 @@ namespace osu.Game.Tests.Visual.Online
|
|||||||
{
|
{
|
||||||
AddStep("Load user", () => user.Value = user_with_filled_values);
|
AddStep("Load user", () => user.Value = user_with_filled_values);
|
||||||
AddAssert("Section is visible", () => section.Alpha == 1);
|
AddAssert("Section is visible", () => section.Alpha == 1);
|
||||||
AddAssert("Array length is the same", () => user_with_filled_values.MonthlyPlaycounts.Length == getChartValuesLength());
|
AddAssert("Array length is the same", () => user_with_filled_values.MonthlyPlayCounts.Length == getChartValuesLength());
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@ -108,13 +108,13 @@ namespace osu.Game.Tests.Visual.Online
|
|||||||
private static readonly APIUser user_with_empty_values = new APIUser
|
private static readonly APIUser user_with_empty_values = new APIUser
|
||||||
{
|
{
|
||||||
Id = 2,
|
Id = 2,
|
||||||
MonthlyPlaycounts = Array.Empty<APIUserHistoryCount>()
|
MonthlyPlayCounts = Array.Empty<APIUserHistoryCount>()
|
||||||
};
|
};
|
||||||
|
|
||||||
private static readonly APIUser user_with_one_value = new APIUser
|
private static readonly APIUser user_with_one_value = new APIUser
|
||||||
{
|
{
|
||||||
Id = 3,
|
Id = 3,
|
||||||
MonthlyPlaycounts = new[]
|
MonthlyPlayCounts = new[]
|
||||||
{
|
{
|
||||||
new APIUserHistoryCount { Date = new DateTime(2010, 5, 1), Count = 100 }
|
new APIUserHistoryCount { Date = new DateTime(2010, 5, 1), Count = 100 }
|
||||||
}
|
}
|
||||||
@ -123,7 +123,7 @@ namespace osu.Game.Tests.Visual.Online
|
|||||||
private static readonly APIUser user_with_two_values = new APIUser
|
private static readonly APIUser user_with_two_values = new APIUser
|
||||||
{
|
{
|
||||||
Id = 4,
|
Id = 4,
|
||||||
MonthlyPlaycounts = new[]
|
MonthlyPlayCounts = new[]
|
||||||
{
|
{
|
||||||
new APIUserHistoryCount { Date = new DateTime(2010, 5, 1), Count = 1 },
|
new APIUserHistoryCount { Date = new DateTime(2010, 5, 1), Count = 1 },
|
||||||
new APIUserHistoryCount { Date = new DateTime(2010, 6, 1), Count = 2 }
|
new APIUserHistoryCount { Date = new DateTime(2010, 6, 1), Count = 2 }
|
||||||
@ -133,7 +133,7 @@ namespace osu.Game.Tests.Visual.Online
|
|||||||
private static readonly APIUser user_with_constant_values = new APIUser
|
private static readonly APIUser user_with_constant_values = new APIUser
|
||||||
{
|
{
|
||||||
Id = 5,
|
Id = 5,
|
||||||
MonthlyPlaycounts = new[]
|
MonthlyPlayCounts = new[]
|
||||||
{
|
{
|
||||||
new APIUserHistoryCount { Date = new DateTime(2010, 5, 1), Count = 5 },
|
new APIUserHistoryCount { Date = new DateTime(2010, 5, 1), Count = 5 },
|
||||||
new APIUserHistoryCount { Date = new DateTime(2010, 6, 1), Count = 5 },
|
new APIUserHistoryCount { Date = new DateTime(2010, 6, 1), Count = 5 },
|
||||||
@ -144,7 +144,7 @@ namespace osu.Game.Tests.Visual.Online
|
|||||||
private static readonly APIUser user_with_zero_values = new APIUser
|
private static readonly APIUser user_with_zero_values = new APIUser
|
||||||
{
|
{
|
||||||
Id = 6,
|
Id = 6,
|
||||||
MonthlyPlaycounts = new[]
|
MonthlyPlayCounts = new[]
|
||||||
{
|
{
|
||||||
new APIUserHistoryCount { Date = new DateTime(2010, 5, 1), Count = 0 },
|
new APIUserHistoryCount { Date = new DateTime(2010, 5, 1), Count = 0 },
|
||||||
new APIUserHistoryCount { Date = new DateTime(2010, 6, 1), Count = 0 },
|
new APIUserHistoryCount { Date = new DateTime(2010, 6, 1), Count = 0 },
|
||||||
@ -155,7 +155,7 @@ namespace osu.Game.Tests.Visual.Online
|
|||||||
private static readonly APIUser user_with_filled_values = new APIUser
|
private static readonly APIUser user_with_filled_values = new APIUser
|
||||||
{
|
{
|
||||||
Id = 7,
|
Id = 7,
|
||||||
MonthlyPlaycounts = new[]
|
MonthlyPlayCounts = new[]
|
||||||
{
|
{
|
||||||
new APIUserHistoryCount { Date = new DateTime(2010, 5, 1), Count = 1000 },
|
new APIUserHistoryCount { Date = new DateTime(2010, 5, 1), Count = 1000 },
|
||||||
new APIUserHistoryCount { Date = new DateTime(2010, 6, 1), Count = 20 },
|
new APIUserHistoryCount { Date = new DateTime(2010, 6, 1), Count = 20 },
|
||||||
@ -170,7 +170,7 @@ namespace osu.Game.Tests.Visual.Online
|
|||||||
private static readonly APIUser user_with_missing_values = new APIUser
|
private static readonly APIUser user_with_missing_values = new APIUser
|
||||||
{
|
{
|
||||||
Id = 8,
|
Id = 8,
|
||||||
MonthlyPlaycounts = new[]
|
MonthlyPlayCounts = new[]
|
||||||
{
|
{
|
||||||
new APIUserHistoryCount { Date = new DateTime(2020, 1, 1), Count = 100 },
|
new APIUserHistoryCount { Date = new DateTime(2020, 1, 1), Count = 100 },
|
||||||
new APIUserHistoryCount { Date = new DateTime(2020, 7, 1), Count = 200 }
|
new APIUserHistoryCount { Date = new DateTime(2020, 7, 1), Count = 200 }
|
||||||
|
@ -309,8 +309,8 @@ namespace osu.Game.Tests.Visual.Online
|
|||||||
|
|
||||||
private class TestStandAloneChatDisplay : StandAloneChatDisplay
|
private class TestStandAloneChatDisplay : StandAloneChatDisplay
|
||||||
{
|
{
|
||||||
public TestStandAloneChatDisplay(bool textbox = false)
|
public TestStandAloneChatDisplay(bool textBox = false)
|
||||||
: base(textbox)
|
: base(textBox)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ namespace osu.Game.Tests.Visual.Playlists
|
|||||||
{
|
{
|
||||||
const string not_found_prefix = "beatmaps not found:";
|
const string not_found_prefix = "beatmaps not found:";
|
||||||
|
|
||||||
string errorMesage = null;
|
string errorMessage = null;
|
||||||
|
|
||||||
AddStep("setup", () =>
|
AddStep("setup", () =>
|
||||||
{
|
{
|
||||||
@ -96,9 +96,9 @@ namespace osu.Game.Tests.Visual.Playlists
|
|||||||
SelectedRoom.Value.Name.Value = "Test Room";
|
SelectedRoom.Value.Name.Value = "Test Room";
|
||||||
SelectedRoom.Value.Playlist.Add(new PlaylistItem { Beatmap = { Value = beatmap } });
|
SelectedRoom.Value.Playlist.Add(new PlaylistItem { Beatmap = { Value = beatmap } });
|
||||||
|
|
||||||
errorMesage = $"{not_found_prefix} {beatmap.OnlineID}";
|
errorMessage = $"{not_found_prefix} {beatmap.OnlineID}";
|
||||||
|
|
||||||
RoomManager.CreateRequested = _ => errorMesage;
|
RoomManager.CreateRequested = _ => errorMessage;
|
||||||
});
|
});
|
||||||
|
|
||||||
AddAssert("error not displayed", () => !settings.ErrorText.IsPresent);
|
AddAssert("error not displayed", () => !settings.ErrorText.IsPresent);
|
||||||
@ -107,7 +107,7 @@ namespace osu.Game.Tests.Visual.Playlists
|
|||||||
AddStep("create room", () => settings.ApplyButton.Action.Invoke());
|
AddStep("create room", () => settings.ApplyButton.Action.Invoke());
|
||||||
|
|
||||||
AddAssert("error displayed", () => settings.ErrorText.IsPresent);
|
AddAssert("error displayed", () => settings.ErrorText.IsPresent);
|
||||||
AddAssert("error has custom text", () => settings.ErrorText.Text != errorMesage);
|
AddAssert("error has custom text", () => settings.ErrorText.Text != errorMessage);
|
||||||
AddAssert("playlist item marked invalid", () => !SelectedRoom.Value.Playlist[0].Valid.Value);
|
AddAssert("playlist item marked invalid", () => !SelectedRoom.Value.Playlist[0].Valid.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ namespace osu.Game.Tests.Visual.Settings
|
|||||||
new Box
|
new Box
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Colour = colours.GreySeafoam
|
Colour = colours.GreySeaFoam
|
||||||
},
|
},
|
||||||
restoreDefaultValueButton = new RestoreDefaultValueButton<float>
|
restoreDefaultValueButton = new RestoreDefaultValueButton<float>
|
||||||
{
|
{
|
||||||
|
@ -61,7 +61,7 @@ namespace osu.Game.Tests.Visual.Settings
|
|||||||
};
|
};
|
||||||
|
|
||||||
[SettingSource("Sample number textbox", "Textbox number entry", SettingControlType = typeof(SettingsNumberBox))]
|
[SettingSource("Sample number textbox", "Textbox number entry", SettingControlType = typeof(SettingsNumberBox))]
|
||||||
public Bindable<int?> IntTextboxBindable { get; } = new Bindable<int?>
|
public Bindable<int?> IntTextBoxBindable { get; } = new Bindable<int?>
|
||||||
{
|
{
|
||||||
Default = null,
|
Default = null,
|
||||||
Value = null
|
Value = null
|
||||||
|
@ -29,10 +29,10 @@ namespace osu.Game.Tests.Visual.UserInterface
|
|||||||
AddStep("Display toast with lengthy text", () => osd.Display(new LengthyToast()));
|
AddStep("Display toast with lengthy text", () => osd.Display(new LengthyToast()));
|
||||||
AddAssert("Toast width is greater than 240", () => osd.Child.Width > 240);
|
AddAssert("Toast width is greater than 240", () => osd.Child.Width > 240);
|
||||||
|
|
||||||
AddRepeatStep("Change toggle (no bind)", () => config.ToggleSetting(TestConfigSetting.ToggleSettingNoKeybind), 2);
|
AddRepeatStep("Change toggle (no bind)", () => config.ToggleSetting(TestConfigSetting.ToggleSettingNoKeyBind), 2);
|
||||||
AddRepeatStep("Change toggle (with bind)", () => config.ToggleSetting(TestConfigSetting.ToggleSettingWithKeybind), 2);
|
AddRepeatStep("Change toggle (with bind)", () => config.ToggleSetting(TestConfigSetting.ToggleSettingWithKeyBind), 2);
|
||||||
AddRepeatStep("Change enum (no bind)", () => config.IncrementEnumSetting(TestConfigSetting.EnumSettingNoKeybind), 3);
|
AddRepeatStep("Change enum (no bind)", () => config.IncrementEnumSetting(TestConfigSetting.EnumSettingNoKeyBind), 3);
|
||||||
AddRepeatStep("Change enum (with bind)", () => config.IncrementEnumSetting(TestConfigSetting.EnumSettingWithKeybind), 3);
|
AddRepeatStep("Change enum (with bind)", () => config.IncrementEnumSetting(TestConfigSetting.EnumSettingWithKeyBind), 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TestConfigManager : ConfigManager<TestConfigSetting>
|
private class TestConfigManager : ConfigManager<TestConfigSetting>
|
||||||
@ -44,10 +44,10 @@ namespace osu.Game.Tests.Visual.UserInterface
|
|||||||
|
|
||||||
protected override void InitialiseDefaults()
|
protected override void InitialiseDefaults()
|
||||||
{
|
{
|
||||||
SetDefault(TestConfigSetting.ToggleSettingNoKeybind, false);
|
SetDefault(TestConfigSetting.ToggleSettingNoKeyBind, false);
|
||||||
SetDefault(TestConfigSetting.EnumSettingNoKeybind, EnumSetting.Setting1);
|
SetDefault(TestConfigSetting.EnumSettingNoKeyBind, EnumSetting.Setting1);
|
||||||
SetDefault(TestConfigSetting.ToggleSettingWithKeybind, false);
|
SetDefault(TestConfigSetting.ToggleSettingWithKeyBind, false);
|
||||||
SetDefault(TestConfigSetting.EnumSettingWithKeybind, EnumSetting.Setting1);
|
SetDefault(TestConfigSetting.EnumSettingWithKeyBind, EnumSetting.Setting1);
|
||||||
|
|
||||||
base.InitialiseDefaults();
|
base.InitialiseDefaults();
|
||||||
}
|
}
|
||||||
@ -64,10 +64,10 @@ namespace osu.Game.Tests.Visual.UserInterface
|
|||||||
|
|
||||||
public override TrackedSettings CreateTrackedSettings() => new TrackedSettings
|
public override TrackedSettings CreateTrackedSettings() => new TrackedSettings
|
||||||
{
|
{
|
||||||
new TrackedSetting<bool>(TestConfigSetting.ToggleSettingNoKeybind, b => new SettingDescription(b, "toggle setting with no keybind", b ? "enabled" : "disabled")),
|
new TrackedSetting<bool>(TestConfigSetting.ToggleSettingNoKeyBind, b => new SettingDescription(b, "toggle setting with no keybind", b ? "enabled" : "disabled")),
|
||||||
new TrackedSetting<EnumSetting>(TestConfigSetting.EnumSettingNoKeybind, v => new SettingDescription(v, "enum setting with no keybind", v.ToString())),
|
new TrackedSetting<EnumSetting>(TestConfigSetting.EnumSettingNoKeyBind, v => new SettingDescription(v, "enum setting with no keybind", v.ToString())),
|
||||||
new TrackedSetting<bool>(TestConfigSetting.ToggleSettingWithKeybind, b => new SettingDescription(b, "toggle setting with keybind", b ? "enabled" : "disabled", "fake keybind")),
|
new TrackedSetting<bool>(TestConfigSetting.ToggleSettingWithKeyBind, b => new SettingDescription(b, "toggle setting with keybind", b ? "enabled" : "disabled", "fake keybind")),
|
||||||
new TrackedSetting<EnumSetting>(TestConfigSetting.EnumSettingWithKeybind, v => new SettingDescription(v, "enum setting with keybind", v.ToString(), "fake keybind")),
|
new TrackedSetting<EnumSetting>(TestConfigSetting.EnumSettingWithKeyBind, v => new SettingDescription(v, "enum setting with keybind", v.ToString(), "fake keybind")),
|
||||||
};
|
};
|
||||||
|
|
||||||
protected override void PerformLoad()
|
protected override void PerformLoad()
|
||||||
@ -79,10 +79,10 @@ namespace osu.Game.Tests.Visual.UserInterface
|
|||||||
|
|
||||||
private enum TestConfigSetting
|
private enum TestConfigSetting
|
||||||
{
|
{
|
||||||
ToggleSettingNoKeybind,
|
ToggleSettingNoKeyBind,
|
||||||
EnumSettingNoKeybind,
|
EnumSettingNoKeyBind,
|
||||||
ToggleSettingWithKeybind,
|
ToggleSettingWithKeyBind,
|
||||||
EnumSettingWithKeybind
|
EnumSettingWithKeyBind
|
||||||
}
|
}
|
||||||
|
|
||||||
private enum EnumSetting
|
private enum EnumSetting
|
||||||
|
@ -62,6 +62,6 @@ namespace osu.Game.Tests.Visual.UserInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void clearTextboxes(IEnumerable<OsuTextBox> textBoxes) => AddStep("clear textbox", () => textBoxes.ForEach(textBox => textBox.Text = null));
|
private void clearTextboxes(IEnumerable<OsuTextBox> textBoxes) => AddStep("clear textbox", () => textBoxes.ForEach(textBox => textBox.Text = null));
|
||||||
private void expectedValue(IEnumerable<OsuTextBox> textBoxes, string value) => AddAssert("expected textbox value", () => textBoxes.All(textbox => textbox.Text == value));
|
private void expectedValue(IEnumerable<OsuTextBox> textBoxes, string value) => AddAssert("expected textbox value", () => textBoxes.All(textBox => textBox.Text == value));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ namespace osu.Game.Tests.Visual.UserInterface
|
|||||||
new Box
|
new Box
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Colour = colours.GreySeafoam
|
Colour = colours.GreySeaFoam
|
||||||
},
|
},
|
||||||
CreateContent()
|
CreateContent()
|
||||||
});
|
});
|
||||||
|
@ -85,14 +85,14 @@ namespace osu.Game.Tournament.Screens.Drawings.Components
|
|||||||
|
|
||||||
private ScrollState scrollState;
|
private ScrollState scrollState;
|
||||||
|
|
||||||
private void setScrollState(ScrollState newstate)
|
private void setScrollState(ScrollState newState)
|
||||||
{
|
{
|
||||||
if (scrollState == newstate)
|
if (scrollState == newState)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
delayedStateChangeDelegate?.Cancel();
|
delayedStateChangeDelegate?.Cancel();
|
||||||
|
|
||||||
switch (scrollState = newstate)
|
switch (scrollState = newState)
|
||||||
{
|
{
|
||||||
case ScrollState.Scrolling:
|
case ScrollState.Scrolling:
|
||||||
resetSelected();
|
resetSelected();
|
||||||
|
@ -208,10 +208,10 @@ namespace osu.Game.Tournament.Screens.Ladder.Components
|
|||||||
{
|
{
|
||||||
if (Match.Round.Value == null) return;
|
if (Match.Round.Value == null) return;
|
||||||
|
|
||||||
int instaWinAmount = Match.Round.Value.BestOf.Value / 2;
|
int instantWinAmount = Match.Round.Value.BestOf.Value / 2;
|
||||||
|
|
||||||
Match.Completed.Value = Match.Round.Value.BestOf.Value > 0
|
Match.Completed.Value = Match.Round.Value.BestOf.Value > 0
|
||||||
&& (Match.Team1Score.Value + Match.Team2Score.Value >= Match.Round.Value.BestOf.Value || Match.Team1Score.Value > instaWinAmount || Match.Team2Score.Value > instaWinAmount);
|
&& (Match.Team1Score.Value + Match.Team2Score.Value >= Match.Round.Value.BestOf.Value || Match.Team1Score.Value > instantWinAmount || Match.Team2Score.Value > instantWinAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void LoadComplete()
|
protected override void LoadComplete()
|
||||||
|
@ -50,7 +50,7 @@ namespace osu.Game.Tournament.Screens.Setup
|
|||||||
{
|
{
|
||||||
new Box
|
new Box
|
||||||
{
|
{
|
||||||
Colour = colours.GreySeafoamDark,
|
Colour = colours.GreySeaFoamDark,
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
},
|
},
|
||||||
new GridContainer
|
new GridContainer
|
||||||
|
@ -94,9 +94,9 @@ namespace osu.Game.Beatmaps.Drawables
|
|||||||
if (colourProvider != null)
|
if (colourProvider != null)
|
||||||
statusText.Colour = status == BeatmapOnlineStatus.Graveyard ? colourProvider.Background1 : colourProvider.Background3;
|
statusText.Colour = status == BeatmapOnlineStatus.Graveyard ? colourProvider.Background1 : colourProvider.Background3;
|
||||||
else
|
else
|
||||||
statusText.Colour = status == BeatmapOnlineStatus.Graveyard ? colours.GreySeafoamLight : Color4.Black;
|
statusText.Colour = status == BeatmapOnlineStatus.Graveyard ? colours.GreySeaFoamLight : Color4.Black;
|
||||||
|
|
||||||
background.Colour = OsuColour.ForBeatmapSetOnlineStatus(Status) ?? colourProvider?.Light1 ?? colours.GreySeafoamLighter;
|
background.Colour = OsuColour.ForBeatmapSetOnlineStatus(Status) ?? colourProvider?.Light1 ?? colours.GreySeaFoamLighter;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -146,8 +146,8 @@ namespace osu.Game.Collections
|
|||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(OsuColour colours)
|
private void load(OsuColour colours)
|
||||||
{
|
{
|
||||||
BackgroundUnfocused = colours.GreySeafoamDarker.Darken(0.5f);
|
BackgroundUnfocused = colours.GreySeaFoamDarker.Darken(0.5f);
|
||||||
BackgroundFocused = colours.GreySeafoam;
|
BackgroundFocused = colours.GreySeaFoam;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ namespace osu.Game.Collections
|
|||||||
{
|
{
|
||||||
new Box
|
new Box
|
||||||
{
|
{
|
||||||
Colour = colours.GreySeafoamDark,
|
Colour = colours.GreySeaFoamDark,
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
},
|
},
|
||||||
new Container
|
new Container
|
||||||
@ -82,7 +82,7 @@ namespace osu.Game.Collections
|
|||||||
Anchor = Anchor.CentreRight,
|
Anchor = Anchor.CentreRight,
|
||||||
Origin = Anchor.CentreRight,
|
Origin = Anchor.CentreRight,
|
||||||
Icon = FontAwesome.Solid.Times,
|
Icon = FontAwesome.Solid.Times,
|
||||||
Colour = colours.GreySeafoamDarker,
|
Colour = colours.GreySeaFoamDarker,
|
||||||
Scale = new Vector2(0.8f),
|
Scale = new Vector2(0.8f),
|
||||||
X = -10,
|
X = -10,
|
||||||
Action = () => State.Value = Visibility.Hidden
|
Action = () => State.Value = Visibility.Hidden
|
||||||
@ -100,7 +100,7 @@ namespace osu.Game.Collections
|
|||||||
new Box
|
new Box
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Colour = colours.GreySeafoamDarker
|
Colour = colours.GreySeaFoamDarker
|
||||||
},
|
},
|
||||||
new DrawableCollectionList
|
new DrawableCollectionList
|
||||||
{
|
{
|
||||||
|
@ -56,7 +56,7 @@ namespace osu.Game.Graphics
|
|||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(OsuColour colours)
|
private void load(OsuColour colours)
|
||||||
{
|
{
|
||||||
background.Colour = colours.GreySeafoamDarker;
|
background.Colour = colours.GreySeaFoamDarker;
|
||||||
timeText.Colour = colours.BlueLighter;
|
timeText.Colour = colours.BlueLighter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -212,12 +212,12 @@ namespace osu.Game.Graphics
|
|||||||
public readonly Color4 GreySkyDark = Color4Extensions.FromHex(@"303d47");
|
public readonly Color4 GreySkyDark = Color4Extensions.FromHex(@"303d47");
|
||||||
public readonly Color4 GreySkyDarker = Color4Extensions.FromHex(@"21272c");
|
public readonly Color4 GreySkyDarker = Color4Extensions.FromHex(@"21272c");
|
||||||
|
|
||||||
public readonly Color4 Seafoam = Color4Extensions.FromHex(@"05ffa2");
|
public readonly Color4 SeaFoam = Color4Extensions.FromHex(@"05ffa2");
|
||||||
public readonly Color4 GreySeafoamLighter = Color4Extensions.FromHex(@"9ebab1");
|
public readonly Color4 GreySeaFoamLighter = Color4Extensions.FromHex(@"9ebab1");
|
||||||
public readonly Color4 GreySeafoamLight = Color4Extensions.FromHex(@"4d7365");
|
public readonly Color4 GreySeaFoamLight = Color4Extensions.FromHex(@"4d7365");
|
||||||
public readonly Color4 GreySeafoam = Color4Extensions.FromHex(@"33413c");
|
public readonly Color4 GreySeaFoam = Color4Extensions.FromHex(@"33413c");
|
||||||
public readonly Color4 GreySeafoamDark = Color4Extensions.FromHex(@"2c3532");
|
public readonly Color4 GreySeaFoamDark = Color4Extensions.FromHex(@"2c3532");
|
||||||
public readonly Color4 GreySeafoamDarker = Color4Extensions.FromHex(@"1e2422");
|
public readonly Color4 GreySeaFoamDarker = Color4Extensions.FromHex(@"1e2422");
|
||||||
|
|
||||||
public readonly Color4 Cyan = Color4Extensions.FromHex(@"05f4fd");
|
public readonly Color4 Cyan = Color4Extensions.FromHex(@"05f4fd");
|
||||||
public readonly Color4 GreyCyanLighter = Color4Extensions.FromHex(@"77b1b3");
|
public readonly Color4 GreyCyanLighter = Color4Extensions.FromHex(@"77b1b3");
|
||||||
|
@ -39,10 +39,10 @@ namespace osu.Game.Graphics
|
|||||||
public static IconUsage ListSearch => Get(0xe032);
|
public static IconUsage ListSearch => Get(0xe032);
|
||||||
|
|
||||||
//osu! playstyles
|
//osu! playstyles
|
||||||
public static IconUsage PlaystyleTablet => Get(0xe02a);
|
public static IconUsage PlayStyleTablet => Get(0xe02a);
|
||||||
public static IconUsage PlaystyleMouse => Get(0xe029);
|
public static IconUsage PlayStyleMouse => Get(0xe029);
|
||||||
public static IconUsage PlaystyleKeyboard => Get(0xe02b);
|
public static IconUsage PlayStyleKeyboard => Get(0xe02b);
|
||||||
public static IconUsage PlaystyleTouch => Get(0xe02c);
|
public static IconUsage PlayStyleTouch => Get(0xe02c);
|
||||||
|
|
||||||
// osu! difficulties
|
// osu! difficulties
|
||||||
public static IconUsage EasyOsu => Get(0xe015);
|
public static IconUsage EasyOsu => Get(0xe015);
|
||||||
@ -77,17 +77,17 @@ namespace osu.Game.Graphics
|
|||||||
public static IconUsage ModAutopilot => Get(0xe03a);
|
public static IconUsage ModAutopilot => Get(0xe03a);
|
||||||
public static IconUsage ModAuto => Get(0xe03b);
|
public static IconUsage ModAuto => Get(0xe03b);
|
||||||
public static IconUsage ModCinema => Get(0xe03c);
|
public static IconUsage ModCinema => Get(0xe03c);
|
||||||
public static IconUsage ModDoubletime => Get(0xe03d);
|
public static IconUsage ModDoubleTime => Get(0xe03d);
|
||||||
public static IconUsage ModEasy => Get(0xe03e);
|
public static IconUsage ModEasy => Get(0xe03e);
|
||||||
public static IconUsage ModFlashlight => Get(0xe03f);
|
public static IconUsage ModFlashlight => Get(0xe03f);
|
||||||
public static IconUsage ModHalftime => Get(0xe040);
|
public static IconUsage ModHalftime => Get(0xe040);
|
||||||
public static IconUsage ModHardrock => Get(0xe041);
|
public static IconUsage ModHardRock => Get(0xe041);
|
||||||
public static IconUsage ModHidden => Get(0xe042);
|
public static IconUsage ModHidden => Get(0xe042);
|
||||||
public static IconUsage ModNightcore => Get(0xe043);
|
public static IconUsage ModNightcore => Get(0xe043);
|
||||||
public static IconUsage ModNofail => Get(0xe044);
|
public static IconUsage ModNoFail => Get(0xe044);
|
||||||
public static IconUsage ModRelax => Get(0xe045);
|
public static IconUsage ModRelax => Get(0xe045);
|
||||||
public static IconUsage ModSpunout => Get(0xe046);
|
public static IconUsage ModSpunOut => Get(0xe046);
|
||||||
public static IconUsage ModSuddendeath => Get(0xe047);
|
public static IconUsage ModSuddenDeath => Get(0xe047);
|
||||||
public static IconUsage ModTarget => Get(0xe048);
|
public static IconUsage ModTarget => Get(0xe048);
|
||||||
public static IconUsage ModBg => Get(0xe04a);
|
public static IconUsage ModBg => Get(0xe04a);
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ namespace osu.Game.Graphics.UserInterfaceV2
|
|||||||
|
|
||||||
InternalChild = new Box
|
InternalChild = new Box
|
||||||
{
|
{
|
||||||
Colour = colours.GreySeafoamDarker,
|
Colour = colours.GreySeaFoamDarker,
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ namespace osu.Game.Graphics.UserInterfaceV2
|
|||||||
[BackgroundDependencyLoader(true)]
|
[BackgroundDependencyLoader(true)]
|
||||||
private void load([CanBeNull] OverlayColourProvider colourProvider, OsuColour osuColour)
|
private void load([CanBeNull] OverlayColourProvider colourProvider, OsuColour osuColour)
|
||||||
{
|
{
|
||||||
Background.Colour = colourProvider?.Dark5 ?? osuColour.GreySeafoamDark;
|
Background.Colour = colourProvider?.Dark5 ?? osuColour.GreySeaFoamDark;
|
||||||
|
|
||||||
Content.Padding = new MarginPadding(spacing);
|
Content.Padding = new MarginPadding(spacing);
|
||||||
Content.Spacing = new Vector2(0, spacing);
|
Content.Spacing = new Vector2(0, spacing);
|
||||||
|
@ -23,7 +23,7 @@ namespace osu.Game.Graphics.UserInterfaceV2
|
|||||||
[BackgroundDependencyLoader(true)]
|
[BackgroundDependencyLoader(true)]
|
||||||
private void load([CanBeNull] OverlayColourProvider overlayColourProvider, OsuColour osuColour)
|
private void load([CanBeNull] OverlayColourProvider overlayColourProvider, OsuColour osuColour)
|
||||||
{
|
{
|
||||||
Background.Colour = overlayColourProvider?.Dark6 ?? osuColour.GreySeafoamDarker;
|
Background.Colour = overlayColourProvider?.Dark6 ?? osuColour.GreySeaFoamDarker;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override TextBox CreateHexCodeTextBox() => new OsuTextBox();
|
protected override TextBox CreateHexCodeTextBox() => new OsuTextBox();
|
||||||
|
@ -39,7 +39,7 @@ namespace osu.Game.Graphics.UserInterfaceV2
|
|||||||
[BackgroundDependencyLoader(true)]
|
[BackgroundDependencyLoader(true)]
|
||||||
private void load([CanBeNull] OverlayColourProvider colourProvider, OsuColour colours)
|
private void load([CanBeNull] OverlayColourProvider colourProvider, OsuColour colours)
|
||||||
{
|
{
|
||||||
Background.Colour = Arrow.Colour = colourProvider?.Background4 ?? colours.GreySeafoamDarker;
|
Background.Colour = Arrow.Colour = colourProvider?.Background4 ?? colours.GreySeaFoamDarker;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Drawable CreateArrow() => Empty();
|
protected override Drawable CreateArrow() => Empty();
|
||||||
|
@ -32,7 +32,18 @@ namespace osu.Game.IO.Archives
|
|||||||
|
|
||||||
public abstract IEnumerable<string> Filenames { get; }
|
public abstract IEnumerable<string> Filenames { get; }
|
||||||
|
|
||||||
public virtual byte[] Get(string name) => GetAsync(name).Result;
|
public virtual byte[] Get(string name)
|
||||||
|
{
|
||||||
|
using (Stream input = GetStream(name))
|
||||||
|
{
|
||||||
|
if (input == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
byte[] buffer = new byte[input.Length];
|
||||||
|
input.Read(buffer);
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<byte[]> GetAsync(string name, CancellationToken cancellationToken = default)
|
public async Task<byte[]> GetAsync(string name, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
|
@ -235,9 +235,9 @@ namespace osu.Game.IO.Legacy
|
|||||||
|
|
||||||
if (typeName.Contains("System.Collections.Generic") && typeName.Contains("[["))
|
if (typeName.Contains("System.Collections.Generic") && typeName.Contains("[["))
|
||||||
{
|
{
|
||||||
string[] splitTyps = typeName.Split('[');
|
string[] splitTypes = typeName.Split('[');
|
||||||
|
|
||||||
foreach (string typ in splitTyps)
|
foreach (string typ in splitTypes)
|
||||||
{
|
{
|
||||||
if (typ.Contains("Version"))
|
if (typ.Contains("Version"))
|
||||||
{
|
{
|
||||||
|
@ -7,8 +7,8 @@ namespace osu.Game.Online.API
|
|||||||
{
|
{
|
||||||
public class APIException : InvalidOperationException
|
public class APIException : InvalidOperationException
|
||||||
{
|
{
|
||||||
public APIException(string messsage, Exception innerException)
|
public APIException(string message, Exception innerException)
|
||||||
: base(messsage, innerException)
|
: base(message, innerException)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -152,10 +152,10 @@ namespace osu.Game.Online.API.Requests.Responses
|
|||||||
public int ScoresRecentCount;
|
public int ScoresRecentCount;
|
||||||
|
|
||||||
[JsonProperty(@"beatmap_playcounts_count")]
|
[JsonProperty(@"beatmap_playcounts_count")]
|
||||||
public int BeatmapPlaycountsCount;
|
public int BeatmapPlayCountsCount;
|
||||||
|
|
||||||
[JsonProperty]
|
[JsonProperty(@"playstyle")]
|
||||||
private string[] playstyle
|
private string[] playStyle
|
||||||
{
|
{
|
||||||
set => PlayStyles = value?.Select(str => Enum.Parse(typeof(APIPlayStyle), str, true)).Cast<APIPlayStyle>().ToArray();
|
set => PlayStyles = value?.Select(str => Enum.Parse(typeof(APIPlayStyle), str, true)).Cast<APIPlayStyle>().ToArray();
|
||||||
}
|
}
|
||||||
@ -213,7 +213,7 @@ namespace osu.Game.Online.API.Requests.Responses
|
|||||||
public APIUserAchievement[] Achievements;
|
public APIUserAchievement[] Achievements;
|
||||||
|
|
||||||
[JsonProperty("monthly_playcounts")]
|
[JsonProperty("monthly_playcounts")]
|
||||||
public APIUserHistoryCount[] MonthlyPlaycounts;
|
public APIUserHistoryCount[] MonthlyPlayCounts;
|
||||||
|
|
||||||
[JsonProperty("replays_watched_counts")]
|
[JsonProperty("replays_watched_counts")]
|
||||||
public APIUserHistoryCount[] ReplaysWatchedCounts;
|
public APIUserHistoryCount[] ReplaysWatchedCounts;
|
||||||
|
@ -359,7 +359,7 @@ namespace osu.Game.Online.Chat
|
|||||||
/// right now it caps out at 50 messages and therefore only returns one channel's worth of content.
|
/// right now it caps out at 50 messages and therefore only returns one channel's worth of content.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="channel">The channel </param>
|
/// <param name="channel">The channel </param>
|
||||||
private void fetchInitalMessages(Channel channel)
|
private void fetchInitialMessages(Channel channel)
|
||||||
{
|
{
|
||||||
if (channel.Id <= 0 || channel.MessagesLoaded) return;
|
if (channel.Id <= 0 || channel.MessagesLoaded) return;
|
||||||
|
|
||||||
@ -465,7 +465,7 @@ namespace osu.Game.Online.Chat
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (fetchInitialMessages)
|
if (fetchInitialMessages)
|
||||||
fetchInitalMessages(channel);
|
this.fetchInitialMessages(channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
CurrentChannel.Value ??= channel;
|
CurrentChannel.Value ??= channel;
|
||||||
|
@ -170,7 +170,7 @@ namespace osu.Game.Online.Chat
|
|||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(OsuColour colours, ChatOverlay chatOverlay, NotificationOverlay notificationOverlay, ChannelManager channelManager)
|
private void load(OsuColour colours, ChatOverlay chatOverlay, NotificationOverlay notificationOverlay, ChannelManager channelManager)
|
||||||
{
|
{
|
||||||
IconBackgound.Colour = colours.PurpleDark;
|
IconBackground.Colour = colours.PurpleDark;
|
||||||
|
|
||||||
Activated = delegate
|
Activated = delegate
|
||||||
{
|
{
|
||||||
|
@ -23,27 +23,27 @@ namespace osu.Game.Online.Chat
|
|||||||
{
|
{
|
||||||
public readonly Bindable<Channel> Channel = new Bindable<Channel>();
|
public readonly Bindable<Channel> Channel = new Bindable<Channel>();
|
||||||
|
|
||||||
protected readonly ChatTextBox Textbox;
|
protected readonly ChatTextBox TextBox;
|
||||||
|
|
||||||
protected ChannelManager ChannelManager;
|
protected ChannelManager ChannelManager;
|
||||||
|
|
||||||
private StandAloneDrawableChannel drawableChannel;
|
private StandAloneDrawableChannel drawableChannel;
|
||||||
|
|
||||||
private readonly bool postingTextbox;
|
private readonly bool postingTextBox;
|
||||||
|
|
||||||
protected readonly Box Background;
|
protected readonly Box Background;
|
||||||
|
|
||||||
private const float textbox_height = 30;
|
private const float text_box_height = 30;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Construct a new instance.
|
/// Construct a new instance.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="postingTextbox">Whether a textbox for posting new messages should be displayed.</param>
|
/// <param name="postingTextBox">Whether a textbox for posting new messages should be displayed.</param>
|
||||||
public StandAloneChatDisplay(bool postingTextbox = false)
|
public StandAloneChatDisplay(bool postingTextBox = false)
|
||||||
{
|
{
|
||||||
const float corner_radius = 10;
|
const float corner_radius = 10;
|
||||||
|
|
||||||
this.postingTextbox = postingTextbox;
|
this.postingTextBox = postingTextBox;
|
||||||
CornerRadius = corner_radius;
|
CornerRadius = corner_radius;
|
||||||
Masking = true;
|
Masking = true;
|
||||||
|
|
||||||
@ -57,12 +57,12 @@ namespace osu.Game.Online.Chat
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
if (postingTextbox)
|
if (postingTextBox)
|
||||||
{
|
{
|
||||||
AddInternal(Textbox = new ChatTextBox
|
AddInternal(TextBox = new ChatTextBox
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.X,
|
RelativeSizeAxes = Axes.X,
|
||||||
Height = textbox_height,
|
Height = text_box_height,
|
||||||
PlaceholderText = "type your message",
|
PlaceholderText = "type your message",
|
||||||
CornerRadius = corner_radius,
|
CornerRadius = corner_radius,
|
||||||
ReleaseFocusOnCommit = false,
|
ReleaseFocusOnCommit = false,
|
||||||
@ -71,7 +71,7 @@ namespace osu.Game.Online.Chat
|
|||||||
Origin = Anchor.BottomLeft,
|
Origin = Anchor.BottomLeft,
|
||||||
});
|
});
|
||||||
|
|
||||||
Textbox.OnCommit += postMessage;
|
TextBox.OnCommit += postMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
Channel.BindValueChanged(channelChanged);
|
Channel.BindValueChanged(channelChanged);
|
||||||
@ -86,9 +86,9 @@ namespace osu.Game.Online.Chat
|
|||||||
protected virtual StandAloneDrawableChannel CreateDrawableChannel(Channel channel) =>
|
protected virtual StandAloneDrawableChannel CreateDrawableChannel(Channel channel) =>
|
||||||
new StandAloneDrawableChannel(channel);
|
new StandAloneDrawableChannel(channel);
|
||||||
|
|
||||||
private void postMessage(TextBox sender, bool newtext)
|
private void postMessage(TextBox sender, bool newText)
|
||||||
{
|
{
|
||||||
string text = Textbox.Text.Trim();
|
string text = TextBox.Text.Trim();
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(text))
|
if (string.IsNullOrWhiteSpace(text))
|
||||||
return;
|
return;
|
||||||
@ -98,7 +98,7 @@ namespace osu.Game.Online.Chat
|
|||||||
else
|
else
|
||||||
ChannelManager?.PostMessage(text, target: Channel.Value);
|
ChannelManager?.PostMessage(text, target: Channel.Value);
|
||||||
|
|
||||||
Textbox.Text = string.Empty;
|
TextBox.Text = string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual ChatLine CreateMessage(Message message) => new StandAloneMessage(message);
|
protected virtual ChatLine CreateMessage(Message message) => new StandAloneMessage(message);
|
||||||
@ -111,7 +111,7 @@ namespace osu.Game.Online.Chat
|
|||||||
|
|
||||||
drawableChannel = CreateDrawableChannel(e.NewValue);
|
drawableChannel = CreateDrawableChannel(e.NewValue);
|
||||||
drawableChannel.CreateChatLineAction = CreateMessage;
|
drawableChannel.CreateChatLineAction = CreateMessage;
|
||||||
drawableChannel.Padding = new MarginPadding { Bottom = postingTextbox ? textbox_height : 0 };
|
drawableChannel.Padding = new MarginPadding { Bottom = postingTextBox ? text_box_height : 0 };
|
||||||
|
|
||||||
AddInternal(drawableChannel);
|
AddInternal(drawableChannel);
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using JetBrains.Annotations;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
@ -112,9 +113,21 @@ namespace osu.Game.Online.Rooms
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region Newtonsoft.Json implicit ShouldSerialize() methods
|
||||||
|
|
||||||
|
// The properties in this region are used implicitly by Newtonsoft.Json to not serialise certain fields in some cases.
|
||||||
|
// They rely on being named exactly the same as the corresponding fields (casing included) and as such should NOT be renamed
|
||||||
|
// unless the fields are also renamed.
|
||||||
|
|
||||||
|
[UsedImplicitly]
|
||||||
public bool ShouldSerializeID() => false;
|
public bool ShouldSerializeID() => false;
|
||||||
|
|
||||||
|
// ReSharper disable once IdentifierTypo
|
||||||
|
[UsedImplicitly]
|
||||||
public bool ShouldSerializeapiBeatmap() => false;
|
public bool ShouldSerializeapiBeatmap() => false;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
public bool Equals(PlaylistItem other)
|
public bool Equals(PlaylistItem other)
|
||||||
=> ID == other?.ID
|
=> ID == other?.ID
|
||||||
&& BeatmapID == other.BeatmapID
|
&& BeatmapID == other.BeatmapID
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using JetBrains.Annotations;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
@ -211,8 +212,21 @@ namespace osu.Game.Online.Rooms
|
|||||||
Playlist.RemoveAll(i => i.Expired);
|
Playlist.RemoveAll(i => i.Expired);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region Newtonsoft.Json implicit ShouldSerialize() methods
|
||||||
|
|
||||||
|
// The properties in this region are used implicitly by Newtonsoft.Json to not serialise certain fields in some cases.
|
||||||
|
// They rely on being named exactly the same as the corresponding fields (casing included) and as such should NOT be renamed
|
||||||
|
// unless the fields are also renamed.
|
||||||
|
|
||||||
|
[UsedImplicitly]
|
||||||
public bool ShouldSerializeRoomID() => false;
|
public bool ShouldSerializeRoomID() => false;
|
||||||
|
|
||||||
|
[UsedImplicitly]
|
||||||
public bool ShouldSerializeHost() => false;
|
public bool ShouldSerializeHost() => false;
|
||||||
|
|
||||||
|
[UsedImplicitly]
|
||||||
public bool ShouldSerializeEndDate() => false;
|
public bool ShouldSerializeEndDate() => false;
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -152,12 +152,12 @@ namespace osu.Game.Overlays.AccountCreation
|
|||||||
loadingLayer.Hide();
|
loadingLayer.Hide();
|
||||||
|
|
||||||
if (host?.OnScreenKeyboardOverlapsGameWindow != true)
|
if (host?.OnScreenKeyboardOverlapsGameWindow != true)
|
||||||
focusNextTextbox();
|
focusNextTextBox();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void performRegistration()
|
private void performRegistration()
|
||||||
{
|
{
|
||||||
if (focusNextTextbox())
|
if (focusNextTextBox())
|
||||||
{
|
{
|
||||||
registerShake.Shake();
|
registerShake.Shake();
|
||||||
return;
|
return;
|
||||||
@ -209,19 +209,19 @@ namespace osu.Game.Overlays.AccountCreation
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool focusNextTextbox()
|
private bool focusNextTextBox()
|
||||||
{
|
{
|
||||||
var nextTextbox = nextUnfilledTextbox();
|
var nextTextBox = nextUnfilledTextBox();
|
||||||
|
|
||||||
if (nextTextbox != null)
|
if (nextTextBox != null)
|
||||||
{
|
{
|
||||||
Schedule(() => GetContainingInputManager().ChangeFocus(nextTextbox));
|
Schedule(() => GetContainingInputManager().ChangeFocus(nextTextBox));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private OsuTextBox nextUnfilledTextbox() => textboxes.FirstOrDefault(t => string.IsNullOrEmpty(t.Text));
|
private OsuTextBox nextUnfilledTextBox() => textboxes.FirstOrDefault(t => string.IsNullOrEmpty(t.Text));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,7 +38,7 @@ namespace osu.Game.Overlays
|
|||||||
public LocalisableString Title => ChatStrings.HeaderTitle;
|
public LocalisableString Title => ChatStrings.HeaderTitle;
|
||||||
public LocalisableString Description => ChatStrings.HeaderDescription;
|
public LocalisableString Description => ChatStrings.HeaderDescription;
|
||||||
|
|
||||||
private const float textbox_height = 60;
|
private const float text_box_height = 60;
|
||||||
private const float channel_selection_min_height = 0.3f;
|
private const float channel_selection_min_height = 0.3f;
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
@ -50,7 +50,7 @@ namespace osu.Game.Overlays
|
|||||||
|
|
||||||
private LoadingSpinner loading;
|
private LoadingSpinner loading;
|
||||||
|
|
||||||
private FocusedTextBox textbox;
|
private FocusedTextBox textBox;
|
||||||
|
|
||||||
private const int transition_length = 500;
|
private const int transition_length = 500;
|
||||||
|
|
||||||
@ -133,7 +133,7 @@ namespace osu.Game.Overlays
|
|||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Padding = new MarginPadding
|
Padding = new MarginPadding
|
||||||
{
|
{
|
||||||
Bottom = textbox_height
|
Bottom = text_box_height
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
new Container
|
new Container
|
||||||
@ -141,7 +141,7 @@ namespace osu.Game.Overlays
|
|||||||
Anchor = Anchor.BottomLeft,
|
Anchor = Anchor.BottomLeft,
|
||||||
Origin = Anchor.BottomLeft,
|
Origin = Anchor.BottomLeft,
|
||||||
RelativeSizeAxes = Axes.X,
|
RelativeSizeAxes = Axes.X,
|
||||||
Height = textbox_height,
|
Height = text_box_height,
|
||||||
Padding = new MarginPadding
|
Padding = new MarginPadding
|
||||||
{
|
{
|
||||||
Top = padding * 2,
|
Top = padding * 2,
|
||||||
@ -151,7 +151,7 @@ namespace osu.Game.Overlays
|
|||||||
},
|
},
|
||||||
Children = new Drawable[]
|
Children = new Drawable[]
|
||||||
{
|
{
|
||||||
textbox = new FocusedTextBox
|
textBox = new FocusedTextBox
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Height = 1,
|
Height = 1,
|
||||||
@ -197,7 +197,7 @@ namespace osu.Game.Overlays
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
textbox.OnCommit += postMessage;
|
textBox.OnCommit += postMessage;
|
||||||
|
|
||||||
ChannelTabControl.Current.ValueChanged += current => channelManager.CurrentChannel.Value = current.NewValue;
|
ChannelTabControl.Current.ValueChanged += current => channelManager.CurrentChannel.Value = current.NewValue;
|
||||||
ChannelTabControl.ChannelSelectorActive.ValueChanged += active => ChannelSelectionOverlay.State.Value = active.NewValue ? Visibility.Visible : Visibility.Hidden;
|
ChannelTabControl.ChannelSelectorActive.ValueChanged += active => ChannelSelectionOverlay.State.Value = active.NewValue ? Visibility.Visible : Visibility.Hidden;
|
||||||
@ -208,12 +208,12 @@ namespace osu.Game.Overlays
|
|||||||
|
|
||||||
if (state.NewValue == Visibility.Visible)
|
if (state.NewValue == Visibility.Visible)
|
||||||
{
|
{
|
||||||
textbox.HoldFocus = false;
|
textBox.HoldFocus = false;
|
||||||
if (1f - ChatHeight.Value < channel_selection_min_height)
|
if (1f - ChatHeight.Value < channel_selection_min_height)
|
||||||
this.TransformBindableTo(ChatHeight, 1f - channel_selection_min_height, 800, Easing.OutQuint);
|
this.TransformBindableTo(ChatHeight, 1f - channel_selection_min_height, 800, Easing.OutQuint);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
textbox.HoldFocus = true;
|
textBox.HoldFocus = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
ChannelSelectionOverlay.OnRequestJoin = channel => channelManager.JoinChannel(channel);
|
ChannelSelectionOverlay.OnRequestJoin = channel => channelManager.JoinChannel(channel);
|
||||||
@ -253,7 +253,7 @@ namespace osu.Game.Overlays
|
|||||||
{
|
{
|
||||||
if (e.NewValue == null)
|
if (e.NewValue == null)
|
||||||
{
|
{
|
||||||
textbox.Current.Disabled = true;
|
textBox.Current.Disabled = true;
|
||||||
currentChannelContainer.Clear(false);
|
currentChannelContainer.Clear(false);
|
||||||
ChannelSelectionOverlay.Show();
|
ChannelSelectionOverlay.Show();
|
||||||
return;
|
return;
|
||||||
@ -262,7 +262,7 @@ namespace osu.Game.Overlays
|
|||||||
if (e.NewValue is ChannelSelectorTabItem.ChannelSelectorTabChannel)
|
if (e.NewValue is ChannelSelectorTabItem.ChannelSelectorTabChannel)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
textbox.Current.Disabled = e.NewValue.ReadOnly;
|
textBox.Current.Disabled = e.NewValue.ReadOnly;
|
||||||
|
|
||||||
if (ChannelTabControl.Current.Value != e.NewValue)
|
if (ChannelTabControl.Current.Value != e.NewValue)
|
||||||
Scheduler.Add(() => ChannelTabControl.Current.Value = e.NewValue);
|
Scheduler.Add(() => ChannelTabControl.Current.Value = e.NewValue);
|
||||||
@ -402,7 +402,7 @@ namespace osu.Game.Overlays
|
|||||||
protected override void OnFocus(FocusEvent e)
|
protected override void OnFocus(FocusEvent e)
|
||||||
{
|
{
|
||||||
// this is necessary as textbox is masked away and therefore can't get focus :(
|
// this is necessary as textbox is masked away and therefore can't get focus :(
|
||||||
textbox.TakeFocus();
|
textBox.TakeFocus();
|
||||||
base.OnFocus(e);
|
base.OnFocus(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -411,7 +411,7 @@ namespace osu.Game.Overlays
|
|||||||
this.MoveToY(0, transition_length, Easing.OutQuint);
|
this.MoveToY(0, transition_length, Easing.OutQuint);
|
||||||
this.FadeIn(transition_length, Easing.OutQuint);
|
this.FadeIn(transition_length, Easing.OutQuint);
|
||||||
|
|
||||||
textbox.HoldFocus = true;
|
textBox.HoldFocus = true;
|
||||||
|
|
||||||
base.PopIn();
|
base.PopIn();
|
||||||
}
|
}
|
||||||
@ -423,7 +423,7 @@ namespace osu.Game.Overlays
|
|||||||
|
|
||||||
ChannelSelectionOverlay.Hide();
|
ChannelSelectionOverlay.Hide();
|
||||||
|
|
||||||
textbox.HoldFocus = false;
|
textBox.HoldFocus = false;
|
||||||
base.PopOut();
|
base.PopOut();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -481,9 +481,9 @@ namespace osu.Game.Overlays
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void postMessage(TextBox textbox, bool newText)
|
private void postMessage(TextBox textBox, bool newText)
|
||||||
{
|
{
|
||||||
string text = textbox.Text.Trim();
|
string text = textBox.Text.Trim();
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(text))
|
if (string.IsNullOrWhiteSpace(text))
|
||||||
return;
|
return;
|
||||||
@ -493,7 +493,7 @@ namespace osu.Game.Overlays
|
|||||||
else
|
else
|
||||||
channelManager.PostMessage(text);
|
channelManager.PostMessage(text);
|
||||||
|
|
||||||
textbox.Text = string.Empty;
|
textBox.Text = string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TabsArea : Container
|
private class TabsArea : Container
|
||||||
|
@ -362,15 +362,15 @@ namespace osu.Game.Overlays.Comments
|
|||||||
|
|
||||||
private void updateButtonsState()
|
private void updateButtonsState()
|
||||||
{
|
{
|
||||||
int loadedReplesCount = loadedReplies.Count;
|
int loadedRepliesCount = loadedReplies.Count;
|
||||||
bool hasUnloadedReplies = loadedReplesCount != Comment.RepliesCount;
|
bool hasUnloadedReplies = loadedRepliesCount != Comment.RepliesCount;
|
||||||
|
|
||||||
loadRepliesButton.FadeTo(hasUnloadedReplies && loadedReplesCount == 0 ? 1 : 0);
|
loadRepliesButton.FadeTo(hasUnloadedReplies && loadedRepliesCount == 0 ? 1 : 0);
|
||||||
showMoreButton.FadeTo(hasUnloadedReplies && loadedReplesCount > 0 ? 1 : 0);
|
showMoreButton.FadeTo(hasUnloadedReplies && loadedRepliesCount > 0 ? 1 : 0);
|
||||||
showRepliesButton.FadeTo(loadedReplesCount != 0 ? 1 : 0);
|
showRepliesButton.FadeTo(loadedRepliesCount != 0 ? 1 : 0);
|
||||||
|
|
||||||
if (Comment.IsTopLevel)
|
if (Comment.IsTopLevel)
|
||||||
chevronButton.FadeTo(loadedReplesCount != 0 ? 1 : 0);
|
chevronButton.FadeTo(loadedRepliesCount != 0 ? 1 : 0);
|
||||||
|
|
||||||
showMoreButton.IsLoading = loadRepliesButton.IsLoading = false;
|
showMoreButton.IsLoading = loadRepliesButton.IsLoading = false;
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@ namespace osu.Game.Overlays.Notifications
|
|||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(OsuColour colours)
|
private void load(OsuColour colours)
|
||||||
{
|
{
|
||||||
IconBackgound.Colour = ColourInfo.GradientVertical(colours.GreenDark, colours.GreenLight);
|
IconBackground.Colour = ColourInfo.GradientVertical(colours.GreenDark, colours.GreenLight);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,13 +43,13 @@ namespace osu.Game.Overlays.Notifications
|
|||||||
private readonly TextFlowContainer textDrawable;
|
private readonly TextFlowContainer textDrawable;
|
||||||
private readonly SpriteIcon iconDrawable;
|
private readonly SpriteIcon iconDrawable;
|
||||||
|
|
||||||
protected Box IconBackgound;
|
protected Box IconBackground;
|
||||||
|
|
||||||
public SimpleNotification()
|
public SimpleNotification()
|
||||||
{
|
{
|
||||||
IconContent.AddRange(new Drawable[]
|
IconContent.AddRange(new Drawable[]
|
||||||
{
|
{
|
||||||
IconBackgound = new Box
|
IconBackground = new Box
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Colour = ColourInfo.GradientVertical(OsuColour.Gray(0.2f), OsuColour.Gray(0.6f))
|
Colour = ColourInfo.GradientVertical(OsuColour.Gray(0.2f), OsuColour.Gray(0.6f))
|
||||||
|
@ -98,7 +98,7 @@ namespace osu.Game.Overlays.Profile.Header.Components
|
|||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(OsuColour colours)
|
private void load(OsuColour colours)
|
||||||
{
|
{
|
||||||
background.Colour = colours.GreySeafoamDarker;
|
background.Colour = colours.GreySeaFoamDarker;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void LoadComplete()
|
protected override void LoadComplete()
|
||||||
|
@ -28,7 +28,7 @@ namespace osu.Game.Overlays.Profile.Sections.Historical
|
|||||||
ItemsContainer.Direction = FillDirection.Vertical;
|
ItemsContainer.Direction = FillDirection.Vertical;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override int GetCount(APIUser user) => user.BeatmapPlaycountsCount;
|
protected override int GetCount(APIUser user) => user.BeatmapPlayCountsCount;
|
||||||
|
|
||||||
protected override APIRequest<List<APIUserMostPlayedBeatmap>> CreateRequest() =>
|
protected override APIRequest<List<APIUserMostPlayedBeatmap>> CreateRequest() =>
|
||||||
new GetUserMostPlayedBeatmapsRequest(User.Value.Id, VisiblePages++, ItemsPerPage);
|
new GetUserMostPlayedBeatmapsRequest(User.Value.Id, VisiblePages++, ItemsPerPage);
|
||||||
|
@ -17,6 +17,6 @@ namespace osu.Game.Overlays.Profile.Sections.Historical
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override APIUserHistoryCount[] GetValues(APIUser user) => user?.MonthlyPlaycounts;
|
protected override APIUserHistoryCount[] GetValues(APIUser user) => user?.MonthlyPlayCounts;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,7 @@ namespace osu.Game.Overlays.Profile.Sections.Kudosu
|
|||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load()
|
private void load()
|
||||||
{
|
{
|
||||||
date.Colour = colours.GreySeafoamLighter;
|
date.Colour = colours.GreySeaFoamLighter;
|
||||||
var formattedSource = MessageFormatter.FormatText(getString(historyItem));
|
var formattedSource = MessageFormatter.FormatText(getString(historyItem));
|
||||||
linkFlowContainer.AddLinks(formattedSource.Text, formattedSource.Links);
|
linkFlowContainer.AddLinks(formattedSource.Text, formattedSource.Links);
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance
|
|||||||
new Box
|
new Box
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Colour = colours.GreySeafoamDark
|
Colour = colours.GreySeaFoamDark
|
||||||
},
|
},
|
||||||
new GridContainer
|
new GridContainer
|
||||||
{
|
{
|
||||||
|
@ -25,7 +25,7 @@ namespace osu.Game.Rulesets.Mods
|
|||||||
|
|
||||||
public void ApplyToHUD(HUDOverlay overlay)
|
public void ApplyToHUD(HUDOverlay overlay)
|
||||||
{
|
{
|
||||||
overlay.ShowHealthbar.BindTo(showHealthBar);
|
overlay.ShowHealthBar.BindTo(showHealthBar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ namespace osu.Game.Rulesets.Mods
|
|||||||
{
|
{
|
||||||
public override string Name => "Double Time";
|
public override string Name => "Double Time";
|
||||||
public override string Acronym => "DT";
|
public override string Acronym => "DT";
|
||||||
public override IconUsage? Icon => OsuIcon.ModDoubletime;
|
public override IconUsage? Icon => OsuIcon.ModDoubleTime;
|
||||||
public override ModType Type => ModType.DifficultyIncrease;
|
public override ModType Type => ModType.DifficultyIncrease;
|
||||||
public override string Description => "Zoooooooooom...";
|
public override string Description => "Zoooooooooom...";
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ namespace osu.Game.Rulesets.Mods
|
|||||||
{
|
{
|
||||||
public override string Name => "Hard Rock";
|
public override string Name => "Hard Rock";
|
||||||
public override string Acronym => "HR";
|
public override string Acronym => "HR";
|
||||||
public override IconUsage? Icon => OsuIcon.ModHardrock;
|
public override IconUsage? Icon => OsuIcon.ModHardRock;
|
||||||
public override ModType Type => ModType.DifficultyIncrease;
|
public override ModType Type => ModType.DifficultyIncrease;
|
||||||
public override string Description => "Everything just got a bit harder...";
|
public override string Description => "Everything just got a bit harder...";
|
||||||
public override Type[] IncompatibleMods => new[] { typeof(ModEasy), typeof(ModDifficultyAdjust) };
|
public override Type[] IncompatibleMods => new[] { typeof(ModEasy), typeof(ModDifficultyAdjust) };
|
||||||
|
@ -11,7 +11,7 @@ namespace osu.Game.Rulesets.Mods
|
|||||||
{
|
{
|
||||||
public override string Name => "No Fail";
|
public override string Name => "No Fail";
|
||||||
public override string Acronym => "NF";
|
public override string Acronym => "NF";
|
||||||
public override IconUsage? Icon => OsuIcon.ModNofail;
|
public override IconUsage? Icon => OsuIcon.ModNoFail;
|
||||||
public override ModType Type => ModType.DifficultyReduction;
|
public override ModType Type => ModType.DifficultyReduction;
|
||||||
public override string Description => "You can't fail, no matter what.";
|
public override string Description => "You can't fail, no matter what.";
|
||||||
public override double ScoreMultiplier => 0.5;
|
public override double ScoreMultiplier => 0.5;
|
||||||
|
@ -14,7 +14,7 @@ namespace osu.Game.Rulesets.Mods
|
|||||||
{
|
{
|
||||||
public override string Name => "Sudden Death";
|
public override string Name => "Sudden Death";
|
||||||
public override string Acronym => "SD";
|
public override string Acronym => "SD";
|
||||||
public override IconUsage? Icon => OsuIcon.ModSuddendeath;
|
public override IconUsage? Icon => OsuIcon.ModSuddenDeath;
|
||||||
public override ModType Type => ModType.DifficultyIncrease;
|
public override ModType Type => ModType.DifficultyIncrease;
|
||||||
public override string Description => "Miss and fail.";
|
public override string Description => "Miss and fail.";
|
||||||
public override double ScoreMultiplier => 1;
|
public override double ScoreMultiplier => 1;
|
||||||
|
@ -188,12 +188,12 @@ namespace osu.Game.Rulesets.Objects.Legacy
|
|||||||
string[] split = str.Split(':');
|
string[] split = str.Split(':');
|
||||||
|
|
||||||
var bank = (LegacySampleBank)Parsing.ParseInt(split[0]);
|
var bank = (LegacySampleBank)Parsing.ParseInt(split[0]);
|
||||||
var addbank = (LegacySampleBank)Parsing.ParseInt(split[1]);
|
var addBank = (LegacySampleBank)Parsing.ParseInt(split[1]);
|
||||||
|
|
||||||
string stringBank = bank.ToString().ToLowerInvariant();
|
string stringBank = bank.ToString().ToLowerInvariant();
|
||||||
if (stringBank == @"none")
|
if (stringBank == @"none")
|
||||||
stringBank = null;
|
stringBank = null;
|
||||||
string stringAddBank = addbank.ToString().ToLowerInvariant();
|
string stringAddBank = addBank.ToString().ToLowerInvariant();
|
||||||
if (stringAddBank == @"none")
|
if (stringAddBank == @"none")
|
||||||
stringAddBank = null;
|
stringAddBank = null;
|
||||||
|
|
||||||
|
@ -250,13 +250,13 @@ namespace osu.Game.Rulesets.Objects
|
|||||||
if (subControlPoints.Length != 3)
|
if (subControlPoints.Length != 3)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
List<Vector2> subpath = PathApproximator.ApproximateCircularArc(subControlPoints);
|
List<Vector2> subPath = PathApproximator.ApproximateCircularArc(subControlPoints);
|
||||||
|
|
||||||
// If for some reason a circular arc could not be fit to the 3 given points, fall back to a numerically stable bezier approximation.
|
// If for some reason a circular arc could not be fit to the 3 given points, fall back to a numerically stable bezier approximation.
|
||||||
if (subpath.Count == 0)
|
if (subPath.Count == 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
return subpath;
|
return subPath;
|
||||||
|
|
||||||
case PathType.Catmull:
|
case PathType.Catmull:
|
||||||
return PathApproximator.ApproximateCatmull(subControlPoints);
|
return PathApproximator.ApproximateCatmull(subControlPoints);
|
||||||
|
@ -49,7 +49,7 @@ namespace osu.Game.Screens.Edit.Compose.Components
|
|||||||
{
|
{
|
||||||
TriggerOperationStarted();
|
TriggerOperationStarted();
|
||||||
Action?.Invoke();
|
Action?.Invoke();
|
||||||
TriggerOperatoinEnded();
|
TriggerOperationEnded();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,6 +92,6 @@ namespace osu.Game.Screens.Edit.Compose.Components
|
|||||||
|
|
||||||
protected void TriggerOperationStarted() => OperationStarted?.Invoke();
|
protected void TriggerOperationStarted() => OperationStarted?.Invoke();
|
||||||
|
|
||||||
protected void TriggerOperatoinEnded() => OperationEnded?.Invoke();
|
protected void TriggerOperationEnded() => OperationEnded?.Invoke();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ namespace osu.Game.Screens.Edit.Compose.Components
|
|||||||
|
|
||||||
protected override void OnDragEnd(DragEndEvent e)
|
protected override void OnDragEnd(DragEndEvent e)
|
||||||
{
|
{
|
||||||
TriggerOperatoinEnded();
|
TriggerOperationEnded();
|
||||||
|
|
||||||
UpdateHoverState();
|
UpdateHoverState();
|
||||||
base.OnDragEnd(e);
|
base.OnDragEnd(e);
|
||||||
|
@ -56,7 +56,7 @@ namespace osu.Game.Screens.Edit.Setup
|
|||||||
{
|
{
|
||||||
new Box
|
new Box
|
||||||
{
|
{
|
||||||
Colour = colours.GreySeafoamDarker,
|
Colour = colours.GreySeaFoamDarker,
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
},
|
},
|
||||||
new OsuTextFlowContainer(t => t.Font = OsuFont.Default.With(size: 24))
|
new OsuTextFlowContainer(t => t.Font = OsuFont.Default.With(size: 24))
|
||||||
|
@ -41,7 +41,7 @@ namespace osu.Game.Screens.Edit.Timing
|
|||||||
}
|
}
|
||||||
|
|
||||||
private readonly SettingsSlider<T> slider;
|
private readonly SettingsSlider<T> slider;
|
||||||
private readonly LabelledTextBox textbox;
|
private readonly LabelledTextBox textBox;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates an <see cref="IndeterminateSliderWithTextBoxInput{T}"/>.
|
/// Creates an <see cref="IndeterminateSliderWithTextBoxInput{T}"/>.
|
||||||
@ -66,7 +66,7 @@ namespace osu.Game.Screens.Edit.Timing
|
|||||||
Spacing = new Vector2(0, 5),
|
Spacing = new Vector2(0, 5),
|
||||||
Children = new Drawable[]
|
Children = new Drawable[]
|
||||||
{
|
{
|
||||||
textbox = new LabelledTextBox
|
textBox = new LabelledTextBox
|
||||||
{
|
{
|
||||||
Label = labelText,
|
Label = labelText,
|
||||||
},
|
},
|
||||||
@ -80,7 +80,7 @@ namespace osu.Game.Screens.Edit.Timing
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
textbox.OnCommit += (t, isNew) =>
|
textBox.OnCommit += (t, isNew) =>
|
||||||
{
|
{
|
||||||
if (!isNew) return;
|
if (!isNew) return;
|
||||||
|
|
||||||
@ -110,13 +110,13 @@ namespace osu.Game.Screens.Edit.Timing
|
|||||||
|
|
||||||
// use the value from the slider to ensure that any precision/min/max set on it via the initial indeterminate value have been applied correctly.
|
// use the value from the slider to ensure that any precision/min/max set on it via the initial indeterminate value have been applied correctly.
|
||||||
decimal decimalValue = slider.Current.Value.ToDecimal(NumberFormatInfo.InvariantInfo);
|
decimal decimalValue = slider.Current.Value.ToDecimal(NumberFormatInfo.InvariantInfo);
|
||||||
textbox.Text = decimalValue.ToString($@"N{FormatUtils.FindPrecision(decimalValue)}");
|
textBox.Text = decimalValue.ToString($@"N{FormatUtils.FindPrecision(decimalValue)}");
|
||||||
textbox.PlaceholderText = string.Empty;
|
textBox.PlaceholderText = string.Empty;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
textbox.Text = null;
|
textBox.Text = null;
|
||||||
textbox.PlaceholderText = "(multiple)";
|
textBox.PlaceholderText = "(multiple)";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ namespace osu.Game.Screens.Edit.Timing
|
|||||||
|
|
||||||
public SliderWithTextBoxInput(LocalisableString labelText)
|
public SliderWithTextBoxInput(LocalisableString labelText)
|
||||||
{
|
{
|
||||||
LabelledTextBox textbox;
|
LabelledTextBox textBox;
|
||||||
|
|
||||||
RelativeSizeAxes = Axes.X;
|
RelativeSizeAxes = Axes.X;
|
||||||
AutoSizeAxes = Axes.Y;
|
AutoSizeAxes = Axes.Y;
|
||||||
@ -33,7 +33,7 @@ namespace osu.Game.Screens.Edit.Timing
|
|||||||
Direction = FillDirection.Vertical,
|
Direction = FillDirection.Vertical,
|
||||||
Children = new Drawable[]
|
Children = new Drawable[]
|
||||||
{
|
{
|
||||||
textbox = new LabelledTextBox
|
textBox = new LabelledTextBox
|
||||||
{
|
{
|
||||||
Label = labelText,
|
Label = labelText,
|
||||||
},
|
},
|
||||||
@ -46,7 +46,7 @@ namespace osu.Game.Screens.Edit.Timing
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
textbox.OnCommit += (t, isNew) =>
|
textBox.OnCommit += (t, isNew) =>
|
||||||
{
|
{
|
||||||
if (!isNew) return;
|
if (!isNew) return;
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ namespace osu.Game.Screens.Edit.Timing
|
|||||||
|
|
||||||
Current.BindValueChanged(val =>
|
Current.BindValueChanged(val =>
|
||||||
{
|
{
|
||||||
textbox.Text = val.NewValue.ToString();
|
textBox.Text = val.NewValue.ToString();
|
||||||
}, true);
|
}, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ namespace osu.Game.Screens.Import
|
|||||||
{
|
{
|
||||||
new Box
|
new Box
|
||||||
{
|
{
|
||||||
Colour = colours.GreySeafoamDark,
|
Colour = colours.GreySeaFoamDark,
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
},
|
},
|
||||||
fileSelector = new OsuFileSelector(validFileExtensions: game.HandledExtensions.ToArray())
|
fileSelector = new OsuFileSelector(validFileExtensions: game.HandledExtensions.ToArray())
|
||||||
@ -72,7 +72,7 @@ namespace osu.Game.Screens.Import
|
|||||||
{
|
{
|
||||||
new Box
|
new Box
|
||||||
{
|
{
|
||||||
Colour = colours.GreySeafoamDarker,
|
Colour = colours.GreySeaFoamDarker,
|
||||||
RelativeSizeAxes = Axes.Both
|
RelativeSizeAxes = Axes.Both
|
||||||
},
|
},
|
||||||
new Container
|
new Container
|
||||||
|
@ -53,7 +53,7 @@ namespace osu.Game.Screens.Menu
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// How much should each bar go down each millisecond (based on a full bar).
|
/// How much should each bar go down each millisecond (based on a full bar).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private const float decay_per_milisecond = 0.0024f;
|
private const float decay_per_millisecond = 0.0024f;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Number of milliseconds between each amplitude update.
|
/// Number of milliseconds between each amplitude update.
|
||||||
@ -136,7 +136,7 @@ namespace osu.Game.Screens.Menu
|
|||||||
{
|
{
|
||||||
base.Update();
|
base.Update();
|
||||||
|
|
||||||
float decayFactor = (float)Time.Elapsed * decay_per_milisecond;
|
float decayFactor = (float)Time.Elapsed * decay_per_millisecond;
|
||||||
|
|
||||||
for (int i = 0; i < bars_per_visualiser; i++)
|
for (int i = 0; i < bars_per_visualiser; i++)
|
||||||
{
|
{
|
||||||
|
@ -193,7 +193,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge
|
|||||||
this.room = room;
|
this.room = room;
|
||||||
}
|
}
|
||||||
|
|
||||||
private OsuPasswordTextBox passwordTextbox;
|
private OsuPasswordTextBox passwordTextBox;
|
||||||
private TriangleButton joinButton;
|
private TriangleButton joinButton;
|
||||||
private OsuSpriteText errorText;
|
private OsuSpriteText errorText;
|
||||||
private Sample sampleJoinFail;
|
private Sample sampleJoinFail;
|
||||||
@ -218,7 +218,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge
|
|||||||
AutoSizeAxes = Axes.Both,
|
AutoSizeAxes = Axes.Both,
|
||||||
Children = new Drawable[]
|
Children = new Drawable[]
|
||||||
{
|
{
|
||||||
passwordTextbox = new OsuPasswordTextBox
|
passwordTextBox = new OsuPasswordTextBox
|
||||||
{
|
{
|
||||||
Width = 200,
|
Width = 200,
|
||||||
PlaceholderText = "password",
|
PlaceholderText = "password",
|
||||||
@ -246,21 +246,21 @@ namespace osu.Game.Screens.OnlinePlay.Lounge
|
|||||||
{
|
{
|
||||||
base.LoadComplete();
|
base.LoadComplete();
|
||||||
|
|
||||||
Schedule(() => GetContainingInputManager().ChangeFocus(passwordTextbox));
|
Schedule(() => GetContainingInputManager().ChangeFocus(passwordTextBox));
|
||||||
passwordTextbox.OnCommit += (_, __) => performJoin();
|
passwordTextBox.OnCommit += (_, __) => performJoin();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void performJoin()
|
private void performJoin()
|
||||||
{
|
{
|
||||||
lounge?.Join(room, passwordTextbox.Text, null, joinFailed);
|
lounge?.Join(room, passwordTextBox.Text, null, joinFailed);
|
||||||
GetContainingInputManager().TriggerFocusContention(passwordTextbox);
|
GetContainingInputManager().TriggerFocusContention(passwordTextBox);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void joinFailed(string error) => Schedule(() =>
|
private void joinFailed(string error) => Schedule(() =>
|
||||||
{
|
{
|
||||||
passwordTextbox.Text = string.Empty;
|
passwordTextBox.Text = string.Empty;
|
||||||
|
|
||||||
GetContainingInputManager().ChangeFocus(passwordTextbox);
|
GetContainingInputManager().ChangeFocus(passwordTextBox);
|
||||||
|
|
||||||
errorText.Text = error;
|
errorText.Text = error;
|
||||||
errorText
|
errorText
|
||||||
|
@ -24,7 +24,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer
|
|||||||
|
|
||||||
public Bindable<bool> Expanded = new Bindable<bool>();
|
public Bindable<bool> Expanded = new Bindable<bool>();
|
||||||
|
|
||||||
private readonly Bindable<bool> expandedFromTextboxFocus = new Bindable<bool>();
|
private readonly Bindable<bool> expandedFromTextBoxFocus = new Bindable<bool>();
|
||||||
|
|
||||||
private const float height = 100;
|
private const float height = 100;
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer
|
|||||||
|
|
||||||
Background.Alpha = 0.2f;
|
Background.Alpha = 0.2f;
|
||||||
|
|
||||||
Textbox.FocusLost = () => expandedFromTextboxFocus.Value = false;
|
TextBox.FocusLost = () => expandedFromTextBoxFocus.Value = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override bool OnHover(HoverEvent e) => true; // use UI mouse cursor.
|
protected override bool OnHover(HoverEvent e) => true; // use UI mouse cursor.
|
||||||
@ -51,14 +51,14 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer
|
|||||||
{
|
{
|
||||||
// for now let's never hold focus. this avoid misdirected gameplay keys entering chat.
|
// for now let's never hold focus. this avoid misdirected gameplay keys entering chat.
|
||||||
// note that this is done within this callback as it triggers an un-focus as well.
|
// note that this is done within this callback as it triggers an un-focus as well.
|
||||||
Textbox.HoldFocus = false;
|
TextBox.HoldFocus = false;
|
||||||
|
|
||||||
// only hold focus (after sending a message) during breaks
|
// only hold focus (after sending a message) during breaks
|
||||||
Textbox.ReleaseFocusOnCommit = playing.NewValue;
|
TextBox.ReleaseFocusOnCommit = playing.NewValue;
|
||||||
}, true);
|
}, true);
|
||||||
|
|
||||||
Expanded.BindValueChanged(_ => updateExpandedState(), true);
|
Expanded.BindValueChanged(_ => updateExpandedState(), true);
|
||||||
expandedFromTextboxFocus.BindValueChanged(focus =>
|
expandedFromTextBoxFocus.BindValueChanged(focus =>
|
||||||
{
|
{
|
||||||
if (focus.NewValue)
|
if (focus.NewValue)
|
||||||
updateExpandedState();
|
updateExpandedState();
|
||||||
@ -76,25 +76,25 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer
|
|||||||
switch (e.Action)
|
switch (e.Action)
|
||||||
{
|
{
|
||||||
case GlobalAction.Back:
|
case GlobalAction.Back:
|
||||||
if (Textbox.HasFocus)
|
if (TextBox.HasFocus)
|
||||||
{
|
{
|
||||||
Schedule(() => Textbox.KillFocus());
|
Schedule(() => TextBox.KillFocus());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GlobalAction.ToggleChatFocus:
|
case GlobalAction.ToggleChatFocus:
|
||||||
if (Textbox.HasFocus)
|
if (TextBox.HasFocus)
|
||||||
{
|
{
|
||||||
Schedule(() => Textbox.KillFocus());
|
Schedule(() => TextBox.KillFocus());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
expandedFromTextboxFocus.Value = true;
|
expandedFromTextBoxFocus.Value = true;
|
||||||
|
|
||||||
// schedule required to ensure the textbox has become present from above bindable update.
|
// schedule required to ensure the textbox has become present from above bindable update.
|
||||||
Schedule(() => Textbox.TakeFocus());
|
Schedule(() => TextBox.TakeFocus());
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -109,7 +109,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer
|
|||||||
|
|
||||||
private void updateExpandedState()
|
private void updateExpandedState()
|
||||||
{
|
{
|
||||||
if (Expanded.Value || expandedFromTextboxFocus.Value)
|
if (Expanded.Value || expandedFromTextBoxFocus.Value)
|
||||||
{
|
{
|
||||||
this.FadeIn(300, Easing.OutQuint);
|
this.FadeIn(300, Easing.OutQuint);
|
||||||
this.ResizeHeightTo(height, 500, Easing.OutQuint);
|
this.ResizeHeightTo(height, 500, Easing.OutQuint);
|
||||||
|
@ -17,7 +17,7 @@ namespace osu.Game.Screens.Play.HUD
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract class HealthDisplay : CompositeDrawable
|
public abstract class HealthDisplay : CompositeDrawable
|
||||||
{
|
{
|
||||||
private readonly Bindable<bool> showHealthbar = new Bindable<bool>(true);
|
private readonly Bindable<bool> showHealthBar = new Bindable<bool>(true);
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
protected HealthProcessor HealthProcessor { get; private set; }
|
protected HealthProcessor HealthProcessor { get; private set; }
|
||||||
@ -43,10 +43,10 @@ namespace osu.Game.Screens.Play.HUD
|
|||||||
HealthProcessor.NewJudgement += onNewJudgement;
|
HealthProcessor.NewJudgement += onNewJudgement;
|
||||||
|
|
||||||
if (hudOverlay != null)
|
if (hudOverlay != null)
|
||||||
showHealthbar.BindTo(hudOverlay.ShowHealthbar);
|
showHealthBar.BindTo(hudOverlay.ShowHealthBar);
|
||||||
|
|
||||||
// this probably shouldn't be operating on `this.`
|
// this probably shouldn't be operating on `this.`
|
||||||
showHealthbar.BindValueChanged(healthBar => this.FadeTo(healthBar.NewValue ? 1 : 0, HUDOverlay.FADE_DURATION, HUDOverlay.FADE_EASING), true);
|
showHealthBar.BindValueChanged(healthBar => this.FadeTo(healthBar.NewValue ? 1 : 0, HUDOverlay.FADE_DURATION, HUDOverlay.FADE_EASING), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onNewJudgement(JudgementResult judgement)
|
private void onNewJudgement(JudgementResult judgement)
|
||||||
|
@ -68,6 +68,12 @@ namespace osu.Game.Screens.Play.HUD
|
|||||||
Scale = new Vector2(1.2f);
|
Scale = new Vector2(1.2f);
|
||||||
|
|
||||||
InternalChildren = new[]
|
InternalChildren = new[]
|
||||||
|
{
|
||||||
|
counterContainer = new Container
|
||||||
|
{
|
||||||
|
AutoSizeAxes = Axes.Both,
|
||||||
|
AlwaysPresent = true,
|
||||||
|
Children = new[]
|
||||||
{
|
{
|
||||||
popOutCount = new LegacySpriteText(LegacyFont.Combo)
|
popOutCount = new LegacySpriteText(LegacyFont.Combo)
|
||||||
{
|
{
|
||||||
@ -78,12 +84,6 @@ namespace osu.Game.Screens.Play.HUD
|
|||||||
Origin = Anchor.BottomLeft,
|
Origin = Anchor.BottomLeft,
|
||||||
BypassAutoSizeAxes = Axes.Both,
|
BypassAutoSizeAxes = Axes.Both,
|
||||||
},
|
},
|
||||||
counterContainer = new Container
|
|
||||||
{
|
|
||||||
AutoSizeAxes = Axes.Both,
|
|
||||||
AlwaysPresent = true,
|
|
||||||
Children = new[]
|
|
||||||
{
|
|
||||||
displayedCountSpriteText = new LegacySpriteText(LegacyFont.Combo)
|
displayedCountSpriteText = new LegacySpriteText(LegacyFont.Combo)
|
||||||
{
|
{
|
||||||
// Initial text and AlwaysPresent allow the counter to have a size before it first displays a combo.
|
// Initial text and AlwaysPresent allow the counter to have a size before it first displays a combo.
|
||||||
|
@ -46,7 +46,7 @@ namespace osu.Game.Screens.Play
|
|||||||
public readonly HoldForMenuButton HoldToQuit;
|
public readonly HoldForMenuButton HoldToQuit;
|
||||||
public readonly PlayerSettingsOverlay PlayerSettingsOverlay;
|
public readonly PlayerSettingsOverlay PlayerSettingsOverlay;
|
||||||
|
|
||||||
public Bindable<bool> ShowHealthbar = new Bindable<bool>(true);
|
public Bindable<bool> ShowHealthBar = new Bindable<bool>(true);
|
||||||
|
|
||||||
private readonly DrawableRuleset drawableRuleset;
|
private readonly DrawableRuleset drawableRuleset;
|
||||||
private readonly IReadOnlyList<Mod> mods;
|
private readonly IReadOnlyList<Mod> mods;
|
||||||
@ -258,7 +258,7 @@ namespace osu.Game.Screens.Play
|
|||||||
|
|
||||||
protected FailingLayer CreateFailingLayer() => new FailingLayer
|
protected FailingLayer CreateFailingLayer() => new FailingLayer
|
||||||
{
|
{
|
||||||
ShowHealth = { BindTarget = ShowHealthbar }
|
ShowHealth = { BindTarget = ShowHealthBar }
|
||||||
};
|
};
|
||||||
|
|
||||||
protected KeyCounterDisplay CreateKeyCounter() => new KeyCounterDisplay
|
protected KeyCounterDisplay CreateKeyCounter() => new KeyCounterDisplay
|
||||||
|
@ -496,7 +496,7 @@ namespace osu.Game.Screens.Play
|
|||||||
private void load(OsuColour colours, AudioManager audioManager, NotificationOverlay notificationOverlay, VolumeOverlay volumeOverlay)
|
private void load(OsuColour colours, AudioManager audioManager, NotificationOverlay notificationOverlay, VolumeOverlay volumeOverlay)
|
||||||
{
|
{
|
||||||
Icon = FontAwesome.Solid.VolumeMute;
|
Icon = FontAwesome.Solid.VolumeMute;
|
||||||
IconBackgound.Colour = colours.RedDark;
|
IconBackground.Colour = colours.RedDark;
|
||||||
|
|
||||||
Activated = delegate
|
Activated = delegate
|
||||||
{
|
{
|
||||||
@ -548,7 +548,7 @@ namespace osu.Game.Screens.Play
|
|||||||
private void load(OsuColour colours, NotificationOverlay notificationOverlay)
|
private void load(OsuColour colours, NotificationOverlay notificationOverlay)
|
||||||
{
|
{
|
||||||
Icon = FontAwesome.Solid.BatteryQuarter;
|
Icon = FontAwesome.Solid.BatteryQuarter;
|
||||||
IconBackgound.Colour = colours.RedDark;
|
IconBackground.Colour = colours.RedDark;
|
||||||
|
|
||||||
Activated = delegate
|
Activated = delegate
|
||||||
{
|
{
|
||||||
|
@ -15,12 +15,12 @@ namespace osu.Game.Screens.Play.PlayerSettings
|
|||||||
{
|
{
|
||||||
public OsuSliderBar<T> Bar => (OsuSliderBar<T>)Control;
|
public OsuSliderBar<T> Bar => (OsuSliderBar<T>)Control;
|
||||||
|
|
||||||
protected override Drawable CreateControl() => new Sliderbar
|
protected override Drawable CreateControl() => new SliderBar
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.X
|
RelativeSizeAxes = Axes.X
|
||||||
};
|
};
|
||||||
|
|
||||||
private class Sliderbar : OsuSliderBar<T>
|
private class SliderBar : OsuSliderBar<T>
|
||||||
{
|
{
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(OsuColour colours)
|
private void load(OsuColour colours)
|
||||||
|
@ -6,6 +6,7 @@ using osu.Framework.Allocation;
|
|||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
using osu.Game.Audio;
|
using osu.Game.Audio;
|
||||||
using osu.Game.Configuration;
|
using osu.Game.Configuration;
|
||||||
|
using osu.Game.Storyboards;
|
||||||
|
|
||||||
namespace osu.Game.Skinning
|
namespace osu.Game.Skinning
|
||||||
{
|
{
|
||||||
@ -56,12 +57,12 @@ namespace osu.Game.Skinning
|
|||||||
return beatmapSkins.Value;
|
return beatmapSkins.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override bool AllowSampleLookup(ISampleInfo componentName)
|
protected override bool AllowSampleLookup(ISampleInfo sampleInfo)
|
||||||
{
|
{
|
||||||
if (beatmapSkins == null)
|
if (beatmapSkins == null)
|
||||||
throw new InvalidOperationException($"{nameof(BeatmapSkinProvidingContainer)} needs to be loaded before being consumed.");
|
throw new InvalidOperationException($"{nameof(BeatmapSkinProvidingContainer)} needs to be loaded before being consumed.");
|
||||||
|
|
||||||
return beatmapHitsounds.Value;
|
return sampleInfo is StoryboardSampleInfo || beatmapHitsounds.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BeatmapSkinProvidingContainer(ISkin skin)
|
public BeatmapSkinProvidingContainer(ISkin skin)
|
||||||
|
@ -35,7 +35,7 @@ namespace osu.Game.Skinning
|
|||||||
|
|
||||||
protected virtual bool AllowTextureLookup(string componentName) => true;
|
protected virtual bool AllowTextureLookup(string componentName) => true;
|
||||||
|
|
||||||
protected virtual bool AllowSampleLookup(ISampleInfo componentName) => true;
|
protected virtual bool AllowSampleLookup(ISampleInfo sampleInfo) => true;
|
||||||
|
|
||||||
protected virtual bool AllowConfigurationLookup => true;
|
protected virtual bool AllowConfigurationLookup => true;
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ namespace osu.Game.Updater
|
|||||||
private void load(OsuColour colours, ChangelogOverlay changelog, NotificationOverlay notificationOverlay)
|
private void load(OsuColour colours, ChangelogOverlay changelog, NotificationOverlay notificationOverlay)
|
||||||
{
|
{
|
||||||
Icon = FontAwesome.Solid.CheckSquare;
|
Icon = FontAwesome.Solid.CheckSquare;
|
||||||
IconBackgound.Colour = colours.BlueDark;
|
IconBackground.Colour = colours.BlueDark;
|
||||||
|
|
||||||
Activated = delegate
|
Activated = delegate
|
||||||
{
|
{
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Realm" Version="10.7.1" />
|
<PackageReference Include="Realm" Version="10.7.1" />
|
||||||
<PackageReference Include="ppy.osu.Framework" Version="2021.1225.0" />
|
<PackageReference Include="ppy.osu.Framework" Version="2021.1227.0" />
|
||||||
<PackageReference Include="ppy.osu.Game.Resources" Version="2021.1215.0" />
|
<PackageReference Include="ppy.osu.Game.Resources" Version="2021.1215.0" />
|
||||||
<PackageReference Include="Sentry" Version="3.12.1" />
|
<PackageReference Include="Sentry" Version="3.12.1" />
|
||||||
<PackageReference Include="SharpCompress" Version="0.30.1" />
|
<PackageReference Include="SharpCompress" Version="0.30.1" />
|
||||||
|
@ -60,7 +60,7 @@
|
|||||||
<Reference Include="System.Net.Http" />
|
<Reference Include="System.Net.Http" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Label="Package References">
|
<ItemGroup Label="Package References">
|
||||||
<PackageReference Include="ppy.osu.Framework.iOS" Version="2021.1225.0" />
|
<PackageReference Include="ppy.osu.Framework.iOS" Version="2021.1227.0" />
|
||||||
<PackageReference Include="ppy.osu.Game.Resources" Version="2021.1215.0" />
|
<PackageReference Include="ppy.osu.Game.Resources" Version="2021.1215.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- See https://github.com/dotnet/runtime/issues/35988 (can be removed after Xamarin uses net5.0 / net6.0) -->
|
<!-- See https://github.com/dotnet/runtime/issues/35988 (can be removed after Xamarin uses net5.0 / net6.0) -->
|
||||||
@ -83,10 +83,9 @@
|
|||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.2.6" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.2.6" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="2.2.6" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="2.2.6" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
||||||
<PackageReference Include="ppy.osu.Framework" Version="2021.1225.0" />
|
<PackageReference Include="ppy.osu.Framework" Version="2021.1227.0" />
|
||||||
<PackageReference Include="SharpCompress" Version="0.30.0" />
|
<PackageReference Include="SharpCompress" Version="0.30.0" />
|
||||||
<PackageReference Include="NUnit" Version="3.13.2" />
|
<PackageReference Include="NUnit" Version="3.13.2" />
|
||||||
<PackageReference Include="SharpRaven" Version="2.4.0" />
|
|
||||||
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
|
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
|
||||||
<PackageReference Include="ppy.osu.Framework.NativeLibs" Version="2021.805.0" ExcludeAssets="all" />
|
<PackageReference Include="ppy.osu.Framework.NativeLibs" Version="2021.805.0" ExcludeAssets="all" />
|
||||||
<PackageReference Include="Realm" Version="10.7.1" />
|
<PackageReference Include="Realm" Version="10.7.1" />
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=AssignedValueIsNeverUsed/@EntryIndexedValue">HINT</s:String>
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=AssignedValueIsNeverUsed/@EntryIndexedValue">HINT</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=AssignmentIsFullyDiscarded/@EntryIndexedValue">DO_NOT_SHOW</s:String>
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=AssignmentIsFullyDiscarded/@EntryIndexedValue">DO_NOT_SHOW</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=AssignNullToNotNullAttribute/@EntryIndexedValue">WARNING</s:String>
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=AssignNullToNotNullAttribute/@EntryIndexedValue">WARNING</s:String>
|
||||||
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=AsyncVoidMethod/@EntryIndexedValue">WARNING</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=AutoPropertyCanBeMadeGetOnly_002EGlobal/@EntryIndexedValue">HINT</s:String>
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=AutoPropertyCanBeMadeGetOnly_002EGlobal/@EntryIndexedValue">HINT</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=AutoPropertyCanBeMadeGetOnly_002ELocal/@EntryIndexedValue">HINT</s:String>
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=AutoPropertyCanBeMadeGetOnly_002ELocal/@EntryIndexedValue">HINT</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=BadAttributeBracketsSpaces/@EntryIndexedValue">WARNING</s:String>
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=BadAttributeBracketsSpaces/@EntryIndexedValue">WARNING</s:String>
|
||||||
@ -231,6 +232,7 @@
|
|||||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UnusedType_002EGlobal/@EntryIndexedValue">HINT</s:String>
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UnusedType_002EGlobal/@EntryIndexedValue">HINT</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UseAwaitUsing/@EntryIndexedValue">DO_NOT_SHOW</s:String>
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UseAwaitUsing/@EntryIndexedValue">DO_NOT_SHOW</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UseCollectionCountProperty/@EntryIndexedValue">WARNING</s:String>
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UseCollectionCountProperty/@EntryIndexedValue">WARNING</s:String>
|
||||||
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UseConfigureAwaitFalseForAsyncDisposable/@EntryIndexedValue">WARNING</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UseFormatSpecifierInFormatString/@EntryIndexedValue">WARNING</s:String>
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UseFormatSpecifierInFormatString/@EntryIndexedValue">WARNING</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UseFormatSpecifierInInterpolation/@EntryIndexedValue">WARNING</s:String>
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UseFormatSpecifierInInterpolation/@EntryIndexedValue">WARNING</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UseIndexFromEndExpression/@EntryIndexedValue">WARNING</s:String>
|
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UseIndexFromEndExpression/@EntryIndexedValue">WARNING</s:String>
|
||||||
@ -920,26 +922,65 @@ private void load()
|
|||||||
{
|
{
|
||||||
$END$
|
$END$
|
||||||
};</s:String>
|
};</s:String>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=antiflow/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Beatmap/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Beatmap/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=beatmaps/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=beatmaps/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Beatmapset/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=beatmap_0027s/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=beatmap_0027s/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=bindable/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=bindable/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=bindables/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=bindables/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Catmull/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Catmull/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Daycore/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Dimmable/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Disableable/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Drawables/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Drawables/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Failable/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Gamefield/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=gameplay/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=gameplay/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Geki/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Hitnormal/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=hitobject/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=hitobject/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=hitobjects/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=hitobjects/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Hitsound/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Hitsounded/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Hitsounds/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Judgeable/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Katu/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=keymods/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=keymods/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Kiai/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Kiai/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Kudosu/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Leaderboard/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Leaderboard/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Leaderboards/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Leaderboards/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Migratable/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Nightcore/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Overlined/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Pausable/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Pippidon/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Playfield/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Playfield/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=playfields/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=playfields/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Poolable/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Preclicked/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=purgeable/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Rearrangeable/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=refetch/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=refetched/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Refilter/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Reinstantiation/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=resampler/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=resampler/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=ruleset/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=ruleset/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=rulesets/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=rulesets/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=ruleset_0027s/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=ruleset_0027s/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Scorable/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=seeya/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Snappable/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Soleily/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Spinnable/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Strongable/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Strongable/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Taiko/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Taiko/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=undim/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=undownloadable/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Unhover/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Unhovered/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Unplayed/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Unproxy/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Unranked/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Unranked/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
|
||||||
|
Loading…
Reference in New Issue
Block a user