[Raid] Refactor RosterManager into Raid

This commit is contained in:
2022-11-26 13:02:44 +01:00
parent 21803eb728
commit addaefdde7
4 changed files with 28 additions and 57 deletions

View File

@@ -6,10 +6,11 @@ public class PlayerInfo
public ulong Id { get; } public ulong Id { get; }
private readonly uint _fc;
public uint Fc public uint Fc
{ {
get => _fc; get => _fc;
set init
{ {
_fc = value; _fc = value;
_lastFcUpdate = DateTime.Today; _lastFcUpdate = DateTime.Today;
@@ -18,8 +19,7 @@ public class PlayerInfo
public bool IsFcUpdateRequired => DateTime.Today - _lastFcUpdate > FcUpdateInterval; public bool IsFcUpdateRequired => DateTime.Today - _lastFcUpdate > FcUpdateInterval;
private uint _fc; private readonly DateTime _lastFcUpdate;
private DateTime _lastFcUpdate;
public PlayerInfo(ulong id, uint fc) public PlayerInfo(ulong id, uint fc)
{ {

View File

@@ -6,10 +6,9 @@ public class Raid
{ {
public ulong Id { get; } public ulong Id { get; }
public DateTime DateTime { get; } public DateTime DateTime { get; }
public IEnumerable<IGrouping<int, RosterPlayer>> Rosters => _players.Select(p => p.Value).GroupBy(p => p.RosterNumber);
private readonly RosterManager _rosterManager = new(); private readonly IDictionary<ulong, RosterPlayer> _players = new Dictionary<ulong, RosterPlayer>();
public IEnumerable<IGrouping<int, RosterPlayer>> Rosters => _rosterManager.Rosters;
public Raid(ulong id, DateTime dateTime) public Raid(ulong id, DateTime dateTime)
{ {
@@ -21,29 +20,39 @@ public class Raid
#endif #endif
} }
public bool AddPlayer(RosterPlayer player) public bool AddPlayer(RosterPlayer rosterPlayer)
{ {
return _rosterManager.AddPlayer(player); // TODO add logic to split player in multiple rosters
rosterPlayer.RosterNumber = 1;
return _players.TryAdd(rosterPlayer.Id, rosterPlayer);
} }
public bool UpdatePlayer(RosterPlayer rosterPlayer) public bool UpdatePlayer(RosterPlayer rosterPlayer)
{ {
return _rosterManager.UpdatePlayer(rosterPlayer); if (!_players.ContainsKey(rosterPlayer.Id))
{
return false;
}
_players[rosterPlayer.Id] = rosterPlayer;
return true;
} }
public RosterPlayer GetPlayer(ulong id) public RosterPlayer GetPlayer(ulong id)
{ {
return _rosterManager.GetPlayer(id); return _players[id];
} }
public bool ContainsPlayer(ulong userId) public bool ContainsPlayer(ulong userId)
{ {
return _rosterManager.ContainsPlayer(userId); return _players.ContainsKey(userId);
} }
public bool RemovePlayer(ulong id) public bool RemovePlayer(ulong id)
{ {
return _rosterManager.RemovePlayer(id); return _players.Remove(id);
} }
public override bool Equals(object? other) public override bool Equals(object? other)

View File

@@ -1,43 +0,0 @@
namespace Cocotte.Modules.Raids;
public class RosterManager
{
private readonly IDictionary<ulong, RosterPlayer> _players = new Dictionary<ulong, RosterPlayer>();
public IEnumerable<IGrouping<int, RosterPlayer>> Rosters => _players.Select(p => p.Value).GroupBy(p => p.RosterNumber);
public bool AddPlayer(RosterPlayer rosterPlayer)
{
// TODO add logic to split player in multiple rosters
rosterPlayer.RosterNumber = 1;
return _players.TryAdd(rosterPlayer.Id, rosterPlayer);
}
public bool UpdatePlayer(RosterPlayer rosterPlayer)
{
if (!_players.ContainsKey(rosterPlayer.Id))
{
return false;
}
_players[rosterPlayer.Id] = rosterPlayer;
return true;
}
public bool RemovePlayer(ulong id)
{
return _players.Remove(id);
}
public RosterPlayer GetPlayer(ulong id)
{
return _players[id];
}
public bool ContainsPlayer(ulong userId)
{
return _players.ContainsKey(userId);
}
}

View File

@@ -1,11 +1,16 @@
using System.Numerics; using System.Numerics;
using System.Text;
namespace Cocotte.Utils; namespace Cocotte.Utils;
public static class NumberUtils public static class NumberUtils
{ {
public static string FormatSpaced<T>(this INumber<T> number) where T : INumber<T>? /// <summary>
/// Return a string representation of an <see cref="IBinaryInteger{TSelf}" /> with digits separated by spaces
/// </summary>
/// <param name="number"></param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static string FormatSpaced<T>(this IBinaryInteger<T> number) where T : IBinaryInteger<T>?
{ {
var stringNumber = number.ToString(null, null); var stringNumber = number.ToString(null, null);