107 lines
2.4 KiB
Plaintext
107 lines
2.4 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 = false;
|
|
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 OnUpdate()
|
|
{
|
|
if ( Input.Pressed( "Score" ) )
|
|
{
|
|
Visible = !Visible;
|
|
}
|
|
}
|
|
|
|
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()
|
|
{
|
|
base.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();
|
|
}
|
|
}
|