Input Handling (#90)

* Migrates the Examine system to the new Input system.

* Update Engine.
This commit is contained in:
Acruid
2018-08-08 11:43:49 -07:00
committed by GitHub
parent b0a3f294c5
commit 830159390b
7 changed files with 62 additions and 49 deletions

View File

@@ -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)
/// <inheritdoc />
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<InputSystem>();
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<ITransformComponent>(out var playerTransform))
if (!playerEnt.TryGetComponent<ITransformComponent>(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<IExamine>())
foreach (var examineComponents in examined.GetAllComponents<IExamine>())
{
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<IChatManager>().DispatchMessage(SS14.Shared.Console.ChatChannel.Visual, fullexaminetext.ToString());
IoCManager.Resolve<IChatManager>().DispatchMessage(SS14.Shared.Console.ChatChannel.Visual, fullExamineText.ToString(), session.Index);
}
}
}