ECS visibility (#5769)
This commit is contained in:
@@ -26,6 +26,7 @@ namespace Content.Server.Ghost
|
|||||||
[Dependency] private readonly IGameTiming _gameTiming = default!;
|
[Dependency] private readonly IGameTiming _gameTiming = default!;
|
||||||
[Dependency] private readonly IPlayerManager _playerManager = default!;
|
[Dependency] private readonly IPlayerManager _playerManager = default!;
|
||||||
[Dependency] private readonly GameTicker _ticker = default!;
|
[Dependency] private readonly GameTicker _ticker = default!;
|
||||||
|
[Dependency] private readonly VisibilitySystem _visibilitySystem = default!;
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
@@ -59,10 +60,11 @@ namespace Content.Server.Ghost
|
|||||||
private void OnGhostStartup(EntityUid uid, GhostComponent component, ComponentStartup args)
|
private void OnGhostStartup(EntityUid uid, GhostComponent component, ComponentStartup args)
|
||||||
{
|
{
|
||||||
// Allow this entity to be seen by other ghosts.
|
// Allow this entity to be seen by other ghosts.
|
||||||
var visibility = component.Owner.EnsureComponent<VisibilityComponent>();
|
var visibility = EntityManager.EnsureComponent<VisibilityComponent>(component.Owner);
|
||||||
|
|
||||||
visibility.Layer |= (int) VisibilityFlags.Ghost;
|
_visibilitySystem.AddLayer(visibility, (int) VisibilityFlags.Ghost, false);
|
||||||
visibility.Layer &= ~(int) VisibilityFlags.Normal;
|
_visibilitySystem.RemoveLayer(visibility, (int) VisibilityFlags.Normal, false);
|
||||||
|
_visibilitySystem.RefreshVisibility(visibility);
|
||||||
|
|
||||||
if (EntityManager.TryGetComponent(component.Owner, out EyeComponent? eye))
|
if (EntityManager.TryGetComponent(component.Owner, out EyeComponent? eye))
|
||||||
{
|
{
|
||||||
@@ -80,8 +82,9 @@ namespace Content.Server.Ghost
|
|||||||
// Entity can't be seen by ghosts anymore.
|
// Entity can't be seen by ghosts anymore.
|
||||||
if (EntityManager.TryGetComponent(component.Owner, out VisibilityComponent? visibility))
|
if (EntityManager.TryGetComponent(component.Owner, out VisibilityComponent? visibility))
|
||||||
{
|
{
|
||||||
visibility.Layer &= ~(int) VisibilityFlags.Ghost;
|
_visibilitySystem.RemoveLayer(visibility, (int) VisibilityFlags.Ghost, false);
|
||||||
visibility.Layer |= (int) VisibilityFlags.Normal;
|
_visibilitySystem.AddLayer(visibility, (int) VisibilityFlags.Normal, false);
|
||||||
|
_visibilitySystem.RefreshVisibility(visibility);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Entity can't see ghosts anymore.
|
// Entity can't see ghosts anymore.
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ namespace Content.Server.Pointing.EntitySystems
|
|||||||
[Dependency] private readonly ITileDefinitionManager _tileDefinitionManager = default!;
|
[Dependency] private readonly ITileDefinitionManager _tileDefinitionManager = default!;
|
||||||
[Dependency] private readonly IGameTiming _gameTiming = default!;
|
[Dependency] private readonly IGameTiming _gameTiming = default!;
|
||||||
[Dependency] private readonly RotateToFaceSystem _rotateToFaceSystem = default!;
|
[Dependency] private readonly RotateToFaceSystem _rotateToFaceSystem = default!;
|
||||||
|
[Dependency] private readonly VisibilitySystem _visibilitySystem = default!;
|
||||||
|
|
||||||
private static readonly TimeSpan PointDelay = TimeSpan.FromSeconds(0.5f);
|
private static readonly TimeSpan PointDelay = TimeSpan.FromSeconds(0.5f);
|
||||||
|
|
||||||
@@ -127,8 +128,9 @@ namespace Content.Server.Pointing.EntitySystems
|
|||||||
var layer = (int) VisibilityFlags.Normal;
|
var layer = (int) VisibilityFlags.Normal;
|
||||||
if (TryComp(player, out VisibilityComponent? playerVisibility))
|
if (TryComp(player, out VisibilityComponent? playerVisibility))
|
||||||
{
|
{
|
||||||
var arrowVisibility = arrow.EnsureComponent<VisibilityComponent>();
|
var arrowVisibility = EntityManager.EnsureComponent<VisibilityComponent>(arrow);
|
||||||
layer = arrowVisibility.Layer = playerVisibility.Layer;
|
layer = playerVisibility.Layer;
|
||||||
|
_visibilitySystem.SetLayer(arrowVisibility, layer);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get players that are in range and whose visibility layer matches the arrow's.
|
// Get players that are in range and whose visibility layer matches the arrow's.
|
||||||
|
|||||||
Reference in New Issue
Block a user