From 820069ba9cff365f64a383a78ebe987be879e475 Mon Sep 17 00:00:00 2001
From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Date: Thu, 16 Sep 2021 13:02:10 +1000
Subject: [PATCH] Fixes for grid rotation (#4562)
* Fixes gas overlays
* Fixes verbs
*Set noRot on a bunch of stuff
---
.../Atmos/Overlays/GasTileOverlay.cs | 12 ++---
.../Interactable/InteractionSystem.cs | 9 ++++
.../Interaction/SharedInteractionSystem.cs | 3 +-
Content.Shared/Verbs/SharedVerbSystem.cs | 23 +++++----
Resources/Maps/saltern.yml | 48 +++++++------------
.../Structures/Furniture/potted_plants.yml | 3 ++
.../Structures/Storage/Closets/base.yml | 3 ++
.../Structures/Storage/Crates/base.yml | 3 ++
8 files changed, 56 insertions(+), 48 deletions(-)
create mode 100644 Content.Client/Interactable/InteractionSystem.cs
diff --git a/Content.Client/Atmos/Overlays/GasTileOverlay.cs b/Content.Client/Atmos/Overlays/GasTileOverlay.cs
index 5c883d015d..c31b4cbfea 100644
--- a/Content.Client/Atmos/Overlays/GasTileOverlay.cs
+++ b/Content.Client/Atmos/Overlays/GasTileOverlay.cs
@@ -14,7 +14,6 @@ namespace Content.Client.Atmos.Overlays
[Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly IEyeManager _eyeManager = default!;
- [Dependency] private readonly IClyde _clyde = default!;
public override OverlaySpace Space => OverlaySpace.WorldSpaceBelowFOV;
@@ -30,24 +29,25 @@ namespace Content.Client.Atmos.Overlays
var drawHandle = args.WorldHandle;
var mapId = _eyeManager.CurrentMap;
- var eye = _eyeManager.CurrentEye;
-
- var worldBounds = Box2.CenteredAround(eye.Position.Position,
- _clyde.ScreenSize / (float) EyeManager.PixelsPerMeter * eye.Zoom);
+ var worldBounds = _eyeManager.GetWorldViewbounds();
foreach (var mapGrid in _mapManager.FindGridsIntersecting(mapId, worldBounds))
{
if (!_gasTileOverlaySystem.HasData(mapGrid.Index))
continue;
+ drawHandle.SetTransform(mapGrid.WorldMatrix);
+
foreach (var tile in mapGrid.GetTilesIntersecting(worldBounds))
{
foreach (var (texture, color) in _gasTileOverlaySystem.GetOverlays(mapGrid.Index, tile.GridIndices))
{
- drawHandle.DrawTexture(texture, mapGrid.LocalToWorld(new Vector2(tile.X, tile.Y)), color);
+ drawHandle.DrawTexture(texture, new Vector2(tile.X, tile.Y), color);
}
}
}
+
+ drawHandle.SetTransform(Matrix3.Identity);
}
}
}
diff --git a/Content.Client/Interactable/InteractionSystem.cs b/Content.Client/Interactable/InteractionSystem.cs
new file mode 100644
index 0000000000..bba19b092d
--- /dev/null
+++ b/Content.Client/Interactable/InteractionSystem.cs
@@ -0,0 +1,9 @@
+using Content.Shared.Interaction;
+
+namespace Content.Client.Interactable
+{
+ public sealed class InteractionSystem : SharedInteractionSystem
+ {
+
+ }
+}
diff --git a/Content.Shared/Interaction/SharedInteractionSystem.cs b/Content.Shared/Interaction/SharedInteractionSystem.cs
index 37721e7791..6e0e1f1185 100644
--- a/Content.Shared/Interaction/SharedInteractionSystem.cs
+++ b/Content.Shared/Interaction/SharedInteractionSystem.cs
@@ -18,7 +18,7 @@ namespace Content.Shared.Interaction
/// Governs interactions during clicking on entities
///
[UsedImplicitly]
- public class SharedInteractionSystem : EntitySystem
+ public abstract class SharedInteractionSystem : EntitySystem
{
[Dependency] private readonly SharedBroadphaseSystem _sharedBroadphaseSystem = default!;
@@ -131,6 +131,7 @@ namespace Content.Shared.Interaction
if (rayResults.Count == 0) return true;
+ // TODO: Wot? This should just be in the predicate.
if (!ignoreInsideBlocker) return false;
foreach (var result in rayResults)
diff --git a/Content.Shared/Verbs/SharedVerbSystem.cs b/Content.Shared/Verbs/SharedVerbSystem.cs
index c7628da9a6..07ac5b317e 100644
--- a/Content.Shared/Verbs/SharedVerbSystem.cs
+++ b/Content.Shared/Verbs/SharedVerbSystem.cs
@@ -1,7 +1,7 @@
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
-using Content.Shared.Interaction.Helpers;
+using Content.Shared.Interaction;
using Content.Shared.Physics;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
@@ -12,6 +12,8 @@ namespace Content.Shared.Verbs
{
public class SharedVerbSystem : EntitySystem
{
+ [Dependency] private readonly IEntityLookup _lookup = default!;
+
///
/// Get all of the entities relevant for the contextmenu
///
@@ -25,17 +27,20 @@ namespace Content.Shared.Verbs
contextEntities = null;
var length = buffer ? 1.0f: 0.5f;
- var entities = IoCManager.Resolve().
- GetEntitiesIntersecting(targetPos.MapId, Box2.CenteredAround(targetPos.Position, (length, length))).ToList();
+ var entities = _lookup.GetEntitiesIntersecting(
+ targetPos.MapId,
+ Box2.CenteredAround(targetPos.Position, (length, length)))
+ .ToList();
- if (entities.Count == 0)
- {
- return false;
- }
+ if (entities.Count == 0) return false;
+
+ // TODO: Can probably do a faster distance check with EntityCoordinates given we don't need to get map stuff.
// Check if we have LOS to the clicked-location, otherwise no popup.
- var vectorDiff = player.Transform.MapPosition.Position - targetPos.Position;
+ var playerPos = player.Transform.MapPosition;
+ var vectorDiff = playerPos.Position - targetPos.Position;
var distance = vectorDiff.Length + 0.01f;
+
bool Ignored(IEntity entity)
{
return entities.Contains(entity) ||
@@ -48,7 +53,7 @@ namespace Content.Shared.Verbs
? CollisionGroup.Opaque
: CollisionGroup.None;
- var result = player.InRangeUnobstructed(targetPos, distance, mask, Ignored);
+ var result = Get().InRangeUnobstructed(playerPos, targetPos, distance, mask, Ignored);
if (!result)
{
diff --git a/Resources/Maps/saltern.yml b/Resources/Maps/saltern.yml
index 491e1a2580..4ef65f188b 100644
--- a/Resources/Maps/saltern.yml
+++ b/Resources/Maps/saltern.yml
@@ -6984,8 +6984,7 @@ entities:
- uid: 760
type: ClosetEmergencyFilledRandom
components:
- - rot: 4.371139006309477E-08 rad
- pos: 5.5,-21.5
+ - pos: 5.5,-21.5
parent: 853
type: Transform
- isPlaceable: False
@@ -7006,8 +7005,7 @@ entities:
- uid: 762
type: ClosetEmergencyFilledRandom
components:
- - rot: 4.371139006309477E-08 rad
- pos: -23.5,11.5
+ - pos: -23.5,11.5
parent: 853
type: Transform
- isPlaceable: False
@@ -7019,8 +7017,7 @@ entities:
- uid: 763
type: ClosetEmergencyFilledRandom
components:
- - rot: 4.371139006309477E-08 rad
- pos: 24.5,13.5
+ - pos: 24.5,13.5
parent: 853
type: Transform
- isPlaceable: False
@@ -7052,8 +7049,7 @@ entities:
- uid: 766
type: ClosetEmergencyFilledRandom
components:
- - rot: 4.371139006309477E-08 rad
- pos: -2.5,30.5
+ - pos: -2.5,30.5
parent: 853
type: Transform
- isPlaceable: False
@@ -7065,8 +7061,7 @@ entities:
- uid: 767
type: ClosetEmergencyFilledRandom
components:
- - rot: 4.371139006309477E-08 rad
- pos: 9.5,30.5
+ - pos: 9.5,30.5
parent: 853
type: Transform
- isPlaceable: False
@@ -7188,8 +7183,7 @@ entities:
- uid: 778
type: ClosetEmergencyFilledRandom
components:
- - rot: 4.371139006309477E-08 rad
- pos: 12.5,21.5
+ - pos: 12.5,21.5
parent: 853
type: Transform
- isPlaceable: False
@@ -7214,8 +7208,7 @@ entities:
- uid: 780
type: ClosetEmergencyFilledRandom
components:
- - rot: 4.371139006309477E-08 rad
- pos: 43.5,9.5
+ - pos: 43.5,9.5
parent: 853
type: Transform
- isPlaceable: False
@@ -7253,8 +7246,7 @@ entities:
- uid: 783
type: ClosetEmergencyFilledRandom
components:
- - rot: 4.371139006309477E-08 rad
- pos: 8.5,-18.5
+ - pos: 8.5,-18.5
parent: 853
type: Transform
- isPlaceable: False
@@ -7279,8 +7271,7 @@ entities:
- uid: 785
type: ClosetEmergencyFilledRandom
components:
- - rot: 4.371139006309477E-08 rad
- pos: -15.5,-17.5
+ - pos: -15.5,-17.5
parent: 853
type: Transform
- isPlaceable: False
@@ -7292,8 +7283,7 @@ entities:
- uid: 786
type: ClosetEmergencyFilledRandom
components:
- - rot: 4.371139006309477E-08 rad
- pos: -7.5,-25.5
+ - pos: -7.5,-25.5
parent: 853
type: Transform
- isPlaceable: False
@@ -7305,8 +7295,7 @@ entities:
- uid: 787
type: ClosetEmergencyFilledRandom
components:
- - rot: 4.371139006309477E-08 rad
- pos: 26.5,12.5
+ - pos: 26.5,12.5
parent: 853
type: Transform
- isPlaceable: False
@@ -7318,8 +7307,7 @@ entities:
- uid: 788
type: ClosetEmergencyFilledRandom
components:
- - rot: 4.371139006309477E-08 rad
- pos: 23.5,1.5
+ - pos: 23.5,1.5
parent: 853
type: Transform
- isPlaceable: False
@@ -7344,8 +7332,7 @@ entities:
- uid: 790
type: ClosetEmergencyFilledRandom
components:
- - rot: 4.371139006309477E-08 rad
- pos: -11.5,-10.5
+ - pos: -11.5,-10.5
parent: 853
type: Transform
- isPlaceable: False
@@ -7357,8 +7344,7 @@ entities:
- uid: 791
type: ClosetEmergencyFilledRandom
components:
- - rot: 4.371139006309477E-08 rad
- pos: -37.5,-7.5
+ - pos: -37.5,-7.5
parent: 853
type: Transform
- isPlaceable: False
@@ -7370,8 +7356,7 @@ entities:
- uid: 792
type: ClosetEmergencyFilledRandom
components:
- - rot: 4.371139006309477E-08 rad
- pos: -39.5,2.5
+ - pos: -39.5,2.5
parent: 853
type: Transform
- isPlaceable: False
@@ -7383,8 +7368,7 @@ entities:
- uid: 793
type: ClosetEmergencyFilledRandom
components:
- - rot: 4.371139006309477E-08 rad
- pos: -34.5,10.5
+ - pos: -34.5,10.5
parent: 853
type: Transform
- isPlaceable: False
diff --git a/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml b/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml
index b7ed907cf1..c01d4b12dd 100644
--- a/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml
+++ b/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml
@@ -3,6 +3,8 @@
parent: BaseStructureDynamic
abstract: true
components:
+ - type: Transform
+ noRot: true
- type: InteractionOutline
- type: Physics
bodyType: Dynamic
@@ -19,6 +21,7 @@
- SmallImpassable
- VaultImpassable
- type: Sprite
+ noRot: true
sprite: Structures/Furniture/potted_plants.rsi
- type: PottedPlantHide
- type: SecretStash
diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/base.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/base.yml
index 6e28b90d7e..a5d0b9c86c 100644
--- a/Resources/Prototypes/Entities/Structures/Storage/Closets/base.yml
+++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/base.yml
@@ -4,7 +4,10 @@
name: closet
description: A standard-issue Nanotrasen storage unit.
components:
+ - type: Transform
+ noRot: true
- type: Sprite
+ noRot: true
netsync: false
sprite: Structures/Storage/closet.rsi
layers:
diff --git a/Resources/Prototypes/Entities/Structures/Storage/Crates/base.yml b/Resources/Prototypes/Entities/Structures/Storage/Crates/base.yml
index 9bfc9ede80..e1dbf08572 100644
--- a/Resources/Prototypes/Entities/Structures/Storage/Crates/base.yml
+++ b/Resources/Prototypes/Entities/Structures/Storage/Crates/base.yml
@@ -5,7 +5,10 @@
name: crate
description: A large container for items.
components:
+ - type: Transform
+ noRot: true
- type: Sprite
+ noRot: true
netsync: false
sprite: Structures/Storage/Crates/generic.rsi
layers: