mirror of
https://github.com/ppy/osu.git
synced 2025-01-12 17:23:22 +08:00
Create new ICreateReplayData
interface and obsolete ICreateReplay
This commit is contained in:
parent
3fc8c23fe4
commit
7d716adf39
@ -1,14 +1,22 @@
|
||||
// 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 System.Collections.Generic;
|
||||
using osu.Game.Beatmaps;
|
||||
using osu.Game.Scoring;
|
||||
|
||||
namespace osu.Game.Rulesets.Mods
|
||||
{
|
||||
public interface ICreateReplay
|
||||
[Obsolete("Use ICreateReplayData instead")] // Can be removed 20220929
|
||||
public interface ICreateReplay : ICreateReplayData
|
||||
{
|
||||
public Score CreateReplayScore(IBeatmap beatmap, IReadOnlyList<Mod> mods);
|
||||
|
||||
ModReplayData ICreateReplayData.CreateReplayData(IBeatmap beatmap, IReadOnlyList<Mod> mods)
|
||||
{
|
||||
var replayScore = CreateReplayScore(beatmap, mods);
|
||||
return new ModReplayData(replayScore.Replay, new ModCreatedReplayUser { Username = replayScore.ScoreInfo.User.Username });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
58
osu.Game/Rulesets/Mods/ICreateReplayData.cs
Normal file
58
osu.Game/Rulesets/Mods/ICreateReplayData.cs
Normal file
@ -0,0 +1,58 @@
|
||||
// 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.Collections.Generic;
|
||||
using osu.Game.Beatmaps;
|
||||
using osu.Game.Online.API.Requests.Responses;
|
||||
using osu.Game.Replays;
|
||||
using osu.Game.Users;
|
||||
|
||||
namespace osu.Game.Rulesets.Mods
|
||||
{
|
||||
/// <summary>
|
||||
/// A mod which creates full replay data, which is to be played back in place of a local user playing the game.
|
||||
/// </summary>
|
||||
public interface ICreateReplayData
|
||||
{
|
||||
/// <summary>
|
||||
/// Create replay data.
|
||||
/// </summary>
|
||||
/// <param name="beatmap"></param>
|
||||
/// <param name="mods"></param>
|
||||
/// <returns></returns>
|
||||
public ModReplayData CreateReplayData(IBeatmap beatmap, IReadOnlyList<Mod> mods);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Data created by a mod that implements <see cref="ICreateReplayData"/>.
|
||||
/// </summary>
|
||||
public class ModReplayData
|
||||
{
|
||||
/// <summary>
|
||||
/// The full replay data.
|
||||
/// </summary>
|
||||
public readonly Replay Replay;
|
||||
|
||||
/// <summary>
|
||||
/// Placeholder user data to show in place of the local user when the associated mod is active.
|
||||
/// </summary>
|
||||
public readonly ModCreatedReplayUser User;
|
||||
|
||||
public ModReplayData(Replay replay, ModCreatedReplayUser user = null)
|
||||
{
|
||||
Replay = replay;
|
||||
User = user ?? new ModCreatedReplayUser();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A user which is associated with a replay that was created by a mod (ie. autoplay or cinema).
|
||||
/// </summary>
|
||||
public class ModCreatedReplayUser : IUser
|
||||
{
|
||||
public int OnlineID => APIUser.SYSTEM_USER_ID;
|
||||
public bool IsBot => true;
|
||||
|
||||
public string Username { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
@ -4,6 +4,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using osu.Framework.Graphics.Sprites;
|
||||
using osu.Framework.Logging;
|
||||
using osu.Game.Beatmaps;
|
||||
using osu.Game.Graphics;
|
||||
using osu.Game.Replays;
|
||||
@ -11,7 +12,7 @@ using osu.Game.Scoring;
|
||||
|
||||
namespace osu.Game.Rulesets.Mods
|
||||
{
|
||||
public abstract class ModAutoplay : Mod, IApplicableFailOverride, ICreateReplay
|
||||
public abstract class ModAutoplay : Mod, IApplicableFailOverride, ICreateReplayData
|
||||
{
|
||||
public override string Name => "Autoplay";
|
||||
public override string Acronym => "AT";
|
||||
@ -30,6 +31,18 @@ namespace osu.Game.Rulesets.Mods
|
||||
|
||||
public override bool HasImplementation => GetType().GenericTypeArguments.Length == 0;
|
||||
|
||||
[Obsolete("Use CreateScoreFromReplayData(IBeatmap, IReadOnlyList<Mod>) instead")] // Can be removed 20220929
|
||||
public virtual Score CreateReplayScore(IBeatmap beatmap, IReadOnlyList<Mod> mods) => new Score { Replay = new Replay() };
|
||||
|
||||
public virtual ModReplayData CreateReplayData(IBeatmap beatmap, IReadOnlyList<Mod> mods)
|
||||
{
|
||||
Logger.Log($"Ruleset mod implementation for {GetType().Name} should be updated to newer {nameof(ICreateReplayData)} signature.", LoggingTarget.Information);
|
||||
|
||||
#pragma warning disable CS0618
|
||||
var replayScore = CreateReplayScore(beatmap, mods);
|
||||
#pragma warning restore CS0618
|
||||
|
||||
return new ModReplayData(replayScore.Replay, new ModCreatedReplayUser { Username = replayScore.ScoreInfo.User.Username });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user