mirror of
https://github.com/ppy/osu.git
synced 2025-01-26 17:53:53 +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.
|
// 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.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Scoring;
|
using osu.Game.Scoring;
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Mods
|
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);
|
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;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using osu.Framework.Graphics.Sprites;
|
using osu.Framework.Graphics.Sprites;
|
||||||
|
using osu.Framework.Logging;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Replays;
|
using osu.Game.Replays;
|
||||||
@ -11,7 +12,7 @@ using osu.Game.Scoring;
|
|||||||
|
|
||||||
namespace osu.Game.Rulesets.Mods
|
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 Name => "Autoplay";
|
||||||
public override string Acronym => "AT";
|
public override string Acronym => "AT";
|
||||||
@ -30,6 +31,18 @@ namespace osu.Game.Rulesets.Mods
|
|||||||
|
|
||||||
public override bool HasImplementation => GetType().GenericTypeArguments.Length == 0;
|
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 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