[Dependency] private readonly IClientConsoleHost _console = default!;
[Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly SharedActionsSystem _actions = default!;
- [Dependency] private readonly ILightManager _lightManager = default!;
[Dependency] private readonly ContentEyeSystem _contentEye = default!;
+ [Dependency] private readonly EyeSystem _eye = default!;
public int AvailableGhostRoleCount { get; private set; }
var query = AllEntityQuery<GhostComponent, SpriteComponent>();
while (query.MoveNext(out var uid, out _, out var sprite))
{
- sprite.Visible = value || uid == _playerManager.LocalPlayer?.ControlledEntity;
+ sprite.Visible = value || uid == _playerManager.LocalEntity;
}
}
}
SubscribeLocalEvent<GhostComponent, LocalPlayerAttachedEvent>(OnGhostPlayerAttach);
SubscribeLocalEvent<GhostComponent, LocalPlayerDetachedEvent>(OnGhostPlayerDetach);
- SubscribeLocalEvent<LocalPlayerAttachedEvent>(OnPlayerAttach);
-
SubscribeNetworkEvent<GhostWarpsResponseEvent>(OnGhostWarpsResponse);
SubscribeNetworkEvent<GhostUpdateGhostRoleCountEvent>(OnUpdateGhostRoleCount);
- SubscribeLocalEvent<GhostComponent, ToggleLightingActionEvent>(OnToggleLighting);
- SubscribeLocalEvent<GhostComponent, ToggleFoVActionEvent>(OnToggleFoV);
+ SubscribeLocalEvent<EyeComponent, ToggleLightingActionEvent>(OnToggleLighting);
+ SubscribeLocalEvent<EyeComponent, ToggleFoVActionEvent>(OnToggleFoV);
SubscribeLocalEvent<GhostComponent, ToggleGhostsActionEvent>(OnToggleGhosts);
}
private void OnStartup(EntityUid uid, GhostComponent component, ComponentStartup args)
{
if (TryComp(uid, out SpriteComponent? sprite))
- sprite.Visible = GhostVisibility;
+ sprite.Visible = GhostVisibility || uid == _playerManager.LocalEntity;
}
- private void OnToggleLighting(EntityUid uid, GhostComponent component, ToggleLightingActionEvent args)
+ private void OnToggleLighting(EntityUid uid, EyeComponent component, ToggleLightingActionEvent args)
{
if (args.Handled)
return;
Popup.PopupEntity(Loc.GetString("ghost-gui-toggle-lighting-manager-popup"), args.Performer);
- _lightManager.Enabled = !_lightManager.Enabled;
+ _contentEye.RequestToggleLight(uid, component);
args.Handled = true;
}
- private void OnToggleFoV(EntityUid uid, GhostComponent component, ToggleFoVActionEvent args)
+ private void OnToggleFoV(EntityUid uid, EyeComponent component, ToggleFoVActionEvent args)
{
if (args.Handled)
return;
Popup.PopupEntity(Loc.GetString("ghost-gui-toggle-fov-popup"), args.Performer);
- _contentEye.RequestToggleFov(uid);
+ _contentEye.RequestToggleFov(uid, component);
args.Handled = true;
}
Popup.PopupEntity(Loc.GetString("ghost-gui-toggle-ghost-visibility-popup"), args.Performer);
- if (uid == _playerManager.LocalPlayer?.ControlledEntity)
+ if (uid == _playerManager.LocalEntity)
ToggleGhostVisibility();
args.Handled = true;
_actions.RemoveAction(uid, component.ToggleGhostsActionEntity);
_actions.RemoveAction(uid, component.ToggleGhostHearingActionEntity);
- if (uid != _playerManager.LocalPlayer?.ControlledEntity)
+ if (uid != _playerManager.LocalEntity)
return;
- _lightManager.Enabled = true;
-
- if (component.IsAttached)
- {
- GhostVisibility = false;
- }
-
+ GhostVisibility = false;
PlayerRemoved?.Invoke(component);
}
private void OnGhostPlayerAttach(EntityUid uid, GhostComponent component, LocalPlayerAttachedEvent localPlayerAttachedEvent)
{
- if (uid != _playerManager.LocalPlayer?.ControlledEntity)
- return;
-
GhostVisibility = true;
- component.IsAttached = true;
PlayerAttached?.Invoke(component);
}
if (TryComp<SpriteComponent>(uid, out var sprite))
sprite.LayerSetColor(0, component.color);
- if (uid != _playerManager.LocalPlayer?.ControlledEntity)
+ if (uid != _playerManager.LocalEntity)
return;
PlayerUpdated?.Invoke(component);
}
- private bool PlayerDetach(EntityUid uid)
+ private void OnGhostPlayerDetach(EntityUid uid, GhostComponent component, LocalPlayerDetachedEvent args)
{
- if (uid != _playerManager.LocalPlayer?.ControlledEntity)
- return false;
-
GhostVisibility = false;
PlayerDetached?.Invoke();
- return true;
- }
-
- private void OnGhostPlayerDetach(EntityUid uid, GhostComponent component, LocalPlayerDetachedEvent args)
- {
- if (PlayerDetach(uid))
- component.IsAttached = false;
- }
-
- private void OnPlayerAttach(LocalPlayerAttachedEvent ev)
- {
- if (!HasComp<GhostComponent>(ev.Entity))
- PlayerDetach(ev.Entity);
}
private void OnGhostWarpsResponse(GhostWarpsResponseEvent msg)
base.Initialize();
SubscribeLocalEvent<ContentEyeComponent, ComponentStartup>(OnContentEyeStartup);
SubscribeAllEvent<RequestTargetZoomEvent>(OnContentZoomRequest);
- SubscribeAllEvent<RequestFovEvent>(OnRequestFov);
+ SubscribeAllEvent<RequestEyeEvent>(OnRequestEye);
CommandBinds.Builder
.Bind(ContentKeyFunctions.ZoomIn, InputCmdHandler.FromDelegate(ZoomIn, handle:false))
SetZoom(args.SenderSession.AttachedEntity.Value, msg.TargetZoom, ignoreLimit, eye: content);
}
- private void OnRequestFov(RequestFovEvent msg, EntitySessionEventArgs args)
+ private void OnRequestEye(RequestEyeEvent msg, EntitySessionEventArgs args)
{
if (args.SenderSession.AttachedEntity is not { } player)
return;
if (TryComp<EyeComponent>(player, out var eyeComp))
{
- _eye.SetDrawFov(player, msg.Fov, eyeComp);
+ _eye.SetDrawFov(player, msg.DrawFov, eyeComp);
+ _eye.SetDrawLight((player, eyeComp), msg.DrawLight);
}
}
/// Sendable from client to server to request changing fov.
/// </summary>
[Serializable, NetSerializable]
- public sealed class RequestFovEvent : EntityEventArgs
+ public sealed class RequestEyeEvent : EntityEventArgs
{
- public bool Fov;
+ public readonly bool DrawFov;
+ public readonly bool DrawLight;
+
+ public RequestEyeEvent(bool drawFov, bool drawLight)
+ {
+ DrawFov = drawFov;
+ DrawLight = drawLight;
+ }
}
}