- tweak: Thermal tweaks. (#477)

This commit is contained in:
Aviu00
2024-07-22 14:24:00 +00:00
committed by GitHub
parent 05e7b356f4
commit a8ffd3280a
4 changed files with 30 additions and 3 deletions

View File

@@ -18,6 +18,7 @@ public sealed class ThermalVisionOverlay : Overlay
private readonly ContainerSystem _container; private readonly ContainerSystem _container;
private readonly TransformSystem _transform; private readonly TransformSystem _transform;
private readonly OccluderSystem _occluder; private readonly OccluderSystem _occluder;
private readonly PointLightSystem _pointLight;
public override OverlaySpace Space => OverlaySpace.WorldSpace; public override OverlaySpace Space => OverlaySpace.WorldSpace;
@@ -31,6 +32,7 @@ public sealed class ThermalVisionOverlay : Overlay
_container = _entity.System<ContainerSystem>(); _container = _entity.System<ContainerSystem>();
_transform = _entity.System<TransformSystem>(); _transform = _entity.System<TransformSystem>();
_occluder = _entity.System<OccluderSystem>(); _occluder = _entity.System<OccluderSystem>();
_pointLight = _entity.System<PointLightSystem>();
ZIndex = -1; ZIndex = -1;
} }
@@ -51,7 +53,8 @@ public sealed class ThermalVisionOverlay : Overlay
if (_pointLightEntity == default) if (_pointLightEntity == default)
{ {
_pointLightEntity = _entity.SpawnAttachedTo(null, transform.Coordinates); _pointLightEntity = _entity.SpawnAttachedTo(null, transform.Coordinates);
_entity.EnsureComponent<PointLightComponent>(_pointLightEntity); var pointLight = _entity.EnsureComponent<PointLightComponent>(_pointLightEntity);
_pointLight.SetRadius(_pointLightEntity, 3f, pointLight);
_transform.SetParent(_pointLightEntity, ent); _transform.SetParent(_pointLightEntity, ent);
} }
else else
@@ -59,6 +62,7 @@ public sealed class ThermalVisionOverlay : Overlay
var pointLightXForm = _entity.GetComponent<TransformComponent>(_pointLightEntity); var pointLightXForm = _entity.GetComponent<TransformComponent>(_pointLightEntity);
if (pointLightXForm.ParentUid != ent) if (pointLightXForm.ParentUid != ent)
_transform.SetParent(_pointLightEntity, pointLightXForm, ent, transform); _transform.SetParent(_pointLightEntity, pointLightXForm, ent, transform);
_transform.SetLocalPosition(_pointLightEntity, Vector2.Zero, pointLightXForm);
} }
if (HasOccluders(ent)) if (HasOccluders(ent))
@@ -73,6 +77,9 @@ public sealed class ThermalVisionOverlay : Overlay
var entities = _entity.EntityQueryEnumerator<BodyComponent, SpriteComponent, TransformComponent>(); var entities = _entity.EntityQueryEnumerator<BodyComponent, SpriteComponent, TransformComponent>();
while (entities.MoveNext(out var uid, out _, out var sprite, out var xform)) while (entities.MoveNext(out var uid, out _, out var sprite, out var xform))
{ {
if (!CanSee(uid))
continue;
var entity = uid; var entity = uid;
if (_container.TryGetOuterContainer(uid, xform, out var container)) if (_container.TryGetOuterContainer(uid, xform, out var container))
@@ -107,7 +114,7 @@ public sealed class ThermalVisionOverlay : Overlay
Angle eyeRot) Angle eyeRot)
{ {
var (uid, sprite, xform) = ent; var (uid, sprite, xform) = ent;
if (xform.MapID != map || HasOccluders(uid)) if (xform.MapID != map || HasOccluders(uid) || !CanSee(uid))
return; return;
var position = _transform.GetWorldPosition(xform); var position = _transform.GetWorldPosition(xform);
@@ -116,6 +123,11 @@ public sealed class ThermalVisionOverlay : Overlay
sprite.Render(handle, eyeRot, rotation, position: position); sprite.Render(handle, eyeRot, rotation, position: position);
} }
private bool CanSee(EntityUid ent)
{
return !_entity.HasComponent<ThermalBlockerComponent>(ent);
}
private bool HasOccluders(EntityUid ent) private bool HasOccluders(EntityUid ent)
{ {
var mapCoordinates = _transform.GetMapCoordinates(ent); var mapCoordinates = _transform.GetMapCoordinates(ent);

View File

@@ -1,6 +1,8 @@
using Content.Shared._White.Overlays; using Content.Shared._White.Overlays;
using Content.Shared.Actions; using Content.Shared.Actions;
using Robust.Shared.Audio.Systems; using Robust.Shared.Audio.Systems;
using Robust.Shared.Network;
using Robust.Shared.Player;
using Robust.Shared.Timing; using Robust.Shared.Timing;
namespace Content.Shared._Miracle.Systems; namespace Content.Shared._Miracle.Systems;
@@ -13,6 +15,7 @@ public abstract class SharedEnhancedVisionSystem<TComp, TTempComp, TEvent> : Ent
[Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedActionsSystem _actions = default!; [Dependency] private readonly SharedActionsSystem _actions = default!;
[Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly INetManager _net = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -52,7 +55,8 @@ public abstract class SharedEnhancedVisionSystem<TComp, TTempComp, TEvent> : Ent
component.IsActive = !component.IsActive; component.IsActive = !component.IsActive;
_audio.PlayPredicted(component.IsActive ? component.ActivateSound : component.DeactivateSound, uid, uid); if (_net.IsClient)
_audio.PlayEntity(component.IsActive ? component.ActivateSound : component.DeactivateSound, Filter.Local(), uid, false);
args.Handled = true; args.Handled = true;

View File

@@ -0,0 +1,8 @@
using Robust.Shared.GameStates;
namespace Content.Shared._White.Overlays;
[RegisterComponent, NetworkedComponent]
public sealed partial class ThermalBlockerComponent : Component
{
}

View File

@@ -155,6 +155,9 @@
name: power-cell-slot-component-slot-name-default name: power-cell-slot-component-slot-name-default
startingItem: PowerCellSmall startingItem: PowerCellSmall
disableEject: true disableEject: true
- type: ClothingGrantComponent
component:
- type: ThermalBlocker
- type: entity - type: entity
parent: ClothingOuterBase parent: ClothingOuterBase