Implement first iteration of players tab (chat/player list) and sketch API

This commit is contained in:
John Michael Gross
2016-09-18 07:04:32 -07:00
parent 113a6b63c0
commit 15d6a89f9c
11 changed files with 148 additions and 10 deletions

View File

@@ -17,6 +17,7 @@ using Piston;
using Sandbox;
using Sandbox.Engine.Multiplayer;
using Sandbox.Game.World;
using SteamSDK;
namespace PistonServer
{
@@ -29,34 +30,45 @@ namespace PistonServer
public ChatControl()
{
InitializeComponent();
ServerManager.Static.SessionReady += InitChatHandler;
}
public void MessageReceived(ulong steamId, string message, SteamSDK.ChatEntryTypeEnum chatType)
public void InitChatHandler()
{
MyMultiplayer.Static.ChatMessageReceived += MessageReceived;
}
public void MessageReceived(ulong steamId, string message, ChatEntryTypeEnum chatType)
{
//Messages sent from server loop back around.
if (steamId == MyMultiplayer.Static.ServerId)
return;
var name = MySession.Static.Players.TryGetPlayerBySteamId(steamId)?.DisplayName ?? "";
var name = MyMultiplayer.Static.GetMemberName(steamId);
Dispatcher.Invoke(() => AddMessage(name, message), DispatcherPriority.Normal);
}
public void AddMessage(string sender, string message)
{
Chat.Text += $"{DateTime.Now.ToLongTimeString()} | {sender}: {message}\n";
Program.UserInterface.Players.RefreshNames();
}
public void SendMessage(string message)
{
MyMultiplayer.Static.SendChatMessage(message);
Dispatcher.Invoke(() => AddMessage("Server", message));
}
private void SendButton_Click(object sender, RoutedEventArgs e)
{
OnMessageEntered();
}
private void OnMessageEntered()
{
var text = Message.Text;
AddMessage("Server", text);
MySandboxGame.Static.Invoke(() => MyMultiplayer.Static.SendChatMessage(text));
SendMessage(text);
MessageEntered?.Invoke(Message.Text);
Message.Text = "";
}