diff --git a/Content.Client/GameObjects/Components/Construction/ConstructionGhostComponent.cs b/Content.Client/GameObjects/Components/Construction/ConstructionGhostComponent.cs index 6abd5846a5..0bfc7a274e 100644 --- a/Content.Client/GameObjects/Components/Construction/ConstructionGhostComponent.cs +++ b/Content.Client/GameObjects/Components/Construction/ConstructionGhostComponent.cs @@ -1,7 +1,5 @@ -using Content.Shared.Construction; +using Content.Shared.Construction; using Robust.Shared.GameObjects; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Network; using Robust.Shared.ViewVariables; namespace Content.Client.GameObjects.Components.Construction @@ -14,18 +12,5 @@ namespace Content.Client.GameObjects.Components.Construction [ViewVariables] public ConstructionPrototype Prototype { get; set; } [ViewVariables] public ConstructorComponent Master { get; set; } [ViewVariables] public int GhostID { get; set; } - - public override void HandleMessage(ComponentMessage message, INetChannel netChannel = null, - IComponent component = null) - { - base.HandleMessage(message, netChannel, component); - - switch (message) - { - case ClientEntityClickMsg clickMsg: - Master.TryStartConstruction(GhostID); - break; - } - } } } diff --git a/Content.Client/GameObjects/EntitySystems/ConstructorSystem.cs b/Content.Client/GameObjects/EntitySystems/ConstructorSystem.cs index 67a4c3b981..3a6f0a0167 100644 --- a/Content.Client/GameObjects/EntitySystems/ConstructorSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/ConstructorSystem.cs @@ -1,4 +1,4 @@ -using Content.Client.Construction; +using Content.Client.Construction; using Content.Client.GameObjects.Components.Construction; using Content.Client.UserInterface; using Content.Shared.Input; @@ -6,6 +6,7 @@ using Robust.Client.GameObjects.EntitySystems; using Robust.Client.Player; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Input; +using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; namespace Content.Client.GameObjects.EntitySystems @@ -15,6 +16,7 @@ namespace Content.Client.GameObjects.EntitySystems #pragma warning disable 649 [Dependency] private readonly IGameHud _gameHud; [Dependency] private readonly IPlayerManager _playerManager; + [Dependency] private readonly IEntityManager _entityManager; #pragma warning restore 649 public override void Initialize() @@ -24,14 +26,17 @@ namespace Content.Client.GameObjects.EntitySystems var inputSys = EntitySystemManager.GetEntitySystem(); inputSys.BindMap.BindFunction(ContentKeyFunctions.OpenCraftingMenu, new PointerInputCmdHandler(HandleOpenCraftingMenu)); + + inputSys.BindMap.BindFunction(EngineKeyFunctions.Use, + new PointerInputCmdHandler(HandleUse)); } - private void HandleOpenCraftingMenu(in PointerInputCmdHandler.PointerInputCmdArgs args) + private bool HandleOpenCraftingMenu(in PointerInputCmdHandler.PointerInputCmdArgs args) { if (_playerManager.LocalPlayer.ControlledEntity == null || !_playerManager.LocalPlayer.ControlledEntity.TryGetComponent(out ConstructorComponent constructor)) { - return; + return false; } var menu = constructor.ConstructionMenu; @@ -51,6 +56,23 @@ namespace Content.Client.GameObjects.EntitySystems { _setOpenValue(menu, true); } + + return true; + } + + private bool HandleUse(in PointerInputCmdHandler.PointerInputCmdArgs args) + { + if (!args.EntityUid.IsValid() || !args.EntityUid.IsClientSide()) + return false; + + var entity = _entityManager.GetEntity(args.EntityUid); + + if (!entity.TryGetComponent(out ConstructionGhostComponent ghostComp)) + return false; + + ghostComp.Master.TryStartConstruction(ghostComp.GhostID); + return true; + } private void _setOpenValue(ConstructionMenu menu, bool value) diff --git a/Content.Client/GameObjects/EntitySystems/ExamineSystem.cs b/Content.Client/GameObjects/EntitySystems/ExamineSystem.cs index 37c45abd7c..fe7008dc64 100644 --- a/Content.Client/GameObjects/EntitySystems/ExamineSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/ExamineSystem.cs @@ -51,21 +51,22 @@ namespace Content.Client.GameObjects.EntitySystems RegisterMessageType(); } - private void HandleExamine(ICommonSession session, GridCoordinates coords, EntityUid uid) + private bool HandleExamine(ICommonSession session, GridCoordinates coords, EntityUid uid) { if (!uid.IsValid() || !_entityManager.TryGetEntity(uid, out var examined)) { - return; + return false; } var playerEntity = _playerManager.LocalPlayer.ControlledEntity; if (playerEntity == null || !CanExamine(playerEntity, examined)) { - return; + return false; } DoExamine(examined); + return true; } public async void DoExamine(IEntity entity) diff --git a/Content.Client/GameObjects/EntitySystems/VerbSystem.cs b/Content.Client/GameObjects/EntitySystems/VerbSystem.cs index 422220e9d5..026a7e9fb1 100644 --- a/Content.Client/GameObjects/EntitySystems/VerbSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/VerbSystem.cs @@ -76,24 +76,24 @@ namespace Content.Client.GameObjects.EntitySystems _currentPopup.Open(box); } - private void OnOpenContextMenu(in PointerInputCmdHandler.PointerInputCmdArgs args) + private bool OnOpenContextMenu(in PointerInputCmdHandler.PointerInputCmdArgs args) { if (_currentPopup != null) { _closeContextMenu(); - return; + return true; } if (!(_stateManager.CurrentState is GameScreen gameScreen)) { - return; + return false; } var entities = gameScreen.GetEntitiesUnderPosition(args.Coordinates); if (entities.Count == 0) { - return; + return false; } _currentPopup = new VerbPopup(); @@ -110,6 +110,8 @@ namespace Content.Client.GameObjects.EntitySystems var size = _currentPopup.List.CombinedMinimumSize; var box = UIBox2.FromDimensions(args.ScreenCoordinates.Position, size); _currentPopup.Open(box); + + return true; } private void OnContextButtonPressed(IEntity entity) diff --git a/Content.Server/GameObjects/Components/Power/PowerDevice.cs b/Content.Server/GameObjects/Components/Power/PowerDevice.cs index 5309a620a2..075d58d3ee 100644 --- a/Content.Server/GameObjects/Components/Power/PowerDevice.cs +++ b/Content.Server/GameObjects/Components/Power/PowerDevice.cs @@ -371,9 +371,19 @@ namespace Content.Server.GameObjects.Components.Power } } + /// + /// The different methods that a can use to connect to a power network. + /// public enum DrawTypes { + /// + /// This device cannot be connected to a power network. + /// None = 0, + + /// + /// This device can connect to a + /// Node = 1, Provider = 2, Both = 3, diff --git a/Content.Server/GameObjects/Components/Power/PowerProviderComponent.cs b/Content.Server/GameObjects/Components/Power/PowerProviderComponent.cs index 4d0d21a4f4..e2c9d1131d 100644 --- a/Content.Server/GameObjects/Components/Power/PowerProviderComponent.cs +++ b/Content.Server/GameObjects/Components/Power/PowerProviderComponent.cs @@ -6,6 +6,7 @@ using Robust.Shared.Interfaces.GameObjects.Components; using Robust.Shared.IoC; using Robust.Shared.Log; using Robust.Shared.Serialization; +using Robust.Shared.Utility; using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.Power @@ -275,6 +276,10 @@ namespace Content.Server.GameObjects.Components.Power /// public bool CanServiceDevice(PowerDeviceComponent device) { + // Stops an APC from trying to connect to itself + if (this == device) + return false; + return (device.Owner.Transform.WorldPosition - Owner.Transform.WorldPosition).LengthSquared <= _range; } } diff --git a/Content.Server/GameObjects/EntitySystems/Click/InteractionSystem.cs b/Content.Server/GameObjects/EntitySystems/Click/InteractionSystem.cs index 369b17e574..9a33f72319 100644 --- a/Content.Server/GameObjects/EntitySystems/Click/InteractionSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/Click/InteractionSystem.cs @@ -206,24 +206,25 @@ namespace Content.Server.GameObjects.EntitySystems new PointerInputCmdHandler(HandleActivateItemInWorld)); } - public void HandleActivateItemInWorld(ICommonSession session, GridCoordinates coords, EntityUid uid) + private bool HandleActivateItemInWorld(ICommonSession session, GridCoordinates coords, EntityUid uid) { if (!EntityManager.TryGetEntity(uid, out var used)) - return; + return false; var playerEnt = ((IPlayerSession) session).AttachedEntity; if (playerEnt == null || !playerEnt.IsValid()) { - return; + return false; } if (!playerEnt.Transform.GridPosition.InRange(_mapManager, used.Transform.GridPosition, InteractionRange)) { - return; + return false; } InteractionActivate(playerEnt, used); + return true; } private void InteractionActivate(IEntity user, IEntity used) @@ -243,27 +244,27 @@ namespace Content.Server.GameObjects.EntitySystems activateComp.Activate(new ActivateEventArgs {User = user}); } - private void HandleUseItemInHand(ICommonSession session, GridCoordinates coords, EntityUid uid) + private bool HandleUseItemInHand(ICommonSession session, GridCoordinates coords, EntityUid uid) { // client sanitization if (!_mapManager.GridExists(coords.GridID)) { Logger.InfoS("system.interaction", $"Invalid Coordinates: client={session}, coords={coords}"); - return; + return true; } if (uid.IsClientSide()) { Logger.WarningS("system.interaction", $"Client sent interaction with client-side entity. Session={session}, Uid={uid}"); - return; + return true; } var userEntity = ((IPlayerSession) session).AttachedEntity; if (userEntity == null || !userEntity.IsValid()) { - return; + return true; } if (userEntity.TryGetComponent(out CombatModeComponent combatMode) && combatMode.IsInCombatMode) @@ -274,6 +275,8 @@ namespace Content.Server.GameObjects.EntitySystems { UserInteraction(userEntity, coords, uid); } + + return true; } private void UserInteraction(IEntity player, GridCoordinates coordinates, EntityUid clickedUid) diff --git a/Content.Server/GameObjects/EntitySystems/HandsSystem.cs b/Content.Server/GameObjects/EntitySystems/HandsSystem.cs index ed0818374a..f80f47ab6b 100644 --- a/Content.Server/GameObjects/EntitySystems/HandsSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/HandsSystem.cs @@ -97,18 +97,18 @@ namespace Content.Server.GameObjects.EntitySystems handsComp.SwapHands(); } - private void HandleDrop(ICommonSession session, GridCoordinates coords, EntityUid uid) + private bool HandleDrop(ICommonSession session, GridCoordinates coords, EntityUid uid) { var ent = ((IPlayerSession) session).AttachedEntity; if (ent == null || !ent.IsValid()) { - return; + return false; } if (!ent.TryGetComponent(out HandsComponent handsComp)) { - return; + return false; } if (coords.InRange(_mapManager, ent.Transform.GridPosition, InteractionSystem.InteractionRange)) @@ -119,6 +119,8 @@ namespace Content.Server.GameObjects.EntitySystems { handsComp.Drop(handsComp.ActiveIndex); } + + return true; } private static void HandleActivateItem(ICommonSession session) @@ -129,23 +131,23 @@ namespace Content.Server.GameObjects.EntitySystems handsComp.ActivateItem(); } - private void HandleThrowItem(ICommonSession session, GridCoordinates coords, EntityUid uid) + private bool HandleThrowItem(ICommonSession session, GridCoordinates coords, EntityUid uid) { var plyEnt = ((IPlayerSession)session).AttachedEntity; if (plyEnt == null || !plyEnt.IsValid()) - return; + return false; if (!plyEnt.TryGetComponent(out HandsComponent handsComp)) - return; + return false; if (!handsComp.CanDrop(handsComp.ActiveIndex)) - return; + return false; var throwEnt = handsComp.GetHand(handsComp.ActiveIndex).Owner; if (!handsComp.ThrowItem()) - return; + return false; // pop off an item, or throw the single item in hand. if (!throwEnt.TryGetComponent(out StackComponent stackComp) || stackComp.Count < 2) @@ -163,7 +165,7 @@ namespace Content.Server.GameObjects.EntitySystems } if (!throwEnt.TryGetComponent(out CollidableComponent colComp)) - return; + return true; colComp.CollisionEnabled = true; // I can now collide with player, so that i can do damage. @@ -203,7 +205,7 @@ namespace Content.Server.GameObjects.EntitySystems lHomoDir.Normalize(); transform.LocalRotation = new Angle(lHomoDir.Xy); - + return true; } } } diff --git a/RobustToolbox b/RobustToolbox index 2fc636b7b9..81641f49dc 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 2fc636b7b995540b92409d31fd2a52de925635cb +Subproject commit 81641f49dc9951124d13aadb43c4c3f4d34c320e