2020-08-27 16:39:29 +02:00
|
|
|
using System.Collections.Generic;
|
2021-06-09 22:19:39 +02:00
|
|
|
using Content.Client.HUD;
|
|
|
|
|
using Content.Shared.Suspicion;
|
2020-08-27 16:39:29 +02:00
|
|
|
using Robust.Client.GameObjects;
|
2021-02-11 01:13:03 -08:00
|
|
|
using Robust.Client.Graphics;
|
|
|
|
|
using Robust.Client.ResourceManagement;
|
2020-08-27 16:39:29 +02:00
|
|
|
using Robust.Shared.GameObjects;
|
|
|
|
|
using Robust.Shared.IoC;
|
2021-01-04 09:17:44 +01:00
|
|
|
using Robust.Shared.ViewVariables;
|
2020-08-27 16:39:29 +02:00
|
|
|
|
2021-06-09 22:19:39 +02:00
|
|
|
namespace Content.Client.Suspicion
|
2020-08-27 16:39:29 +02:00
|
|
|
{
|
|
|
|
|
[RegisterComponent]
|
|
|
|
|
public class SuspicionRoleComponent : SharedSuspicionRoleComponent
|
|
|
|
|
{
|
|
|
|
|
[Dependency] private readonly IGameHud _gameHud = default!;
|
2020-10-09 18:57:09 +02:00
|
|
|
[Dependency] private readonly IOverlayManager _overlayManager = default!;
|
|
|
|
|
[Dependency] private readonly IResourceCache _resourceCache = default!;
|
2020-08-27 16:39:29 +02:00
|
|
|
|
|
|
|
|
private SuspicionGui? _gui;
|
|
|
|
|
private string? _role;
|
|
|
|
|
private bool? _antagonist;
|
2021-01-04 09:17:44 +01:00
|
|
|
private bool _overlayActive;
|
2020-08-27 16:39:29 +02:00
|
|
|
|
|
|
|
|
public string? Role
|
|
|
|
|
{
|
|
|
|
|
get => _role;
|
|
|
|
|
set
|
|
|
|
|
{
|
2020-10-09 18:57:09 +02:00
|
|
|
if (_role == value)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-27 16:39:29 +02:00
|
|
|
_role = value;
|
|
|
|
|
_gui?.UpdateLabel();
|
|
|
|
|
Dirty();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool? Antagonist
|
|
|
|
|
{
|
|
|
|
|
get => _antagonist;
|
|
|
|
|
set
|
|
|
|
|
{
|
2020-10-09 18:57:09 +02:00
|
|
|
if (_antagonist == value)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-27 16:39:29 +02:00
|
|
|
_antagonist = value;
|
|
|
|
|
_gui?.UpdateLabel();
|
2020-10-09 18:57:09 +02:00
|
|
|
|
|
|
|
|
if (value ?? false)
|
|
|
|
|
{
|
|
|
|
|
AddTraitorOverlay();
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-27 16:39:29 +02:00
|
|
|
Dirty();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-04 09:17:44 +01:00
|
|
|
[ViewVariables]
|
|
|
|
|
public List<(string name, EntityUid uid)> Allies { get; } = new();
|
2020-10-09 18:57:09 +02:00
|
|
|
|
|
|
|
|
private void AddTraitorOverlay()
|
|
|
|
|
{
|
2021-03-09 04:33:41 -06:00
|
|
|
if (_overlayManager.HasOverlay<TraitorOverlay>())
|
2020-10-09 18:57:09 +02:00
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-04 09:17:44 +01:00
|
|
|
_overlayActive = true;
|
2021-12-10 05:47:21 +00:00
|
|
|
var overlay = new TraitorOverlay(IoCManager.Resolve<IEntityManager>(), _resourceCache);
|
2020-10-09 18:57:09 +02:00
|
|
|
_overlayManager.AddOverlay(overlay);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void RemoveTraitorOverlay()
|
|
|
|
|
{
|
2021-01-04 09:17:44 +01:00
|
|
|
if (!_overlayActive)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-09 04:33:41 -06:00
|
|
|
_overlayManager.RemoveOverlay<TraitorOverlay>();
|
2020-10-09 18:57:09 +02:00
|
|
|
}
|
2020-08-27 16:39:29 +02:00
|
|
|
|
|
|
|
|
public override void HandleComponentState(ComponentState? curState, ComponentState? nextState)
|
|
|
|
|
{
|
|
|
|
|
base.HandleComponentState(curState, nextState);
|
|
|
|
|
|
2020-11-26 14:33:31 +01:00
|
|
|
if (curState is not SuspicionRoleComponentState state)
|
2020-08-27 16:39:29 +02:00
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2020-10-09 18:57:09 +02:00
|
|
|
Role = state.Role;
|
|
|
|
|
Antagonist = state.Antagonist;
|
2021-01-04 09:17:44 +01:00
|
|
|
Allies.Clear();
|
|
|
|
|
Allies.AddRange(state.Allies);
|
2020-08-27 16:39:29 +02:00
|
|
|
}
|
|
|
|
|
|
2021-06-18 01:49:18 -07:00
|
|
|
public void PlayerDetached()
|
2020-08-27 16:39:29 +02:00
|
|
|
{
|
2021-06-18 01:49:18 -07:00
|
|
|
_gui?.Parent?.RemoveChild(_gui);
|
|
|
|
|
RemoveTraitorOverlay();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void PlayerAttached()
|
|
|
|
|
{
|
|
|
|
|
if (_gui == null)
|
|
|
|
|
{
|
|
|
|
|
_gui = new SuspicionGui();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
_gui.Parent?.RemoveChild(_gui);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_gameHud.SuspicionContainer.AddChild(_gui);
|
|
|
|
|
_gui.UpdateLabel();
|
2020-08-27 16:39:29 +02:00
|
|
|
|
2021-06-18 01:49:18 -07:00
|
|
|
if (_antagonist ?? false)
|
2020-08-27 16:39:29 +02:00
|
|
|
{
|
2021-06-18 01:49:18 -07:00
|
|
|
AddTraitorOverlay();
|
2020-08-27 16:39:29 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-06-19 19:41:26 -07:00
|
|
|
protected override void OnRemove()
|
2020-08-27 16:39:29 +02:00
|
|
|
{
|
|
|
|
|
base.OnRemove();
|
|
|
|
|
|
|
|
|
|
_gui?.Dispose();
|
2020-10-09 18:57:09 +02:00
|
|
|
RemoveTraitorOverlay();
|
2020-08-27 16:39:29 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|