mirror of
https://github.com/osukey/osukey.git
synced 2025-08-07 00:23:59 +09:00
Merge remote-tracking branch 'upstream/master' into naoey-show-beatmap-id
This commit is contained in:
46
app.manifest
Normal file
46
app.manifest
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
|
||||||
|
<assemblyIdentity version="1.0.0.0" name="osu!" />
|
||||||
|
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
|
||||||
|
<security>
|
||||||
|
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||||
|
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
|
||||||
|
</requestedPrivileges>
|
||||||
|
<applicationRequestMinimum>
|
||||||
|
<defaultAssemblyRequest permissionSetReference="Custom" />
|
||||||
|
<PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" />
|
||||||
|
</applicationRequestMinimum>
|
||||||
|
</security>
|
||||||
|
</trustInfo>
|
||||||
|
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||||
|
<application>
|
||||||
|
<!-- Windows Vista -->
|
||||||
|
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />
|
||||||
|
<!-- Windows 7 -->
|
||||||
|
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />
|
||||||
|
<!-- Windows 8 -->
|
||||||
|
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />
|
||||||
|
<!-- Windows 8.1 -->
|
||||||
|
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />
|
||||||
|
<!-- Windows 10 -->
|
||||||
|
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
|
||||||
|
</application>
|
||||||
|
</compatibility>
|
||||||
|
<asmv3:application>
|
||||||
|
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
|
||||||
|
<dpiAware>true</dpiAware>
|
||||||
|
</asmv3:windowsSettings>
|
||||||
|
</asmv3:application>
|
||||||
|
<dependency>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity
|
||||||
|
type="win32"
|
||||||
|
name="Microsoft.Windows.Common-Controls"
|
||||||
|
version="6.0.0.0"
|
||||||
|
processorArchitecture="*"
|
||||||
|
publicKeyToken="6595b64144ccf1df"
|
||||||
|
language="*"
|
||||||
|
/>
|
||||||
|
</dependentAssembly>
|
||||||
|
</dependency>
|
||||||
|
</asmv1:assembly>
|
Submodule osu-framework updated: f858902d16...16e6a453db
@ -12,6 +12,7 @@ using osu.Framework.Graphics;
|
|||||||
using osu.Framework.Input.Bindings;
|
using osu.Framework.Input.Bindings;
|
||||||
using osu.Game.Rulesets.Catch.Replays;
|
using osu.Game.Rulesets.Catch.Replays;
|
||||||
using osu.Game.Rulesets.Replays.Types;
|
using osu.Game.Rulesets.Replays.Types;
|
||||||
|
using osu.Game.Beatmaps.Legacy;
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Catch
|
namespace osu.Game.Rulesets.Catch
|
||||||
{
|
{
|
||||||
@ -29,6 +30,44 @@ namespace osu.Game.Rulesets.Catch
|
|||||||
new KeyBinding(InputKey.Shift, CatchAction.Dash),
|
new KeyBinding(InputKey.Shift, CatchAction.Dash),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public override IEnumerable<Mod> ConvertLegacyMods(LegacyMods mods)
|
||||||
|
{
|
||||||
|
if (mods.HasFlag(LegacyMods.Nightcore))
|
||||||
|
yield return new CatchModNightcore();
|
||||||
|
else if (mods.HasFlag(LegacyMods.DoubleTime))
|
||||||
|
yield return new CatchModDoubleTime();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Autoplay))
|
||||||
|
yield return new CatchModAutoplay();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Easy))
|
||||||
|
yield return new CatchModEasy();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Flashlight))
|
||||||
|
yield return new CatchModFlashlight();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.HalfTime))
|
||||||
|
yield return new CatchModHalfTime();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.HardRock))
|
||||||
|
yield return new CatchModHardRock();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Hidden))
|
||||||
|
yield return new CatchModHidden();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.NoFail))
|
||||||
|
yield return new CatchModNoFail();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Perfect))
|
||||||
|
yield return new CatchModPerfect();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Relax))
|
||||||
|
yield return new CatchModRelax();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.SuddenDeath))
|
||||||
|
yield return new CatchModSuddenDeath();
|
||||||
|
}
|
||||||
|
|
||||||
public override IEnumerable<Mod> GetModsFor(ModType type)
|
public override IEnumerable<Mod> GetModsFor(ModType type)
|
||||||
{
|
{
|
||||||
switch (type)
|
switch (type)
|
||||||
|
@ -14,6 +14,7 @@ using osu.Framework.Input.Bindings;
|
|||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Rulesets.Mania.Replays;
|
using osu.Game.Rulesets.Mania.Replays;
|
||||||
using osu.Game.Rulesets.Replays.Types;
|
using osu.Game.Rulesets.Replays.Types;
|
||||||
|
using osu.Game.Beatmaps.Legacy;
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Mania
|
namespace osu.Game.Rulesets.Mania
|
||||||
{
|
{
|
||||||
@ -21,6 +22,74 @@ namespace osu.Game.Rulesets.Mania
|
|||||||
{
|
{
|
||||||
public override RulesetContainer CreateRulesetContainerWith(WorkingBeatmap beatmap, bool isForCurrentRuleset) => new ManiaRulesetContainer(this, beatmap, isForCurrentRuleset);
|
public override RulesetContainer CreateRulesetContainerWith(WorkingBeatmap beatmap, bool isForCurrentRuleset) => new ManiaRulesetContainer(this, beatmap, isForCurrentRuleset);
|
||||||
|
|
||||||
|
public override IEnumerable<Mod> ConvertLegacyMods(LegacyMods mods)
|
||||||
|
{
|
||||||
|
if (mods.HasFlag(LegacyMods.Nightcore))
|
||||||
|
yield return new ManiaModNightcore();
|
||||||
|
else if (mods.HasFlag(LegacyMods.DoubleTime))
|
||||||
|
yield return new ManiaModDoubleTime();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Autoplay))
|
||||||
|
yield return new ManiaModAutoplay();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Easy))
|
||||||
|
yield return new ManiaModEasy();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.FadeIn))
|
||||||
|
yield return new ManiaModFadeIn();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Flashlight))
|
||||||
|
yield return new ManiaModFlashlight();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.HalfTime))
|
||||||
|
yield return new ManiaModHalfTime();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.HardRock))
|
||||||
|
yield return new ManiaModHardRock();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Hidden))
|
||||||
|
yield return new ManiaModHidden();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Key1))
|
||||||
|
yield return new ManiaModKey1();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Key2))
|
||||||
|
yield return new ManiaModKey2();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Key3))
|
||||||
|
yield return new ManiaModKey3();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Key4))
|
||||||
|
yield return new ManiaModKey4();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Key5))
|
||||||
|
yield return new ManiaModKey5();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Key6))
|
||||||
|
yield return new ManiaModKey6();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Key7))
|
||||||
|
yield return new ManiaModKey7();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Key8))
|
||||||
|
yield return new ManiaModKey8();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Key9))
|
||||||
|
yield return new ManiaModKey9();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.NoFail))
|
||||||
|
yield return new ManiaModNoFail();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Perfect))
|
||||||
|
yield return new ManiaModPerfect();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Random))
|
||||||
|
yield return new ManiaModRandom();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.SuddenDeath))
|
||||||
|
yield return new ManiaModSuddenDeath();
|
||||||
|
}
|
||||||
|
|
||||||
public override IEnumerable<Mod> GetModsFor(ModType type)
|
public override IEnumerable<Mod> GetModsFor(ModType type)
|
||||||
{
|
{
|
||||||
switch (type)
|
switch (type)
|
||||||
|
@ -21,6 +21,7 @@ using osu.Game.Rulesets.Objects.Types;
|
|||||||
using osu.Game.Rulesets.Objects;
|
using osu.Game.Rulesets.Objects;
|
||||||
using osu.Game.Rulesets.Osu.Replays;
|
using osu.Game.Rulesets.Osu.Replays;
|
||||||
using osu.Game.Rulesets.Replays.Types;
|
using osu.Game.Rulesets.Replays.Types;
|
||||||
|
using osu.Game.Beatmaps.Legacy;
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Osu
|
namespace osu.Game.Rulesets.Osu
|
||||||
{
|
{
|
||||||
@ -66,6 +67,53 @@ namespace osu.Game.Rulesets.Osu
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override IEnumerable<Mod> ConvertLegacyMods(LegacyMods mods)
|
||||||
|
{
|
||||||
|
if (mods.HasFlag(LegacyMods.Nightcore))
|
||||||
|
yield return new OsuModNightcore();
|
||||||
|
else if (mods.HasFlag(LegacyMods.DoubleTime))
|
||||||
|
yield return new OsuModDoubleTime();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Autopilot))
|
||||||
|
yield return new OsuModAutopilot();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Autoplay))
|
||||||
|
yield return new OsuModAutoplay();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Easy))
|
||||||
|
yield return new OsuModEasy();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Flashlight))
|
||||||
|
yield return new OsuModFlashlight();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.HalfTime))
|
||||||
|
yield return new OsuModHalfTime();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.HardRock))
|
||||||
|
yield return new OsuModHardRock();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Hidden))
|
||||||
|
yield return new OsuModHidden();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.NoFail))
|
||||||
|
yield return new OsuModNoFail();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Perfect))
|
||||||
|
yield return new OsuModPerfect();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Relax))
|
||||||
|
yield return new OsuModRelax();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.SpunOut))
|
||||||
|
yield return new OsuModSpunOut();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.SuddenDeath))
|
||||||
|
yield return new OsuModSuddenDeath();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Target))
|
||||||
|
yield return new OsuModTarget();
|
||||||
|
}
|
||||||
|
|
||||||
public override IEnumerable<Mod> GetModsFor(ModType type)
|
public override IEnumerable<Mod> GetModsFor(ModType type)
|
||||||
{
|
{
|
||||||
switch (type)
|
switch (type)
|
||||||
|
@ -12,6 +12,7 @@ using osu.Framework.Graphics;
|
|||||||
using osu.Framework.Input.Bindings;
|
using osu.Framework.Input.Bindings;
|
||||||
using osu.Game.Rulesets.Replays.Types;
|
using osu.Game.Rulesets.Replays.Types;
|
||||||
using osu.Game.Rulesets.Taiko.Replays;
|
using osu.Game.Rulesets.Taiko.Replays;
|
||||||
|
using osu.Game.Beatmaps.Legacy;
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Taiko
|
namespace osu.Game.Rulesets.Taiko
|
||||||
{
|
{
|
||||||
@ -31,6 +32,44 @@ namespace osu.Game.Rulesets.Taiko
|
|||||||
new KeyBinding(InputKey.MouseRight, TaikoAction.RightRim),
|
new KeyBinding(InputKey.MouseRight, TaikoAction.RightRim),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public override IEnumerable<Mod> ConvertLegacyMods(LegacyMods mods)
|
||||||
|
{
|
||||||
|
if (mods.HasFlag(LegacyMods.Nightcore))
|
||||||
|
yield return new TaikoModNightcore();
|
||||||
|
else if (mods.HasFlag(LegacyMods.DoubleTime))
|
||||||
|
yield return new TaikoModDoubleTime();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Autoplay))
|
||||||
|
yield return new TaikoModAutoplay();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Easy))
|
||||||
|
yield return new TaikoModEasy();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Flashlight))
|
||||||
|
yield return new TaikoModFlashlight();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.HalfTime))
|
||||||
|
yield return new TaikoModHalfTime();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.HardRock))
|
||||||
|
yield return new TaikoModHardRock();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Hidden))
|
||||||
|
yield return new TaikoModHidden();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.NoFail))
|
||||||
|
yield return new TaikoModNoFail();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Perfect))
|
||||||
|
yield return new TaikoModPerfect();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.Relax))
|
||||||
|
yield return new TaikoModRelax();
|
||||||
|
|
||||||
|
if (mods.HasFlag(LegacyMods.SuddenDeath))
|
||||||
|
yield return new TaikoModSuddenDeath();
|
||||||
|
}
|
||||||
|
|
||||||
public override IEnumerable<Mod> GetModsFor(ModType type)
|
public override IEnumerable<Mod> GetModsFor(ModType type)
|
||||||
{
|
{
|
||||||
switch (type)
|
switch (type)
|
||||||
|
@ -3,6 +3,9 @@
|
|||||||
<PropertyGroup Label="C#">
|
<PropertyGroup Label="C#">
|
||||||
<LangVersion>7</LangVersion>
|
<LangVersion>7</LangVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<ApplicationManifest>..\app.manifest</ApplicationManifest>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemGroup Label="License">
|
<ItemGroup Label="License">
|
||||||
<None Include="..\osu.licenseheader">
|
<None Include="..\osu.licenseheader">
|
||||||
<Link>osu.licenseheader</Link>
|
<Link>osu.licenseheader</Link>
|
||||||
|
42
osu.Game/Beatmaps/Legacy/LegacyMods.cs
Normal file
42
osu.Game/Beatmaps/Legacy/LegacyMods.cs
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace osu.Game.Beatmaps.Legacy
|
||||||
|
{
|
||||||
|
[Flags]
|
||||||
|
public enum LegacyMods
|
||||||
|
{
|
||||||
|
None = 0,
|
||||||
|
NoFail = 1 << 0,
|
||||||
|
Easy = 1 << 1,
|
||||||
|
TouchDevice = 1 << 2,
|
||||||
|
Hidden = 1 << 3,
|
||||||
|
HardRock = 1 << 4,
|
||||||
|
SuddenDeath = 1 << 5,
|
||||||
|
DoubleTime = 1 << 6,
|
||||||
|
Relax = 1 << 7,
|
||||||
|
HalfTime = 1 << 8,
|
||||||
|
Nightcore = 1 << 9,
|
||||||
|
Flashlight = 1 << 10,
|
||||||
|
Autoplay = 1 << 11,
|
||||||
|
SpunOut = 1 << 12,
|
||||||
|
Autopilot = 1 << 13,
|
||||||
|
Perfect = 1 << 14,
|
||||||
|
Key4 = 1 << 15,
|
||||||
|
Key5 = 1 << 16,
|
||||||
|
Key6 = 1 << 17,
|
||||||
|
Key7 = 1 << 18,
|
||||||
|
Key8 = 1 << 19,
|
||||||
|
FadeIn = 1 << 20,
|
||||||
|
Random = 1 << 21,
|
||||||
|
Cinema = 1 << 22,
|
||||||
|
Target = 1 << 23,
|
||||||
|
Key9 = 1 << 24,
|
||||||
|
KeyCoop = 1 << 25,
|
||||||
|
Key1 = 1 << 26,
|
||||||
|
Key3 = 1 << 27,
|
||||||
|
Key2 = 1 << 28,
|
||||||
|
}
|
||||||
|
}
|
@ -1,23 +0,0 @@
|
|||||||
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
|
||||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
|
||||||
|
|
||||||
using System.ComponentModel;
|
|
||||||
|
|
||||||
namespace osu.Game.Beatmaps
|
|
||||||
{
|
|
||||||
public enum RankStatus
|
|
||||||
{
|
|
||||||
Any = 7,
|
|
||||||
[Description("Ranked & Approved")]
|
|
||||||
RankedApproved = 0,
|
|
||||||
Approved = 1,
|
|
||||||
Loved = 8,
|
|
||||||
Favourites = 2,
|
|
||||||
[Description("Mod Requests")]
|
|
||||||
ModRequests = 3,
|
|
||||||
Pending = 4,
|
|
||||||
Graveyard = 5,
|
|
||||||
[Description("My Maps")]
|
|
||||||
MyMaps = 6,
|
|
||||||
}
|
|
||||||
}
|
|
@ -2,7 +2,7 @@
|
|||||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using osu.Game.Beatmaps;
|
using System.ComponentModel;
|
||||||
using osu.Game.Overlays;
|
using osu.Game.Overlays;
|
||||||
using osu.Game.Overlays.Direct;
|
using osu.Game.Overlays.Direct;
|
||||||
using osu.Game.Rulesets;
|
using osu.Game.Rulesets;
|
||||||
@ -13,21 +13,36 @@ namespace osu.Game.Online.API.Requests
|
|||||||
{
|
{
|
||||||
private readonly string query;
|
private readonly string query;
|
||||||
private readonly RulesetInfo ruleset;
|
private readonly RulesetInfo ruleset;
|
||||||
private readonly RankStatus rankStatus;
|
private readonly BeatmapSearchCategory searchCategory;
|
||||||
private readonly DirectSortCriteria sortCriteria;
|
private readonly DirectSortCriteria sortCriteria;
|
||||||
private readonly SortDirection direction;
|
private readonly SortDirection direction;
|
||||||
private string directionString => direction == SortDirection.Descending ? @"desc" : @"asc";
|
private string directionString => direction == SortDirection.Descending ? @"desc" : @"asc";
|
||||||
|
|
||||||
public SearchBeatmapSetsRequest(string query, RulesetInfo ruleset, RankStatus rankStatus = RankStatus.Any, DirectSortCriteria sortCriteria = DirectSortCriteria.Ranked, SortDirection direction = SortDirection.Descending)
|
public SearchBeatmapSetsRequest(string query, RulesetInfo ruleset, BeatmapSearchCategory searchCategory = BeatmapSearchCategory.Any, DirectSortCriteria sortCriteria = DirectSortCriteria.Ranked, SortDirection direction = SortDirection.Descending)
|
||||||
{
|
{
|
||||||
this.query = System.Uri.EscapeDataString(query);
|
this.query = System.Uri.EscapeDataString(query);
|
||||||
this.ruleset = ruleset;
|
this.ruleset = ruleset;
|
||||||
this.rankStatus = rankStatus;
|
this.searchCategory = searchCategory;
|
||||||
this.sortCriteria = sortCriteria;
|
this.sortCriteria = sortCriteria;
|
||||||
this.direction = direction;
|
this.direction = direction;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReSharper disable once ImpureMethodCallOnReadonlyValueField
|
// ReSharper disable once ImpureMethodCallOnReadonlyValueField
|
||||||
protected override string Target => $@"beatmapsets/search?q={query}&m={ruleset.ID ?? 0}&s={(int)rankStatus}&sort={sortCriteria.ToString().ToLower()}_{directionString}";
|
protected override string Target => $@"beatmapsets/search?q={query}&m={ruleset.ID ?? 0}&s={(int)searchCategory}&sort={sortCriteria.ToString().ToLower()}_{directionString}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum BeatmapSearchCategory
|
||||||
|
{
|
||||||
|
Any = 7,
|
||||||
|
[Description("Ranked & Approved")]
|
||||||
|
RankedApproved = 0,
|
||||||
|
Approved = 1,
|
||||||
|
Loved = 8,
|
||||||
|
Favourites = 2,
|
||||||
|
Qualified = 3,
|
||||||
|
Pending = 4,
|
||||||
|
Graveyard = 5,
|
||||||
|
[Description("My Maps")]
|
||||||
|
MyMaps = 6,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -202,6 +202,7 @@ namespace osu.Game
|
|||||||
}
|
}
|
||||||
|
|
||||||
Beatmap.Value = BeatmapManager.GetWorkingBeatmap(s.Beatmap);
|
Beatmap.Value = BeatmapManager.GetWorkingBeatmap(s.Beatmap);
|
||||||
|
Beatmap.Value.Mods.Value = s.Mods;
|
||||||
|
|
||||||
menu.Push(new PlayerLoader(new ReplayPlayer(s.Replay)));
|
menu.Push(new PlayerLoader(new ReplayPlayer(s.Replay)));
|
||||||
}
|
}
|
||||||
|
@ -7,15 +7,15 @@ using osu.Framework.Allocation;
|
|||||||
using osu.Framework.Configuration;
|
using osu.Framework.Configuration;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Game.Beatmaps;
|
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Graphics.Containers;
|
using osu.Game.Graphics.Containers;
|
||||||
|
using osu.Game.Online.API.Requests;
|
||||||
using osu.Game.Overlays.SearchableList;
|
using osu.Game.Overlays.SearchableList;
|
||||||
using osu.Game.Rulesets;
|
using osu.Game.Rulesets;
|
||||||
|
|
||||||
namespace osu.Game.Overlays.Direct
|
namespace osu.Game.Overlays.Direct
|
||||||
{
|
{
|
||||||
public class FilterControl : SearchableListFilterControl<DirectSortCriteria, RankStatus>
|
public class FilterControl : SearchableListFilterControl<DirectSortCriteria, BeatmapSearchCategory>
|
||||||
{
|
{
|
||||||
public readonly Bindable<RulesetInfo> Ruleset = new Bindable<RulesetInfo>();
|
public readonly Bindable<RulesetInfo> Ruleset = new Bindable<RulesetInfo>();
|
||||||
private FillFlowContainer<RulesetToggleButton> modeButtons;
|
private FillFlowContainer<RulesetToggleButton> modeButtons;
|
||||||
|
@ -22,7 +22,7 @@ using OpenTK.Graphics;
|
|||||||
|
|
||||||
namespace osu.Game.Overlays
|
namespace osu.Game.Overlays
|
||||||
{
|
{
|
||||||
public class DirectOverlay : SearchableListOverlay<DirectTab, DirectSortCriteria, RankStatus>
|
public class DirectOverlay : SearchableListOverlay<DirectTab, DirectSortCriteria, BeatmapSearchCategory>
|
||||||
{
|
{
|
||||||
private const float panel_padding = 10f;
|
private const float panel_padding = 10f;
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ namespace osu.Game.Overlays
|
|||||||
protected override Color4 TrianglesColourDark => OsuColour.FromHex(@"3f5265");
|
protected override Color4 TrianglesColourDark => OsuColour.FromHex(@"3f5265");
|
||||||
|
|
||||||
protected override SearchableListHeader<DirectTab> CreateHeader() => new Header();
|
protected override SearchableListHeader<DirectTab> CreateHeader() => new Header();
|
||||||
protected override SearchableListFilterControl<DirectSortCriteria, RankStatus> CreateFilterControl() => new FilterControl();
|
protected override SearchableListFilterControl<DirectSortCriteria, BeatmapSearchCategory> CreateFilterControl() => new FilterControl();
|
||||||
|
|
||||||
private IEnumerable<BeatmapSetInfo> beatmapSets;
|
private IEnumerable<BeatmapSetInfo> beatmapSets;
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ using osu.Game.Rulesets.Mods;
|
|||||||
using osu.Game.Rulesets.Replays.Types;
|
using osu.Game.Rulesets.Replays.Types;
|
||||||
using osu.Game.Rulesets.Scoring;
|
using osu.Game.Rulesets.Scoring;
|
||||||
using osu.Game.Rulesets.UI;
|
using osu.Game.Rulesets.UI;
|
||||||
|
using osu.Game.Beatmaps.Legacy;
|
||||||
|
|
||||||
namespace osu.Game.Rulesets
|
namespace osu.Game.Rulesets
|
||||||
{
|
{
|
||||||
@ -33,6 +34,13 @@ namespace osu.Game.Rulesets
|
|||||||
|
|
||||||
public abstract IEnumerable<Mod> GetModsFor(ModType type);
|
public abstract IEnumerable<Mod> GetModsFor(ModType type);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts mods from legacy enum values. Do not override if you're not a legacy ruleset.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="mods">The legacy enum which will be converted</param>
|
||||||
|
/// <returns>An enumerable of constructed <see cref="Mod"/>s</returns>
|
||||||
|
public virtual IEnumerable<Mod> ConvertLegacyMods(LegacyMods mods) => new Mod[] { };
|
||||||
|
|
||||||
public Mod GetAutoplayMod() => GetAllMods().First(mod => mod is ModAutoplay);
|
public Mod GetAutoplayMod() => GetAllMods().First(mod => mod is ModAutoplay);
|
||||||
|
|
||||||
protected Ruleset(RulesetInfo rulesetInfo = null)
|
protected Ruleset(RulesetInfo rulesetInfo = null)
|
||||||
|
@ -9,6 +9,8 @@ using osu.Game.Rulesets.Replays;
|
|||||||
using osu.Game.Rulesets.Replays.Legacy;
|
using osu.Game.Rulesets.Replays.Legacy;
|
||||||
using osu.Game.Users;
|
using osu.Game.Users;
|
||||||
using SharpCompress.Compressors.LZMA;
|
using SharpCompress.Compressors.LZMA;
|
||||||
|
using osu.Game.Beatmaps.Legacy;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Scoring.Legacy
|
namespace osu.Game.Rulesets.Scoring.Legacy
|
||||||
{
|
{
|
||||||
@ -64,7 +66,7 @@ namespace osu.Game.Rulesets.Scoring.Legacy
|
|||||||
/* score.Perfect = */
|
/* score.Perfect = */
|
||||||
sr.ReadBoolean();
|
sr.ReadBoolean();
|
||||||
/* score.EnabledMods = (Mods)*/
|
/* score.EnabledMods = (Mods)*/
|
||||||
sr.ReadInt32();
|
score.Mods = currentRuleset.ConvertLegacyMods((LegacyMods)sr.ReadInt32()).ToArray();
|
||||||
/* score.HpGraphString = */
|
/* score.HpGraphString = */
|
||||||
sr.ReadString();
|
sr.ReadString();
|
||||||
/* score.Date = */
|
/* score.Date = */
|
||||||
|
@ -39,8 +39,9 @@ namespace osu.Game.Screens.Select.Leaderboards
|
|||||||
|
|
||||||
private readonly LoadingAnimation loading;
|
private readonly LoadingAnimation loading;
|
||||||
|
|
||||||
private IEnumerable<Score> scores;
|
private ScheduledDelegate showScoresDelegate;
|
||||||
|
|
||||||
|
private IEnumerable<Score> scores;
|
||||||
public IEnumerable<Score> Scores
|
public IEnumerable<Score> Scores
|
||||||
{
|
{
|
||||||
get { return scores; }
|
get { return scores; }
|
||||||
@ -59,29 +60,34 @@ namespace osu.Game.Screens.Select.Leaderboards
|
|||||||
// ensure placeholder is hidden when displaying scores
|
// ensure placeholder is hidden when displaying scores
|
||||||
PlaceholderState = PlaceholderState.Successful;
|
PlaceholderState = PlaceholderState.Successful;
|
||||||
|
|
||||||
// schedule because we may not be loaded yet (LoadComponentAsync complains).
|
var flow = scrollFlow = new FillFlowContainer<LeaderboardScore>
|
||||||
Schedule(() =>
|
|
||||||
{
|
{
|
||||||
LoadComponentAsync(new FillFlowContainer<LeaderboardScore>
|
RelativeSizeAxes = Axes.X,
|
||||||
{
|
AutoSizeAxes = Axes.Y,
|
||||||
RelativeSizeAxes = Axes.X,
|
Spacing = new Vector2(0f, 5f),
|
||||||
AutoSizeAxes = Axes.Y,
|
Padding = new MarginPadding { Top = 10, Bottom = 5 },
|
||||||
Spacing = new Vector2(0f, 5f),
|
ChildrenEnumerable = scores.Select((s, index) => new LeaderboardScore(s, index + 1) { Action = () => ScoreSelected?.Invoke(s) })
|
||||||
Padding = new MarginPadding { Top = 10, Bottom = 5 },
|
};
|
||||||
ChildrenEnumerable = scores.Select((s, index) => new LeaderboardScore(s, index + 1) { Action = () => ScoreSelected?.Invoke(s) })
|
|
||||||
}, f =>
|
|
||||||
{
|
|
||||||
scrollContainer.Add(scrollFlow = f);
|
|
||||||
|
|
||||||
int i = 0;
|
// schedule because we may not be loaded yet (LoadComponentAsync complains).
|
||||||
foreach (var s in f.Children)
|
showScoresDelegate?.Cancel();
|
||||||
{
|
if (!IsLoaded)
|
||||||
using (s.BeginDelayedSequence(i++ * 50, true))
|
showScoresDelegate = Schedule(showScores);
|
||||||
s.Show();
|
else
|
||||||
}
|
showScores();
|
||||||
|
|
||||||
scrollContainer.ScrollTo(0f, false);
|
void showScores() => LoadComponentAsync(flow, _ =>
|
||||||
});
|
{
|
||||||
|
scrollContainer.Add(flow);
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
foreach (var s in flow.Children)
|
||||||
|
{
|
||||||
|
using (s.BeginDelayedSequence(i++ * 50, true))
|
||||||
|
s.Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
scrollContainer.ScrollTo(0f, false);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -103,6 +109,10 @@ namespace osu.Game.Screens.Select.Leaderboards
|
|||||||
|
|
||||||
private PlaceholderState placeholderState;
|
private PlaceholderState placeholderState;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Update the placeholder visibility.
|
||||||
|
/// Setting this to anything other than PlaceholderState.Successful will cancel all existing retrieval requests and hide scores.
|
||||||
|
/// </summary>
|
||||||
protected PlaceholderState PlaceholderState
|
protected PlaceholderState PlaceholderState
|
||||||
{
|
{
|
||||||
get { return placeholderState; }
|
get { return placeholderState; }
|
||||||
@ -250,43 +260,45 @@ namespace osu.Game.Screens.Select.Leaderboards
|
|||||||
loading.Show();
|
loading.Show();
|
||||||
|
|
||||||
getScoresRequest = new GetScoresRequest(Beatmap, osuGame?.Ruleset.Value ?? Beatmap.Ruleset, Scope);
|
getScoresRequest = new GetScoresRequest(Beatmap, osuGame?.Ruleset.Value ?? Beatmap.Ruleset, Scope);
|
||||||
getScoresRequest.Success += r =>
|
getScoresRequest.Success += r => Schedule(() =>
|
||||||
{
|
{
|
||||||
Scores = r.Scores;
|
Scores = r.Scores;
|
||||||
PlaceholderState = Scores.Any() ? PlaceholderState.Successful : PlaceholderState.NoScores;
|
PlaceholderState = Scores.Any() ? PlaceholderState.Successful : PlaceholderState.NoScores;
|
||||||
};
|
});
|
||||||
getScoresRequest.Failure += onUpdateFailed;
|
|
||||||
|
getScoresRequest.Failure += e => Schedule(() =>
|
||||||
|
{
|
||||||
|
if (e is OperationCanceledException)
|
||||||
|
return;
|
||||||
|
|
||||||
|
PlaceholderState = PlaceholderState.NetworkFailure;
|
||||||
|
Logger.Error(e, @"Couldn't fetch beatmap scores!");
|
||||||
|
});
|
||||||
|
|
||||||
api.Queue(getScoresRequest);
|
api.Queue(getScoresRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onUpdateFailed(Exception e)
|
private Placeholder currentPlaceholder;
|
||||||
{
|
|
||||||
if (e is OperationCanceledException)
|
|
||||||
return;
|
|
||||||
|
|
||||||
PlaceholderState = PlaceholderState.NetworkFailure;
|
|
||||||
Logger.Error(e, @"Couldn't fetch beatmap scores!");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void replacePlaceholder(Placeholder placeholder)
|
private void replacePlaceholder(Placeholder placeholder)
|
||||||
{
|
{
|
||||||
var existingPlaceholder = placeholderContainer.Children.LastOrDefault() as Placeholder;
|
if (placeholder != null && placeholder.Equals(currentPlaceholder))
|
||||||
|
|
||||||
if (placeholder != null && placeholder.Equals(existingPlaceholder))
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
existingPlaceholder?.FadeOut(150, Easing.OutQuint).Expire();
|
currentPlaceholder?.FadeOut(150, Easing.OutQuint).Expire();
|
||||||
|
|
||||||
if (placeholder == null)
|
if (placeholder == null)
|
||||||
|
{
|
||||||
|
currentPlaceholder = null;
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Scores = null;
|
placeholderContainer.Child = placeholder;
|
||||||
|
|
||||||
placeholderContainer.Add(placeholder);
|
|
||||||
|
|
||||||
placeholder.ScaleTo(0.8f).Then().ScaleTo(1, fade_duration * 3, Easing.OutQuint);
|
placeholder.ScaleTo(0.8f).Then().ScaleTo(1, fade_duration * 3, Easing.OutQuint);
|
||||||
placeholder.FadeInFromZero(fade_duration, Easing.OutQuint);
|
placeholder.FadeInFromZero(fade_duration, Easing.OutQuint);
|
||||||
|
|
||||||
|
currentPlaceholder = placeholder;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Update()
|
protected override void Update()
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using osu.Framework.Testing;
|
using osu.Framework.Testing;
|
||||||
@ -10,28 +9,27 @@ namespace osu.Game.Tests.Visual
|
|||||||
{
|
{
|
||||||
public abstract class OsuTestCase : TestCase
|
public abstract class OsuTestCase : TestCase
|
||||||
{
|
{
|
||||||
public override void RunTest()
|
protected override ITestCaseTestRunner CreateRunner() => new OsuTestCaseTestRunner();
|
||||||
{
|
|
||||||
using (var host = new CleanRunHeadlessGameHost($"test-{Guid.NewGuid()}", realtime: false))
|
|
||||||
host.Run(new OsuTestCaseTestRunner(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
public class OsuTestCaseTestRunner : OsuGameBase
|
public class OsuTestCaseTestRunner : OsuGameBase, ITestCaseTestRunner
|
||||||
{
|
{
|
||||||
private readonly OsuTestCase testCase;
|
|
||||||
|
|
||||||
protected override string MainResourceFile => File.Exists(base.MainResourceFile) ? base.MainResourceFile : Assembly.GetExecutingAssembly().Location;
|
protected override string MainResourceFile => File.Exists(base.MainResourceFile) ? base.MainResourceFile : Assembly.GetExecutingAssembly().Location;
|
||||||
|
|
||||||
public OsuTestCaseTestRunner(OsuTestCase testCase)
|
private readonly TestCaseTestRunner.TestRunner runner;
|
||||||
|
|
||||||
|
public OsuTestCaseTestRunner()
|
||||||
{
|
{
|
||||||
this.testCase = testCase;
|
runner = new TestCaseTestRunner.TestRunner();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void LoadComplete()
|
protected override void LoadComplete()
|
||||||
{
|
{
|
||||||
base.LoadComplete();
|
base.LoadComplete();
|
||||||
Add(new TestCaseTestRunner.TestRunner(testCase));
|
|
||||||
|
Add(runner);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void RunTestBlocking(TestCase test) => runner.RunTestBlocking(test);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user