Skip to content

Commit b766dca

Browse files
committed
save work
1 parent f6f3ae5 commit b766dca

File tree

19 files changed

+747
-0
lines changed

19 files changed

+747
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
using System.Numerics;
2+
using Content.Shared.SS220.ForcefieldGenerator;
3+
using Robust.Client.GameObjects;
4+
using Robust.Client.Graphics;
5+
using Robust.Shared.Enums;
6+
using Robust.Shared.Prototypes;
7+
8+
namespace Content.Client.SS220.ForcefieldGenerator;
9+
10+
public sealed class ForcefieldOverlay : Overlay
11+
{
12+
private EntityManager _entity;
13+
private SharedTransformSystem _transform;
14+
private IPrototypeManager _prototype = default!;
15+
16+
public override OverlaySpace Space => OverlaySpace.WorldSpaceEntities;
17+
public override bool RequestScreenTexture => true;
18+
19+
private readonly ShaderInstance _shader;
20+
private readonly ShaderInstance _shader_unshaded;
21+
22+
public ForcefieldOverlay(EntityManager entMan, IPrototypeManager protoMan)
23+
{
24+
_entity = entMan;
25+
_transform = entMan.EntitySysManager.GetEntitySystem<SharedTransformSystem>();
26+
_prototype = protoMan;
27+
_shader_unshaded = _prototype.Index<ShaderPrototype>("unshaded").InstanceUnique();
28+
_shader = _prototype.Index<ShaderPrototype>("Stealth").InstanceUnique();
29+
30+
ZIndex = (int) Shared.DrawDepth.DrawDepth.Overdoors;
31+
}
32+
33+
protected override void Draw(in OverlayDrawArgs args)
34+
{
35+
if (ScreenTexture == null)
36+
return;
37+
38+
var handle = args.WorldHandle;
39+
var queryEnum = _entity.EntityQueryEnumerator<ForcefieldSS220Component>();
40+
41+
while (queryEnum.MoveNext(out var uid, out var fieldComp))
42+
{
43+
if (fieldComp.Generator is not { } generator || !_entity.EntityExists(generator))
44+
{
45+
continue;
46+
}
47+
48+
if (!_entity.TryGetComponent<ForcefieldGeneratorSS220Component>(generator, out var generatorComp))
49+
{
50+
continue;
51+
}
52+
53+
var boxToRender = new Box2(
54+
new Vector2(-generatorComp.FieldLength / 2, -generatorComp.FieldThickness / 2),
55+
new Vector2(generatorComp.FieldLength / 2, generatorComp.FieldThickness / 2)
56+
);
57+
58+
var (position, rotation) = _transform.GetWorldPositionRotation(uid);
59+
60+
var reference = args.Viewport.WorldToLocal(position);
61+
reference.X = -reference.X;
62+
63+
_shader.SetParameter("SCREEN_TEXTURE", ScreenTexture);
64+
_shader.SetParameter("reference", reference);
65+
var finalVisibility = Math.Clamp(generatorComp.FieldVisibility, -1f, 1f);
66+
_shader.SetParameter("visibility", finalVisibility);
67+
68+
handle.SetTransform(position, rotation);
69+
handle.UseShader(_shader);
70+
handle.DrawRect(boxToRender, generatorComp.FieldColor);
71+
}
72+
73+
handle.UseShader(null);
74+
handle.SetTransform(Matrix3.Identity);
75+
}
76+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// © SS220, An EULA/CLA with a hosting restriction, full text: https://raw.githubusercontent.com/SerbiaStrong-220/space-station-14/master/CLA.txt
2+
using Robust.Client.Graphics;
3+
using Robust.Shared.Prototypes;
4+
5+
namespace Content.Client.SS220.ForcefieldGenerator;
6+
7+
public sealed class ForcefieldOverlaySystem : EntitySystem
8+
{
9+
[Dependency] private readonly IOverlayManager _overlayManager = default!;
10+
[Dependency] private readonly IPrototypeManager _prototype = default!;
11+
12+
private ForcefieldOverlay _overlay = default!;
13+
14+
public override void Initialize()
15+
{
16+
base.Initialize();
17+
18+
_overlay = new(this.EntityManager, _prototype);
19+
_overlayManager.AddOverlay(_overlay);
20+
}
21+
22+
public override void Shutdown()
23+
{
24+
base.Shutdown();
25+
_overlayManager.RemoveOverlay(_overlay);
26+
}
27+
}

0 commit comments

Comments
 (0)