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<ShowMindShieldIconsComponent>>(RefRelayInventoryEvent);
|
||||||
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<ShowSyndicateIconsComponent>>(RefRelayInventoryEvent);
|
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<ShowSyndicateIconsComponent>>(RefRelayInventoryEvent);
|
||||||
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<ShowCriminalRecordIconsComponent>>(RefRelayInventoryEvent);
|
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<ShowCriminalRecordIconsComponent>>(RefRelayInventoryEvent);
|
||||||
|
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<BlackAndWhiteOverlayComponent>>(RefRelayInventoryEvent);
|
||||||
|
|
||||||
SubscribeLocalEvent<InventoryComponent, GetVerbsEvent<EquipmentVerb>>(OnGetEquipmentVerbs);
|
SubscribeLocalEvent<InventoryComponent, GetVerbsEvent<EquipmentVerb>>(OnGetEquipmentVerbs);
|
||||||
SubscribeLocalEvent<InventoryComponent, GetVerbsEvent<InnateVerb>>(OnGetInnateVerbs);
|
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:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: ClothingEyesGlassesSecurity
|
- id: ClothingEyesGlassesNoir
|
||||||
prob: 0.3
|
|
||||||
- id: ClothingHeadHatDetGadget
|
- id: ClothingHeadHatDetGadget
|
||||||
- id: ClothingNeckTieDet
|
- id: ClothingNeckTieDet
|
||||||
- id: ClothingOuterVestDetective
|
- id: ClothingOuterVestDetective
|
||||||
|
|||||||
@@ -265,3 +265,24 @@
|
|||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Clothing/Eyes/Glasses/ninjavisor.rsi
|
sprite: Clothing/Eyes/Glasses/ninjavisor.rsi
|
||||||
- type: FlashImmunity
|
- 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