47
Content.Client/Overlays/BlackAndWhiteOverlay.cs
Normal file
47
Content.Client/Overlays/BlackAndWhiteOverlay.cs
Normal file
@@ -0,0 +1,47 @@
|
||||
using Robust.Client.Graphics;
|
||||
using Robust.Client.Player;
|
||||
using Robust.Shared.Enums;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Client.Overlays;
|
||||
|
||||
public sealed partial class BlackAndWhiteOverlay : Overlay
|
||||
{
|
||||
[Dependency] private readonly IEntityManager _entityManager = default!;
|
||||
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||
[Dependency] private readonly IPlayerManager _playerManager = default!;
|
||||
|
||||
public override OverlaySpace Space => OverlaySpace.WorldSpace;
|
||||
public override bool RequestScreenTexture => true;
|
||||
private readonly ShaderInstance _greyscaleShader;
|
||||
|
||||
public BlackAndWhiteOverlay()
|
||||
{
|
||||
IoCManager.InjectDependencies(this);
|
||||
_greyscaleShader = _prototypeManager.Index<ShaderPrototype>("GreyscaleFullscreen").InstanceUnique();
|
||||
ZIndex = 10; // draw this over the DamageOverlay, RainbowOverlay etc.
|
||||
}
|
||||
|
||||
protected override bool BeforeDraw(in OverlayDrawArgs args)
|
||||
{
|
||||
if (!_entityManager.TryGetComponent(_playerManager.LocalEntity, out EyeComponent? eyeComp))
|
||||
return false;
|
||||
|
||||
if (args.Viewport.Eye != eyeComp.Eye)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void Draw(in OverlayDrawArgs args)
|
||||
{
|
||||
if (ScreenTexture == null)
|
||||
return;
|
||||
|
||||
var handle = args.WorldHandle;
|
||||
_greyscaleShader.SetParameter("SCREEN_TEXTURE", ScreenTexture);
|
||||
handle.UseShader(_greyscaleShader);
|
||||
handle.DrawRect(args.WorldBounds, Color.White);
|
||||
handle.UseShader(null);
|
||||
}
|
||||
}
|
||||
34
Content.Client/Overlays/BlackAndWhiteOverlaySystem.cs
Normal file
34
Content.Client/Overlays/BlackAndWhiteOverlaySystem.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
using Content.Shared.Inventory.Events;
|
||||
using Content.Shared.Overlays;
|
||||
using Robust.Client.Graphics;
|
||||
using Robust.Client.Player;
|
||||
|
||||
namespace Content.Client.Overlays;
|
||||
|
||||
public sealed partial class BlackAndWhiteOverlaySystem : EquipmentHudSystem<BlackAndWhiteOverlayComponent>
|
||||
{
|
||||
[Dependency] private readonly IOverlayManager _overlayMan = default!;
|
||||
|
||||
private BlackAndWhiteOverlay _overlay = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
_overlay = new();
|
||||
}
|
||||
|
||||
protected override void UpdateInternal(RefreshEquipmentHudEvent<BlackAndWhiteOverlayComponent> component)
|
||||
{
|
||||
base.UpdateInternal(component);
|
||||
|
||||
_overlayMan.AddOverlay(_overlay);
|
||||
}
|
||||
|
||||
protected override void DeactivateInternal()
|
||||
{
|
||||
base.DeactivateInternal();
|
||||
|
||||
_overlayMan.RemoveOverlay(_overlay);
|
||||
}
|
||||
}
|
||||
@@ -76,6 +76,7 @@ public partial class InventorySystem
|
||||
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<ShowMindShieldIconsComponent>>(RefRelayInventoryEvent);
|
||||
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<ShowSyndicateIconsComponent>>(RefRelayInventoryEvent);
|
||||
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<ShowCriminalRecordIconsComponent>>(RefRelayInventoryEvent);
|
||||
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<BlackAndWhiteOverlayComponent>>(RefRelayInventoryEvent);
|
||||
|
||||
SubscribeLocalEvent<InventoryComponent, GetVerbsEvent<EquipmentVerb>>(OnGetEquipmentVerbs);
|
||||
SubscribeLocalEvent<InventoryComponent, GetVerbsEvent<InnateVerb>>(OnGetInnateVerbs);
|
||||
|
||||
10
Content.Shared/Overlays/BlackAndWhiteOverlayComponent.cs
Normal file
10
Content.Shared/Overlays/BlackAndWhiteOverlayComponent.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
using Robust.Shared.GameStates;
|
||||
|
||||
namespace Content.Shared.Overlays;
|
||||
|
||||
/// <summary>
|
||||
/// Makes the entity see everything in black and white by adding an overlay.
|
||||
/// When added to a clothing item it will also grant the wearer the same overlay.
|
||||
/// </summary>
|
||||
[RegisterComponent, NetworkedComponent]
|
||||
public sealed partial class BlackAndWhiteOverlayComponent : Component;
|
||||
@@ -120,8 +120,7 @@
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: ClothingEyesGlassesSecurity
|
||||
prob: 0.3
|
||||
- id: ClothingEyesGlassesNoir
|
||||
- id: ClothingHeadHatDetGadget
|
||||
- id: ClothingNeckTieDet
|
||||
- id: ClothingOuterVestDetective
|
||||
|
||||
@@ -265,3 +265,24 @@
|
||||
- type: Clothing
|
||||
sprite: Clothing/Eyes/Glasses/ninjavisor.rsi
|
||||
- type: FlashImmunity
|
||||
|
||||
- type: entity
|
||||
parent: ClothingEyesBase
|
||||
id: ClothingEyesGlassesNoir
|
||||
name: noir-tech glasses
|
||||
description: A pair of glasses that simulate what the world looked like before the invention of color.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Clothing/Eyes/Glasses/noir.rsi
|
||||
- type: Clothing
|
||||
sprite: Clothing/Eyes/Glasses/sunglasses.rsi
|
||||
- type: IdentityBlocker
|
||||
coverage: EYES
|
||||
- type: FlashImmunity
|
||||
- type: EyeProtection
|
||||
protectionTime: 5
|
||||
- type: BlackAndWhiteOverlay
|
||||
- type: Tag
|
||||
tags:
|
||||
- HamsterWearable
|
||||
- WhitelistChameleon
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 321 B |
BIN
Resources/Textures/Clothing/Eyes/Glasses/noir.rsi/icon.png
Normal file
BIN
Resources/Textures/Clothing/Eyes/Glasses/noir.rsi/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 279 B |
18
Resources/Textures/Clothing/Eyes/Glasses/noir.rsi/meta.json
Normal file
18
Resources/Textures/Clothing/Eyes/Glasses/noir.rsi/meta.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-NC-SA-3.0",
|
||||
"copyright": "taken from goonstation at commit https://github.com/goonstation/goonstation/commit/9affe47cd1b192f6d1900a64a5b5a07a54251e37",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "equipped-EYES",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "icon"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user