From fc5d7835c0bb5bcb34a8624a4fcd54028d2fc369 Mon Sep 17 00:00:00 2001 From: Acruid Date: Tue, 17 Sep 2019 16:08:45 -0700 Subject: [PATCH] Updates various systems to the new InputCommandHandler delegate signature, implementing the new handled return value. Modifies the construction system to use the newer InputHandler system, instead of the older ClickComponent system. Updates the engine submodule. --- .../ConstructionGhostComponent.cs | 17 +---------- .../EntitySystems/ConstructorSystem.cs | 28 +++++++++++++++++-- .../EntitySystems/ExamineSystem.cs | 7 +++-- .../GameObjects/EntitySystems/VerbSystem.cs | 10 ++++--- .../Components/Power/PowerDevice.cs | 10 +++++++ .../Power/PowerProviderComponent.cs | 5 ++++ .../EntitySystems/Click/InteractionSystem.cs | 19 +++++++------ .../GameObjects/EntitySystems/HandsSystem.cs | 22 ++++++++------- RobustToolbox | 2 +- 9 files changed, 75 insertions(+), 45 deletions(-) diff --git a/Content.Client/GameObjects/Components/Construction/ConstructionGhostComponent.cs b/Content.Client/GameObjects/Components/Construction/ConstructionGhostComponent.cs index 6abd5846a5b..0bfc7a274e7 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 67a4c3b9811..3a6f0a0167e 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 37c45abd7cd..fe7008dc64b 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 422220e9d59..026a7e9fb16 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 5309a620a22..075d58d3ee1 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 4d0d21a4f4c..e2c9d1131d2 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 369b17e5745..9a33f723197 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 ed0818374aa..f80f47ab6b7 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 2fc636b7b99..81641f49dc9 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 2fc636b7b995540b92409d31fd2a52de925635cb +Subproject commit 81641f49dc9951124d13aadb43c4c3f4d34c320e