83 lines
2.3 KiB
C#
83 lines
2.3 KiB
C#
using System;
|
|
using System.Linq;
|
|
using Content.Server.Interfaces.GameTicking;
|
|
using Content.Shared.GameObjects.EntitySystemMessages;
|
|
using Content.Shared.GameTicking;
|
|
using JetBrains.Annotations;
|
|
using Robust.Server.Interfaces.Player;
|
|
using Robust.Server.Player;
|
|
using Robust.Shared.Enums;
|
|
using Robust.Shared.GameObjects.Systems;
|
|
using Robust.Shared.Interfaces.Timing;
|
|
using Robust.Shared.IoC;
|
|
|
|
#nullable enable
|
|
|
|
namespace Content.Server.GameObjects.EntitySystems.GameMode
|
|
{
|
|
[UsedImplicitly]
|
|
public sealed class SuspicionEndTimerSystem : EntitySystem, IResettingEntitySystem
|
|
{
|
|
[Dependency] private readonly IPlayerManager _playerManager = null!;
|
|
[Dependency] private readonly IGameTiming _timing = null!;
|
|
[Dependency] private readonly IGameTicker _gameTicker = null!;
|
|
|
|
private TimeSpan? _endTime;
|
|
|
|
public TimeSpan? EndTime
|
|
{
|
|
get => _endTime;
|
|
set
|
|
{
|
|
_endTime = value;
|
|
SendUpdateToAll();
|
|
}
|
|
}
|
|
|
|
public override void Initialize()
|
|
{
|
|
base.Initialize();
|
|
|
|
_playerManager.PlayerStatusChanged += PlayerManagerOnPlayerStatusChanged;
|
|
}
|
|
|
|
public override void Shutdown()
|
|
{
|
|
base.Shutdown();
|
|
|
|
_playerManager.PlayerStatusChanged -= PlayerManagerOnPlayerStatusChanged;
|
|
}
|
|
|
|
private void PlayerManagerOnPlayerStatusChanged(object? sender, SessionStatusEventArgs e)
|
|
{
|
|
if (e.NewStatus == SessionStatus.InGame)
|
|
{
|
|
SendUpdateTimerMessage(e.Session);
|
|
}
|
|
}
|
|
|
|
private void SendUpdateToAll()
|
|
{
|
|
foreach (var player in _playerManager.GetAllPlayers().Where(p => p.Status == SessionStatus.InGame))
|
|
{
|
|
SendUpdateTimerMessage(player);
|
|
}
|
|
}
|
|
|
|
private void SendUpdateTimerMessage(IPlayerSession player)
|
|
{
|
|
var msg = new SuspicionMessages.SetSuspicionEndTimerMessage
|
|
{
|
|
EndTime = EndTime
|
|
};
|
|
|
|
EntityNetworkManager.SendSystemNetworkMessage(msg, player.ConnectedClient);
|
|
}
|
|
|
|
void IResettingEntitySystem.Reset()
|
|
{
|
|
EndTime = null;
|
|
}
|
|
}
|
|
}
|