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"