diff --git a/Content.Client/GameObjects/Components/InteractionOutlineComponent.cs b/Content.Client/GameObjects/Components/InteractionOutlineComponent.cs
new file mode 100644
index 0000000000..6852824e30
--- /dev/null
+++ b/Content.Client/GameObjects/Components/InteractionOutlineComponent.cs
@@ -0,0 +1,59 @@
+using Robust.Client.Graphics.Shaders;
+using Robust.Client.Interfaces.GameObjects.Components;
+using Robust.Shared.GameObjects;
+using Robust.Shared.IoC;
+using Robust.Shared.Prototypes;
+
+namespace Content.Client.GameObjects.Components
+{
+ [RegisterComponent]
+ public class InteractionOutlineComponent : Component
+ {
+ private const string ShaderInRange = "selection_outline_inrange";
+ private const string ShaderOutOfRange = "selection_outline";
+
+ public override string Name => "InteractionOutline";
+
+#pragma warning disable 649
+ [Dependency] private readonly IPrototypeManager _prototypeManager;
+#pragma warning restore 649
+
+ private ShaderInstance _selectionShaderInstance;
+ private ShaderInstance _selectionShaderInRangeInstance;
+
+ ///
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ _selectionShaderInRangeInstance = _prototypeManager.Index(ShaderInRange).Instance();
+ _selectionShaderInstance = _prototypeManager.Index(ShaderOutOfRange).Instance();
+ }
+
+ public void OnMouseEnter(bool inInteractionRange)
+ {
+ if (Owner.TryGetComponent(out ISpriteComponent sprite))
+ {
+ sprite.PostShader = inInteractionRange ? _selectionShaderInRangeInstance : _selectionShaderInstance;
+ sprite.RenderOrder = Owner.EntityManager.CurrentTick.Value;
+ }
+ }
+
+ public void OnMouseLeave()
+ {
+ if (Owner.TryGetComponent(out ISpriteComponent sprite))
+ {
+ sprite.PostShader = null;
+ sprite.RenderOrder = 0;
+ }
+ }
+
+ public void UpdateInRange(bool inInteractionRange)
+ {
+ if (Owner.TryGetComponent(out ISpriteComponent sprite))
+ {
+ sprite.PostShader = inInteractionRange ? _selectionShaderInRangeInstance : _selectionShaderInstance;
+ }
+ }
+ }
+}
diff --git a/Content.Client/State/GameScreen.cs b/Content.Client/State/GameScreen.cs
index 791af667ad..2ddd2a670c 100644
--- a/Content.Client/State/GameScreen.cs
+++ b/Content.Client/State/GameScreen.cs
@@ -1,5 +1,8 @@
using System.Collections.Generic;
using System.Linq;
+using Content.Client.GameObjects.Components;
+using Content.Client.GameObjects.EntitySystems;
+using Content.Shared.GameObjects;
using Robust.Client.GameObjects.EntitySystems;
using Robust.Client.Interfaces.GameObjects;
using Robust.Client.Interfaces.GameObjects.Components;
@@ -63,21 +66,37 @@ namespace Content.Client.State
var mousePosWorld = eyeManager.ScreenToWorld(new ScreenCoordinates(inputManager.MouseScreenPosition));
var entityToClick = GetEntityUnderPosition(mousePosWorld);
+
+ var inRange = false;
+ if (playerManager.LocalPlayer.ControlledEntity != null && entityToClick != null)
+ {
+ var playerPos = playerManager.LocalPlayer.ControlledEntity.Transform.GridPosition;
+ var entityPos = entityToClick.Transform.GridPosition;
+ var distance = playerPos.Distance(_mapManager, entityPos);
+ inRange = distance <= VerbUtility.InteractionRange;
+ }
+
+ InteractionOutlineComponent outline;
if (entityToClick == lastHoveredEntity)
{
+ if (entityToClick != null && entityToClick.TryGetComponent(out outline))
+ {
+ outline.UpdateInRange(inRange);
+ }
return;
}
- if (lastHoveredEntity != null && !lastHoveredEntity.Deleted)
+ if (lastHoveredEntity != null && !lastHoveredEntity.Deleted &&
+ lastHoveredEntity.TryGetComponent(out outline))
{
- lastHoveredEntity.GetComponent().OnMouseLeave();
+ outline.OnMouseLeave();
}
lastHoveredEntity = entityToClick;
- if (lastHoveredEntity != null)
+ if (lastHoveredEntity != null && lastHoveredEntity.TryGetComponent(out outline))
{
- lastHoveredEntity.GetComponent().OnMouseEnter();
+ outline.OnMouseEnter(inRange);
}
}
@@ -91,7 +110,8 @@ namespace Content.Client.State
{
// Find all the entities intersecting our click
var worldCoords = coordinates.ToWorld(_mapManager);
- var entities = _entityManager.GetEntitiesIntersecting(_mapManager.GetGrid(coordinates.GridID).ParentMapId, worldCoords.Position);
+ var entities = _entityManager.GetEntitiesIntersecting(_mapManager.GetGrid(coordinates.GridID).ParentMapId,
+ worldCoords.Position);
// Check the entities against whether or not we can click them
var foundEntities = new List<(IEntity clicked, int drawDepth)>();
@@ -123,6 +143,7 @@ namespace Content.Client.State
{
return val;
}
+
var transx = x.clicked.Transform;
var transy = y.clicked.Transform;
return transx.GridPosition.Y.CompareTo(transy.GridPosition.Y);
@@ -142,7 +163,8 @@ namespace Content.Client.State
var mousePosWorld = eyeManager.ScreenToWorld(args.PointerLocation);
var entityToClick = GetEntityUnderPosition(mousePosWorld);
- var message = new FullInputCmdMessage(timing.CurTick, funcId, args.State, mousePosWorld, args.PointerLocation, entityToClick?.Uid ?? EntityUid.Invalid);
+ var message = new FullInputCmdMessage(timing.CurTick, funcId, args.State, mousePosWorld,
+ args.PointerLocation, entityToClick?.Uid ?? EntityUid.Invalid);
// client side command handlers will always be sent the local player session.
var session = playerManager.LocalPlayer.Session;
diff --git a/Content.Server/EntryPoint.cs b/Content.Server/EntryPoint.cs
index 3b1cbc7395..0530fe8102 100644
--- a/Content.Server/EntryPoint.cs
+++ b/Content.Server/EntryPoint.cs
@@ -35,6 +35,9 @@ namespace Content.Server
"LowWall",
"Window",
"CharacterInfo",
+ "InteractionOutline",
+ "MeleeWeaponArcAnimation",
+ "AnimationsTest",
};
foreach (var ignoreName in registerIgnore)
@@ -49,6 +52,7 @@ namespace Content.Server
var cast = (ServerModuleTestingCallbacks) TestingCallbacks;
cast.ServerBeforeIoC?.Invoke();
}
+
IoCManager.BuildGraph();
_gameTicker = IoCManager.Resolve();
diff --git a/Resources/Prototypes/1_Temperature.yml b/Resources/Prototypes/1_Temperature.yml
index 700550c5b6..41cb3cfaa6 100644
--- a/Resources/Prototypes/1_Temperature.yml
+++ b/Resources/Prototypes/1_Temperature.yml
@@ -3,6 +3,7 @@
name: Thing that heats up on its own and dies
components:
- type: Clickable
+ - type: InteractionOutline
- type: Sprite
texture: Objects/Misc/shoes.png
diff --git a/Resources/Prototypes/Entities/Janitor.yml b/Resources/Prototypes/Entities/Janitor.yml
index f6f6297e4d..b10acbc4a6 100644
--- a/Resources/Prototypes/Entities/Janitor.yml
+++ b/Resources/Prototypes/Entities/Janitor.yml
@@ -25,6 +25,7 @@
- type: Icon
texture: Objects/Janitorial/mopbucket.png
- type: Clickable
+ - type: InteractionOutline
- type: Solution
maxVol: 500
caps: 3
diff --git a/Resources/Prototypes/Entities/Research.yml b/Resources/Prototypes/Entities/Research.yml
index ec7f54a851..8ba78e7d90 100644
--- a/Resources/Prototypes/Entities/Research.yml
+++ b/Resources/Prototypes/Entities/Research.yml
@@ -9,6 +9,7 @@
sprite: Buildings/research.rsi
state: server
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
- type: SnapGrid
offset: Center
@@ -18,7 +19,7 @@
drawtype: Both
load: 200
priority: Low
-
+
- type: entity
id: baseResearchAndDevelopmentPointSource
name: "Base R&D Point Source"
@@ -34,6 +35,7 @@
sprite: Buildings/research.rsi
state: tdoppler
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
shapes:
- !type:PhysShapeAabb
diff --git a/Resources/Prototypes/Entities/buildings/airlock_base.yml b/Resources/Prototypes/Entities/buildings/airlock_base.yml
index d6a44f8977..01a4770024 100644
--- a/Resources/Prototypes/Entities/buildings/airlock_base.yml
+++ b/Resources/Prototypes/Entities/buildings/airlock_base.yml
@@ -4,6 +4,7 @@
description: It opens, it closes, and maybe crushes you.
components:
- type: Clickable
+ - type: InteractionOutline
- type: Sprite
netsync: false
diff --git a/Resources/Prototypes/Entities/buildings/asteroid.yml b/Resources/Prototypes/Entities/buildings/asteroid.yml
index 1df3da08fb..5f6c225b1f 100644
--- a/Resources/Prototypes/Entities/buildings/asteroid.yml
+++ b/Resources/Prototypes/Entities/buildings/asteroid.yml
@@ -4,6 +4,7 @@
components:
- type: AsteroidRock
- type: Clickable
+ - type: InteractionOutline
- type: Sprite
sprite: Buildings/Walls/asteroid_rock.rsi
state: 0
diff --git a/Resources/Prototypes/Entities/buildings/catwalk.yml b/Resources/Prototypes/Entities/buildings/catwalk.yml
index b7e0a650a1..b8394c43f7 100644
--- a/Resources/Prototypes/Entities/buildings/catwalk.yml
+++ b/Resources/Prototypes/Entities/buildings/catwalk.yml
@@ -3,6 +3,7 @@
name: Catwalk
components:
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
- type: Sprite
netsync: false
diff --git a/Resources/Prototypes/Entities/buildings/computers.yml b/Resources/Prototypes/Entities/buildings/computers.yml
index dffe961ec5..44b8a4ed72 100644
--- a/Resources/Prototypes/Entities/buildings/computers.yml
+++ b/Resources/Prototypes/Entities/buildings/computers.yml
@@ -6,6 +6,7 @@
mass: 25
Anchored: true
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
IsScrapingFloor: true
shapes:
diff --git a/Resources/Prototypes/Entities/buildings/fuel_tank.yml b/Resources/Prototypes/Entities/buildings/fuel_tank.yml
index 9a237f35ff..061d411b79 100644
--- a/Resources/Prototypes/Entities/buildings/fuel_tank.yml
+++ b/Resources/Prototypes/Entities/buildings/fuel_tank.yml
@@ -10,6 +10,7 @@
texture: Buildings/weldtank.png
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
shapes:
- !type:PhysShapeAabb
diff --git a/Resources/Prototypes/Entities/buildings/furniture.yml b/Resources/Prototypes/Entities/buildings/furniture.yml
index 1415d4f688..331350adbb 100644
--- a/Resources/Prototypes/Entities/buildings/furniture.yml
+++ b/Resources/Prototypes/Entities/buildings/furniture.yml
@@ -3,6 +3,7 @@
id: stool
components:
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
- type: Sprite
sprite: Buildings/furniture.rsi
@@ -18,6 +19,7 @@
components:
- type: Rotatable
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
- type: Sprite
sprite: Buildings/furniture.rsi
@@ -32,6 +34,7 @@
components:
- type: Rotatable
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
- type: Sprite
sprite: Buildings/furniture.rsi
@@ -45,6 +48,7 @@
id: chair
components:
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
- type: Sprite
sprite: Buildings/furniture.rsi
diff --git a/Resources/Prototypes/Entities/buildings/girder.yml b/Resources/Prototypes/Entities/buildings/girder.yml
index f1e8945ad3..025f61f544 100644
--- a/Resources/Prototypes/Entities/buildings/girder.yml
+++ b/Resources/Prototypes/Entities/buildings/girder.yml
@@ -3,6 +3,7 @@
name: Girder
components:
- type: Clickable
+ - type: InteractionOutline
- type: Sprite
texture: Buildings/wall_girder.png
- type: Icon
@@ -21,4 +22,4 @@
placement:
snap:
- - Wall
\ No newline at end of file
+ - Wall
diff --git a/Resources/Prototypes/Entities/buildings/instruments.yml b/Resources/Prototypes/Entities/buildings/instruments.yml
index 667c56a3ee..33af1622f1 100644
--- a/Resources/Prototypes/Entities/buildings/instruments.yml
+++ b/Resources/Prototypes/Entities/buildings/instruments.yml
@@ -6,6 +6,7 @@
handheld: false
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
shapes:
diff --git a/Resources/Prototypes/Entities/buildings/lathe.yml b/Resources/Prototypes/Entities/buildings/lathe.yml
index 5b8d393a1d..9751819108 100644
--- a/Resources/Prototypes/Entities/buildings/lathe.yml
+++ b/Resources/Prototypes/Entities/buildings/lathe.yml
@@ -3,6 +3,7 @@
name: "Lathe"
components:
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
- type: SnapGrid
offset: Center
diff --git a/Resources/Prototypes/Entities/buildings/lighting.yml b/Resources/Prototypes/Entities/buildings/lighting.yml
index 0b1aab7107..866cfbee5a 100644
--- a/Resources/Prototypes/Entities/buildings/lighting.yml
+++ b/Resources/Prototypes/Entities/buildings/lighting.yml
@@ -3,6 +3,7 @@
name: "Unpowered Light"
components:
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
- type: Sound
- type: Sprite
@@ -29,6 +30,7 @@
parent: wall_light
components:
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
- type: Sprite
sprite: Buildings/light_tube.rsi
@@ -53,6 +55,7 @@
parent: wall_light
components:
- type: Clickable
+ - type: InteractionOutline
- type: Sprite
sprite: Buildings/light_small.rsi
state: off
diff --git a/Resources/Prototypes/Entities/buildings/low_wall.yml b/Resources/Prototypes/Entities/buildings/low_wall.yml
index f0d3acbf2d..df3bd88594 100644
--- a/Resources/Prototypes/Entities/buildings/low_wall.yml
+++ b/Resources/Prototypes/Entities/buildings/low_wall.yml
@@ -4,6 +4,7 @@
description: Goes up to about your waist.
components:
- type: Clickable
+ - type: InteractionOutline
- type: Sprite
netsync: false
color: "#71797a"
diff --git a/Resources/Prototypes/Entities/buildings/medical_scanner.yml b/Resources/Prototypes/Entities/buildings/medical_scanner.yml
index 5f83365374..f71d7a4bc2 100644
--- a/Resources/Prototypes/Entities/buildings/medical_scanner.yml
+++ b/Resources/Prototypes/Entities/buildings/medical_scanner.yml
@@ -17,6 +17,7 @@
state: scanner_open
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
shapes:
- !type:PhysShapeAabb
diff --git a/Resources/Prototypes/Entities/buildings/mirror.yml b/Resources/Prototypes/Entities/buildings/mirror.yml
index ebf3bad5b2..c0a09ea9be 100644
--- a/Resources/Prototypes/Entities/buildings/mirror.yml
+++ b/Resources/Prototypes/Entities/buildings/mirror.yml
@@ -13,6 +13,7 @@
- !type:PhysShapeAabb
layer: 32
- type: Clickable
+ - type: InteractionOutline
- type: Physics
mass: 25
Anchored: true
diff --git a/Resources/Prototypes/Entities/buildings/power.yml b/Resources/Prototypes/Entities/buildings/power.yml
index 62cb47330c..07ad94665e 100644
--- a/Resources/Prototypes/Entities/buildings/power.yml
+++ b/Resources/Prototypes/Entities/buildings/power.yml
@@ -4,6 +4,7 @@
description: Transfers power, avoid letting things come down it
components:
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
- type: Sprite
netsync: false
@@ -40,6 +41,7 @@
description: A portal to hell which summons power from the nether
components:
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
shapes:
- !type:PhysShapeAabb
@@ -57,6 +59,7 @@
description: Supplies power directly to nearby objects
components:
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
shapes:
- !type:PhysShapeAabb
@@ -113,6 +116,7 @@
description: Stores power in its super-magnetic cells
components:
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
shapes:
- !type:PhysShapeAabb
@@ -152,6 +156,7 @@
description: A monstrosity that does nothing but suck up power from the nearby wires
components:
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
shapes:
- !type:PhysShapeAabb
@@ -172,6 +177,7 @@
description: A terrifying monstrosity that sucks up power from the wireless transmitters, Tesla would be proud
components:
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
shapes:
- !type:PhysShapeAabb
diff --git a/Resources/Prototypes/Entities/buildings/reagent_dispenser_base.yml b/Resources/Prototypes/Entities/buildings/reagent_dispenser_base.yml
index 6b7f178e9b..31e1ee5d2d 100644
--- a/Resources/Prototypes/Entities/buildings/reagent_dispenser_base.yml
+++ b/Resources/Prototypes/Entities/buildings/reagent_dispenser_base.yml
@@ -3,6 +3,7 @@
id: reagent_dispenser_base
components:
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
shapes:
- !type:PhysShapeAabb
diff --git a/Resources/Prototypes/Entities/buildings/storage/closet_base.yml b/Resources/Prototypes/Entities/buildings/storage/closet_base.yml
index 383b167525..50da94b9db 100644
--- a/Resources/Prototypes/Entities/buildings/storage/closet_base.yml
+++ b/Resources/Prototypes/Entities/buildings/storage/closet_base.yml
@@ -16,6 +16,7 @@
state: generic_door
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
shapes:
- !type:PhysShapeAabb
diff --git a/Resources/Prototypes/Entities/buildings/storage/crate_base.yml b/Resources/Prototypes/Entities/buildings/storage/crate_base.yml
index 2236a24dbe..ec7144491a 100644
--- a/Resources/Prototypes/Entities/buildings/storage/crate_base.yml
+++ b/Resources/Prototypes/Entities/buildings/storage/crate_base.yml
@@ -16,6 +16,7 @@
state: crate
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
shapes:
- !type:PhysShapeAabb
@@ -26,7 +27,7 @@
- type: Physics
mass: 25
Anchored: false
-
+
- type: EntityStorage
Capacity: 60
- type: PlaceableSurface
diff --git a/Resources/Prototypes/Entities/buildings/table.yml b/Resources/Prototypes/Entities/buildings/table.yml
index 0ba6c8f0a4..ad0c2db39f 100644
--- a/Resources/Prototypes/Entities/buildings/table.yml
+++ b/Resources/Prototypes/Entities/buildings/table.yml
@@ -3,6 +3,7 @@
name: "worktop"
components:
- type: Clickable
+ - type: InteractionOutline
- type: PlaceableSurface
- type: Sprite
netsync: false
@@ -27,4 +28,4 @@
- type: Damageable
- type: Destructible
thresholdvalue: 50
- spawnondestroy: TableParts
\ No newline at end of file
+ spawnondestroy: TableParts
diff --git a/Resources/Prototypes/Entities/buildings/turret.yml b/Resources/Prototypes/Entities/buildings/turret.yml
index e7ef300acb..14f8e7a064 100644
--- a/Resources/Prototypes/Entities/buildings/turret.yml
+++ b/Resources/Prototypes/Entities/buildings/turret.yml
@@ -3,6 +3,7 @@
name: Turret Base
components:
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
- type: Sprite
texture: Buildings/TurrBase.png
@@ -12,6 +13,7 @@
name: Turret (Gun)
components:
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
- type: Sprite
drawdepth: WallMountedItems
@@ -26,6 +28,7 @@
name: Turret (Light)
components:
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
- type: Sprite
drawdepth: WallMountedItems
diff --git a/Resources/Prototypes/Entities/buildings/vending_machines.yml b/Resources/Prototypes/Entities/buildings/vending_machines.yml
index 7d862b6735..4f4a1a486a 100644
--- a/Resources/Prototypes/Entities/buildings/vending_machines.yml
+++ b/Resources/Prototypes/Entities/buildings/vending_machines.yml
@@ -6,6 +6,7 @@
Anchored: true
- type: Rotatable
- type: Clickable
+ - type: InteractionOutline
- type: Sprite
sprite: Buildings/VendingMachines/empty.rsi
layers:
diff --git a/Resources/Prototypes/Entities/buildings/walls.yml b/Resources/Prototypes/Entities/buildings/walls.yml
index c6a898a92a..66022bb49c 100644
--- a/Resources/Prototypes/Entities/buildings/walls.yml
+++ b/Resources/Prototypes/Entities/buildings/walls.yml
@@ -4,6 +4,7 @@
description: Keeps the air in and the greytide out.
components:
- type: Clickable
+ - type: InteractionOutline
- type: Sprite
netsync: false
drawdepth: Walls
diff --git a/Resources/Prototypes/Entities/buildings/windows.yml b/Resources/Prototypes/Entities/buildings/windows.yml
index e027b3cf8d..16f9584135 100644
--- a/Resources/Prototypes/Entities/buildings/windows.yml
+++ b/Resources/Prototypes/Entities/buildings/windows.yml
@@ -4,6 +4,7 @@
description: Don't smudge up the glass down there.
components:
- type: Clickable
+ - type: InteractionOutline
- type: Sprite
netsync: false
drawdepth: WallTops
diff --git a/Resources/Prototypes/Entities/items/item_base.yml b/Resources/Prototypes/Entities/items/item_base.yml
index 6e4f65af02..07f21a62a9 100644
--- a/Resources/Prototypes/Entities/items/item_base.yml
+++ b/Resources/Prototypes/Entities/items/item_base.yml
@@ -5,6 +5,7 @@
- type: Item
Size: 5
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
shapes:
- !type:PhysShapeAabb
diff --git a/Resources/Prototypes/Entities/items/powercells.yml b/Resources/Prototypes/Entities/items/powercells.yml
index 1a03395a39..6322b71a9b 100644
--- a/Resources/Prototypes/Entities/items/powercells.yml
+++ b/Resources/Prototypes/Entities/items/powercells.yml
@@ -118,6 +118,7 @@
- type: Physics
mass: 5
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
shapes:
- !type:PhysShapeAabb
@@ -149,6 +150,7 @@
- type: Physics
mass: 5
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
shapes:
- !type:PhysShapeAabb
@@ -179,6 +181,7 @@
- type: Physics
mass: 5
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
shapes:
- !type:PhysShapeAabb
diff --git a/Resources/Prototypes/Entities/markers/construction_ghost.yml b/Resources/Prototypes/Entities/markers/construction_ghost.yml
index eb2de49695..3535f5d7e1 100644
--- a/Resources/Prototypes/Entities/markers/construction_ghost.yml
+++ b/Resources/Prototypes/Entities/markers/construction_ghost.yml
@@ -9,6 +9,7 @@
- type: ConstructionGhost
- type: Collidable
- type: Clickable
+ - type: InteractionOutline
- type: entity
name: somebody-messed-up frame
@@ -18,3 +19,4 @@
- type: Construction
- type: Collidable
- type: Clickable
+ - type: InteractionOutline
diff --git a/Resources/Prototypes/Entities/mobs/human.yml b/Resources/Prototypes/Entities/mobs/human.yml
index bef68adeab..c6780029b6 100644
--- a/Resources/Prototypes/Entities/mobs/human.yml
+++ b/Resources/Prototypes/Entities/mobs/human.yml
@@ -16,6 +16,7 @@
- type: Inventory
- type: Constructor
- type: Clickable
+ - type: InteractionOutline
- type: Sprite
netsync: false
drawdepth: Mobs
diff --git a/Resources/Prototypes/Entities/water_tank.yml b/Resources/Prototypes/Entities/water_tank.yml
index 2d22b6f790..640aff0778 100644
--- a/Resources/Prototypes/Entities/water_tank.yml
+++ b/Resources/Prototypes/Entities/water_tank.yml
@@ -11,6 +11,7 @@
texture: Buildings/watertank.png
- type: Clickable
+ - type: InteractionOutline
- type: Collidable
layer: 31
shape:
@@ -19,20 +20,20 @@
- type: Physics
mass: 15
Anchored: false
-
+
- type: Damageable
- type: Destructible
thresholdvalue: 10
-
+
- type: Solution
maxVol: 1500
caps: 3
-
+
placement:
snap:
- Wall
-
+
- type: entity
parent: watertank
id: watertank_full
@@ -42,4 +43,3 @@
reagents:
- ReagentId: chem.H2O
Quantity: 1500
-
\ No newline at end of file
diff --git a/Resources/Prototypes/Shaders/outline.yml b/Resources/Prototypes/Shaders/outline.yml
index b91923ec14..610e120f8b 100644
--- a/Resources/Prototypes/Shaders/outline.yml
+++ b/Resources/Prototypes/Shaders/outline.yml
@@ -5,3 +5,11 @@
params:
outline_width: 2
outline_color: "#FF000055"
+
+- type: shader
+ id: selection_outline_inrange
+ kind: source
+ path: "/Shaders/outline.swsl"
+ params:
+ outline_width: 2
+ outline_color: "#00FF0055"