mirror of
https://github.com/osukey/osukey.git
synced 2025-08-07 00:23:59 +09:00
Introduce back the concept of Rulesets.
This commit is contained in:
20
osu.Game/GameModes/Play/Catch/CatchRuleset.cs
Normal file
20
osu.Game/GameModes/Play/Catch/CatchRuleset.cs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
//Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using osu.Game.Beatmaps.Objects;
|
||||||
|
using osu.Game.GameModes.Play.Osu;
|
||||||
|
|
||||||
|
namespace osu.Game.GameModes.Play.Catch
|
||||||
|
{
|
||||||
|
class CatchRuleset : Ruleset
|
||||||
|
{
|
||||||
|
public override ScoreOverlay CreateScoreOverlay() => new ScoreOverlayOsu();
|
||||||
|
|
||||||
|
public override HitRenderer CreateHitRendererWith(List<HitObject> objects) => new CatchHitRenderer { Objects = objects };
|
||||||
|
}
|
||||||
|
}
|
20
osu.Game/GameModes/Play/Mania/ManiaRuleset.cs
Normal file
20
osu.Game/GameModes/Play/Mania/ManiaRuleset.cs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
//Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using osu.Game.Beatmaps.Objects;
|
||||||
|
using osu.Game.GameModes.Play.Osu;
|
||||||
|
|
||||||
|
namespace osu.Game.GameModes.Play.Mania
|
||||||
|
{
|
||||||
|
class ManiaRuleset : Ruleset
|
||||||
|
{
|
||||||
|
public override ScoreOverlay CreateScoreOverlay() => new ScoreOverlayOsu();
|
||||||
|
|
||||||
|
public override HitRenderer CreateHitRendererWith(List<HitObject> objects) => new ManiaHitRenderer { Objects = objects };
|
||||||
|
}
|
||||||
|
}
|
18
osu.Game/GameModes/Play/Osu/OsuRuleset.cs
Normal file
18
osu.Game/GameModes/Play/Osu/OsuRuleset.cs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
//Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using osu.Game.Beatmaps.Objects;
|
||||||
|
|
||||||
|
namespace osu.Game.GameModes.Play.Osu
|
||||||
|
{
|
||||||
|
class OsuRuleset : Ruleset
|
||||||
|
{
|
||||||
|
public override ScoreOverlay CreateScoreOverlay() => new ScoreOverlayOsu();
|
||||||
|
|
||||||
|
public override HitRenderer CreateHitRendererWith(List<HitObject> objects) => new OsuHitRenderer { Objects = objects };
|
||||||
|
}}
|
@ -15,8 +15,6 @@ using osu.Framework.Audio.Track;
|
|||||||
using osu.Framework.Extensions.IEnumerableExtensions;
|
using osu.Framework.Extensions.IEnumerableExtensions;
|
||||||
using osu.Framework.Graphics.Cursor;
|
using osu.Framework.Graphics.Cursor;
|
||||||
using osu.Framework.Input;
|
using osu.Framework.Input;
|
||||||
using osu.Framework.Graphics.Containers;
|
|
||||||
using osu.Framework.Graphics.Cursor;
|
|
||||||
using osu.Framework.Platform;
|
using osu.Framework.Platform;
|
||||||
using OpenTK.Input;
|
using OpenTK.Input;
|
||||||
using MouseState = osu.Framework.Input.MouseState;
|
using MouseState = osu.Framework.Input.MouseState;
|
||||||
@ -72,6 +70,7 @@ namespace osu.Game.GameModes.Play
|
|||||||
|
|
||||||
private InterpolatingFramedClock playerClock;
|
private InterpolatingFramedClock playerClock;
|
||||||
private IAdjustableClock sourceClock;
|
private IAdjustableClock sourceClock;
|
||||||
|
private Ruleset Ruleset;
|
||||||
|
|
||||||
protected override void Load(BaseGame game)
|
protected override void Load(BaseGame game)
|
||||||
{
|
{
|
||||||
@ -120,49 +119,11 @@ namespace osu.Game.GameModes.Play
|
|||||||
|
|
||||||
PlayMode usablePlayMode = beatmap.BeatmapInfo?.Mode > PlayMode.Osu ? beatmap.BeatmapInfo.Mode : PreferredPlayMode;
|
PlayMode usablePlayMode = beatmap.BeatmapInfo?.Mode > PlayMode.Osu ? beatmap.BeatmapInfo.Mode : PreferredPlayMode;
|
||||||
|
|
||||||
switch (usablePlayMode)
|
Ruleset = Ruleset.GetRuleset(usablePlayMode);
|
||||||
{
|
|
||||||
default:
|
|
||||||
scoreOverlay = new ScoreOverlayOsu();
|
|
||||||
|
|
||||||
hitRenderer = new OsuHitRenderer
|
scoreOverlay = Ruleset.CreateScoreOverlay();
|
||||||
{
|
|
||||||
Objects = beatmap.HitObjects,
|
|
||||||
Anchor = Anchor.Centre,
|
|
||||||
Origin = Anchor.Centre
|
|
||||||
};
|
|
||||||
break;
|
|
||||||
case PlayMode.Taiko:
|
|
||||||
scoreOverlay = new ScoreOverlayOsu();
|
|
||||||
|
|
||||||
hitRenderer = new TaikoHitRenderer
|
hitRenderer = Ruleset.CreateHitRendererWith(beatmap.HitObjects);
|
||||||
{
|
|
||||||
Objects = beatmap.HitObjects,
|
|
||||||
Anchor = Anchor.Centre,
|
|
||||||
Origin = Anchor.Centre
|
|
||||||
};
|
|
||||||
break;
|
|
||||||
case PlayMode.Catch:
|
|
||||||
scoreOverlay = new ScoreOverlayOsu();
|
|
||||||
|
|
||||||
hitRenderer = new CatchHitRenderer
|
|
||||||
{
|
|
||||||
Objects = beatmap.HitObjects,
|
|
||||||
Anchor = Anchor.Centre,
|
|
||||||
Origin = Anchor.Centre
|
|
||||||
};
|
|
||||||
break;
|
|
||||||
case PlayMode.Mania:
|
|
||||||
scoreOverlay = new ScoreOverlayOsu();
|
|
||||||
|
|
||||||
hitRenderer = new ManiaHitRenderer
|
|
||||||
{
|
|
||||||
Objects = beatmap.HitObjects,
|
|
||||||
Anchor = Anchor.Centre,
|
|
||||||
Origin = Anchor.Centre
|
|
||||||
};
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
hitRenderer.OnHit += delegate (HitObject h) { scoreOverlay.OnHit(h); };
|
hitRenderer.OnHit += delegate (HitObject h) { scoreOverlay.OnHit(h); };
|
||||||
hitRenderer.OnMiss += delegate (HitObject h) { scoreOverlay.OnMiss(h); };
|
hitRenderer.OnMiss += delegate (HitObject h) { scoreOverlay.OnMiss(h); };
|
||||||
|
38
osu.Game/GameModes/Play/Ruleset.cs
Normal file
38
osu.Game/GameModes/Play/Ruleset.cs
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
//Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using osu.Game.Beatmaps.Objects;
|
||||||
|
using osu.Game.GameModes.Play.Catch;
|
||||||
|
using osu.Game.GameModes.Play.Mania;
|
||||||
|
using osu.Game.GameModes.Play.Osu;
|
||||||
|
using osu.Game.GameModes.Play.Taiko;
|
||||||
|
|
||||||
|
namespace osu.Game.GameModes.Play
|
||||||
|
{
|
||||||
|
public abstract class Ruleset
|
||||||
|
{
|
||||||
|
public abstract ScoreOverlay CreateScoreOverlay();
|
||||||
|
|
||||||
|
public abstract HitRenderer CreateHitRendererWith(List<HitObject> objects);
|
||||||
|
|
||||||
|
public static Ruleset GetRuleset(PlayMode mode)
|
||||||
|
{
|
||||||
|
switch (mode)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
return new OsuRuleset();
|
||||||
|
case PlayMode.Catch:
|
||||||
|
return new CatchRuleset();
|
||||||
|
case PlayMode.Mania:
|
||||||
|
return new ManiaRuleset();
|
||||||
|
case PlayMode.Taiko:
|
||||||
|
return new TaikoRuleset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
20
osu.Game/GameModes/Play/Taiko/TaikoRuleset.cs
Normal file
20
osu.Game/GameModes/Play/Taiko/TaikoRuleset.cs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
//Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using osu.Game.Beatmaps.Objects;
|
||||||
|
using osu.Game.GameModes.Play.Osu;
|
||||||
|
|
||||||
|
namespace osu.Game.GameModes.Play.Taiko
|
||||||
|
{
|
||||||
|
class TaikoRuleset : Ruleset
|
||||||
|
{
|
||||||
|
public override ScoreOverlay CreateScoreOverlay() => new ScoreOverlayOsu();
|
||||||
|
|
||||||
|
public override HitRenderer CreateHitRendererWith(List<HitObject> objects) => new TaikoHitRenderer { Objects = objects };
|
||||||
|
}
|
||||||
|
}
|
@ -121,13 +121,18 @@
|
|||||||
<Compile Include="GameModes\Multiplayer\MatchCreate.cs" />
|
<Compile Include="GameModes\Multiplayer\MatchCreate.cs" />
|
||||||
<Compile Include="GameModes\Multiplayer\MatchSongSelect.cs" />
|
<Compile Include="GameModes\Multiplayer\MatchSongSelect.cs" />
|
||||||
<Compile Include="GameModes\OsuGameMode.cs" />
|
<Compile Include="GameModes\OsuGameMode.cs" />
|
||||||
|
<Compile Include="GameModes\Play\Catch\CatchRuleset.cs" />
|
||||||
|
<Compile Include="GameModes\Play\Mania\ManiaRuleset.cs" />
|
||||||
<Compile Include="GameModes\Play\ModSelect.cs" />
|
<Compile Include="GameModes\Play\ModSelect.cs" />
|
||||||
|
<Compile Include="GameModes\Play\Osu\OsuRuleset.cs" />
|
||||||
<Compile Include="GameModes\Play\Osu\ScoreOverlayOsu.cs" />
|
<Compile Include="GameModes\Play\Osu\ScoreOverlayOsu.cs" />
|
||||||
<Compile Include="Beatmaps\Drawable\BeatmapGroup.cs" />
|
<Compile Include="Beatmaps\Drawable\BeatmapGroup.cs" />
|
||||||
<Compile Include="Beatmaps\Drawable\BeatmapPanel.cs" />
|
<Compile Include="Beatmaps\Drawable\BeatmapPanel.cs" />
|
||||||
<Compile Include="GameModes\Play\Player.cs" />
|
<Compile Include="GameModes\Play\Player.cs" />
|
||||||
<Compile Include="GameModes\Charts\ChartListing.cs" />
|
<Compile Include="GameModes\Charts\ChartListing.cs" />
|
||||||
<Compile Include="GameModes\Play\PlayMode.cs" />
|
<Compile Include="GameModes\Play\PlayMode.cs" />
|
||||||
|
<Compile Include="GameModes\Play\Ruleset.cs" />
|
||||||
|
<Compile Include="GameModes\Play\Taiko\TaikoRuleset.cs" />
|
||||||
<Compile Include="GameModes\Ranking\Results.cs" />
|
<Compile Include="GameModes\Ranking\Results.cs" />
|
||||||
<Compile Include="GameModes\Direct\OnlineListing.cs" />
|
<Compile Include="GameModes\Direct\OnlineListing.cs" />
|
||||||
<Compile Include="GameModes\Play\PlaySongSelect.cs" />
|
<Compile Include="GameModes\Play\PlaySongSelect.cs" />
|
||||||
|
Reference in New Issue
Block a user