diff --git a/Content.Client/GameObjects/Components/Inventory/ClientInventoryComponent.cs b/Content.Client/GameObjects/Components/Inventory/ClientInventoryComponent.cs index b6b2a91ce3..ccac3fc8c6 100644 --- a/Content.Client/GameObjects/Components/Inventory/ClientInventoryComponent.cs +++ b/Content.Client/GameObjects/Components/Inventory/ClientInventoryComponent.cs @@ -28,7 +28,7 @@ namespace Content.Client.GameObjects private InventoryWindow Window; private string TemplateName = "HumanInventory"; //stored for serialization purposes - private InputCommand OpenMenuCommand; + private InputCmdHandler _openMenuCmdHandler; public override void OnRemove() { @@ -42,7 +42,7 @@ namespace Content.Client.GameObjects base.ExposeData(serializer); Window = new InventoryWindow(this); - OpenMenuCommand = InputCommand.FromDelegate(() => { Window.AddToScreen(); Window.Open(); }); + _openMenuCmdHandler = InputCmdHandler.FromDelegate(session => { Window.AddToScreen(); Window.Open(); }); serializer.DataField(ref TemplateName, "Template", "HumanInventory"); Window.CreateInventory(TemplateName); } @@ -65,7 +65,7 @@ namespace Content.Client.GameObjects break; case PlayerAttachedMsg _: - inputMgr.SetInputCommand(ContentKeyFunctions.OpenCharacterMenu, OpenMenuCommand); + inputMgr.SetInputCommand(ContentKeyFunctions.OpenCharacterMenu, _openMenuCmdHandler); break; case PlayerDetachedMsg _: diff --git a/Content.Server/GameObjects/Components/GUI/ServerHandsComponent.cs b/Content.Server/GameObjects/Components/GUI/ServerHandsComponent.cs index a1496aa6ea..0ab2211b60 100644 --- a/Content.Server/GameObjects/Components/GUI/ServerHandsComponent.cs +++ b/Content.Server/GameObjects/Components/GUI/ServerHandsComponent.cs @@ -13,6 +13,7 @@ using SS14.Shared.Interfaces.GameObjects; using SS14.Shared.Interfaces.GameObjects.Components; using SS14.Shared.Interfaces.Network; using SS14.Shared.IoC; +using SS14.Shared.Players; using SS14.Shared.Serialization; namespace Content.Server.GameObjects @@ -42,9 +43,9 @@ namespace Content.Server.GameObjects // Mostly arbitrary. public const float PICKUP_RANGE = 2; - private InputCommand SwapHandsCommand; - private InputCommand DropCommand; - private InputCommand ActivateItemInHandCommand; + private InputCmdHandler _swapHandsCmdHandler; + private InputCmdHandler _dropCmdHandler; + private InputCmdHandler _activateItemInHandCmdHandler; public override void ExposeData(ObjectSerializer serializer) { @@ -250,7 +251,7 @@ namespace Content.Server.GameObjects return new HandsComponentState(dict, ActiveIndex); } - private void SwapHands() + private void SwapHands(ICommonSession channel) { var index = orderedHands.FindIndex(x => x == ActiveIndex); index++; @@ -298,9 +299,9 @@ namespace Content.Server.GameObjects case PlayerAttachedMsg msg: InitInputCommands(); input = msg.NewPlayer.Input; - input.SetCommand(ContentKeyFunctions.SwapHands, SwapHandsCommand); - input.SetCommand(ContentKeyFunctions.Drop, DropCommand); - input.SetCommand(ContentKeyFunctions.ActivateItemInHand, ActivateItemInHandCommand); + input.SetCommand(ContentKeyFunctions.SwapHands, _swapHandsCmdHandler); + input.SetCommand(ContentKeyFunctions.Drop, _dropCmdHandler); + input.SetCommand(ContentKeyFunctions.ActivateItemInHand, _activateItemInHandCmdHandler); break; case PlayerDetachedMsg msg: @@ -314,14 +315,14 @@ namespace Content.Server.GameObjects private void InitInputCommands() { - if (SwapHandsCommand != null) + if (_swapHandsCmdHandler != null) { return; } - SwapHandsCommand = InputCommand.FromDelegate(SwapHands); - DropCommand = InputCommand.FromDelegate(() => Drop(ActiveIndex)); - ActivateItemInHandCommand = InputCommand.FromDelegate(() => + _swapHandsCmdHandler = InputCmdHandler.FromDelegate(SwapHands); + _dropCmdHandler = InputCmdHandler.FromDelegate(session => Drop(ActiveIndex)); + _activateItemInHandCmdHandler = InputCmdHandler.FromDelegate(session => { var used = GetActiveHand?.Owner; if (used != null) diff --git a/Content.Server/GameObjects/EntitySystems/Click/ClickParser.cs b/Content.Server/GameObjects/EntitySystems/Click/ClickParser.cs index 926046f10b..fc0f9b5bae 100644 --- a/Content.Server/GameObjects/EntitySystems/Click/ClickParser.cs +++ b/Content.Server/GameObjects/EntitySystems/Click/ClickParser.cs @@ -58,9 +58,6 @@ namespace Content.Server.GameObjects.EntitySystems case ClickType.Left: EntitySystemManager.GetEntitySystem().UserInteraction(message, player); break; - case (ClickType.Left | ClickType.Shift): - EntitySystemManager.GetEntitySystem().Examine(message, player); - break; case ClickType.Right: //Verb System break; diff --git a/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs b/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs index 80ed97fb77..4f99ad18b8 100644 --- a/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs @@ -1,13 +1,17 @@ -using SS14.Server.Interfaces.Chat; -using SS14.Server.Interfaces.GameObjects; +using System; +using System.Text; +using Content.Shared.Input; +using SS14.Server.GameObjects.EntitySystems; +using SS14.Server.Interfaces.Chat; +using SS14.Server.Interfaces.Player; using SS14.Shared.GameObjects; using SS14.Shared.GameObjects.Systems; -using SS14.Shared.Interfaces.GameObjects; +using SS14.Shared.Input; using SS14.Shared.Interfaces.GameObjects.Components; using SS14.Shared.IoC; using SS14.Shared.Log; -using System; -using System.Text; +using SS14.Shared.Map; +using SS14.Shared.Players; namespace Content.Server.GameObjects.EntitySystems { @@ -22,51 +26,57 @@ namespace Content.Server.GameObjects.EntitySystems public class ExamineSystem : EntitySystem { - - public void Examine(ClickEventMessage msg, IEntity player) + /// + public override void Initialize() { - //Get entity clicked upon from UID if valid UID, if not assume no entity clicked upon and null - IEntity examined = null; - if (msg.Uid.IsValid()) - examined = EntityManager.GetEntity(msg.Uid); + var inputSys = EntitySystemManager.GetEntitySystem(); + inputSys.BindMap.BindFunction(ContentKeyFunctions.ExamineEntity, new PointerInputCmdHandler(HandleExamine)); + } - if (examined == null) + private void HandleExamine(ICommonSession session, GridLocalCoordinates coords, EntityUid uid) + { + if (!(session is IPlayerSession svSession)) + return; + + var playerEnt = svSession.AttachedEntity; + if (!EntityManager.TryGetEntity(uid, out var examined)) return; //Verify player has a transform component - if (!player.TryGetComponent(out var playerTransform)) + if (!playerEnt.TryGetComponent(out var playerTransform)) { return; } - //Verify player is on the same map as the entity he clicked on - else if (msg.Coordinates.MapID != playerTransform.MapID) - { - Logger.Warning(string.Format("Player named {0} clicked on a map he isn't located on", player.Name)); - return; - } - //Start a stringbuilder since we have no idea how many times this could be appended to - StringBuilder fullexaminetext = new StringBuilder("This is " + examined.Name); + //Verify player is on the same map as the entity he clicked on + if (coords.MapID != playerTransform.MapID) + { + Logger.WarningS("sys.examine", $"Player named {session.Name} clicked on a map he isn't located on"); + return; + } + + //Start a StringBuilder since we have no idea how many times this could be appended to + var fullExamineText = new StringBuilder("This is " + examined.Name); //Add an entity description if one is declared if (!string.IsNullOrEmpty(examined.Description)) { - fullexaminetext.Append(Environment.NewLine + examined.Description); + fullExamineText.Append(Environment.NewLine + examined.Description); } //Add component statuses from components that report one - foreach (var examinecomponents in examined.GetAllComponents()) + foreach (var examineComponents in examined.GetAllComponents()) { - string componentdescription = examinecomponents.Examine(); - if (!string.IsNullOrEmpty(componentdescription)) - { - fullexaminetext.Append(Environment.NewLine + componentdescription); - } + var componentDescription = examineComponents.Examine(); + if (string.IsNullOrEmpty(componentDescription)) + continue; + + fullExamineText.Append(Environment.NewLine); + fullExamineText.Append(componentDescription); } //Send to client chat channel - //TODO: Fix fact you can only send to all clients because you cant resolve clients from player entities - IoCManager.Resolve().DispatchMessage(SS14.Shared.Console.ChatChannel.Visual, fullexaminetext.ToString()); + IoCManager.Resolve().DispatchMessage(SS14.Shared.Console.ChatChannel.Visual, fullExamineText.ToString(), session.Index); } } } diff --git a/Content.Shared/Input/ContentKeyFunctions.cs b/Content.Shared/Input/ContentKeyFunctions.cs index 893c3bb6ed..dc523fcce2 100644 --- a/Content.Shared/Input/ContentKeyFunctions.cs +++ b/Content.Shared/Input/ContentKeyFunctions.cs @@ -1,4 +1,4 @@ -using SS14.Shared.Input; +using SS14.Shared.Input; namespace Content.Shared.Input { @@ -9,5 +9,6 @@ namespace Content.Shared.Input public static readonly BoundKeyFunction Drop = "Drop"; public static readonly BoundKeyFunction ActivateItemInHand = "ActivateItemInHand"; public static readonly BoundKeyFunction OpenCharacterMenu = "OpenCharacterMenu"; + public static readonly BoundKeyFunction ExamineEntity = "ExamineEntity"; } } diff --git a/Resources/keybinds_content.yml b/Resources/keybinds_content.yml index 626c3b988e..7564c66ab9 100644 --- a/Resources/keybinds_content.yml +++ b/Resources/keybinds_content.yml @@ -12,3 +12,7 @@ binds: - function: OpenCharacterMenu key: C type: State +- function: ExamineEntity + key: MouseLeft + mod1: Shift + type: State diff --git a/engine b/engine index 830ff0f5b1..21b00df2b1 160000 --- a/engine +++ b/engine @@ -1 +1 @@ -Subproject commit 830ff0f5b18fbc998d123a36b5e59784b92efb18 +Subproject commit 21b00df2b1e8292045ae630b7adda964661dbe24