96 lines
2.9 KiB
Plaintext
96 lines
2.9 KiB
Plaintext
@using Sandbox;
|
|
@using Sandbox.UI;
|
|
@inherits PanelComponent
|
|
|
|
<root class="@(Visible ? "" : "hidden")">
|
|
@* <div class="decoration top-left"></div> *@
|
|
@* <div class="decoration top-right"></div> *@
|
|
@* <div class="decoration bottom-left"></div> *@
|
|
@* <div class="decoration bottom-right"></div> *@
|
|
|
|
<label class="title">Players</label>
|
|
|
|
<div class="content">
|
|
<div class="header">
|
|
<label class="column nick">Player</label>
|
|
<label class="column status">Status</label>
|
|
<label class="column ping">Ping</label>
|
|
</div>
|
|
|
|
<div class="player-list">
|
|
@if (Dedugan.All is not null)
|
|
{
|
|
foreach (var ded in Dedugan.All)
|
|
{
|
|
<div class="player" onclick="@(() => OpenProfile(ded.Connection))">
|
|
<div class="avatar">
|
|
<img src="avatar:@ded.SteamID"/>
|
|
</div>
|
|
<label class="column nick">@ded.Connection.DisplayName</label>
|
|
<label class="column status">@GetPlayerStatus(ded.Connection)</label>
|
|
<label class="column ping">@ded.Connection.Ping</label>
|
|
</div>
|
|
}
|
|
}
|
|
</div>
|
|
</div>
|
|
</root>
|
|
|
|
@code
|
|
{
|
|
public static bool Visible => Input.Down("Score");
|
|
private NetworkManager _networkManager;
|
|
|
|
private NetworkManager NetworkManager
|
|
{
|
|
get
|
|
{
|
|
if (_networkManager == null || !_networkManager.IsValid)
|
|
{
|
|
_networkManager = Scene.Directory.FindByName("Network Manager")
|
|
.FirstOrDefault()?
|
|
.GetComponent<NetworkManager>();
|
|
}
|
|
return _networkManager;
|
|
}
|
|
}
|
|
|
|
protected override void OnEnabled()
|
|
{
|
|
// Кэшируем NetworkManager при включении компонента
|
|
_networkManager = Scene.Directory.FindByName("Network Manager")
|
|
.FirstOrDefault()?
|
|
.GetComponent<NetworkManager>();
|
|
}
|
|
|
|
private string GetPlayerStatus(Connection conn)
|
|
{
|
|
var playerObj = Dedugan.GetByID( conn.Id ).GameObject;
|
|
return playerObj?.IsValid == true ? "In Game" : "Connecting";
|
|
}
|
|
|
|
private void OpenProfile(Connection connection)
|
|
{
|
|
Log.Info($"Opening profile: {connection.SteamId}");
|
|
Game.Overlay.ShowPlayer(connection.SteamId);
|
|
}
|
|
|
|
protected override int BuildHash()
|
|
{
|
|
if (!Visible || Dedugan.All == null)
|
|
return -1;
|
|
|
|
var hash = new System.HashCode();
|
|
hash.Add(Visible);
|
|
|
|
foreach (var ded in Dedugan.All)
|
|
{
|
|
hash.Add(ded.Id);
|
|
hash.Add(ded.Connection.Ping);
|
|
hash.Add(ded.Name);
|
|
}
|
|
|
|
return hash.ToHashCode();
|
|
}
|
|
}
|