@using Sandbox; @using Sandbox.UI; @inherits PanelComponent @* *@ @* *@ @* *@ @* *@ Players Player Status Ping @if ( Dedugan.All is not null ) { foreach ( var ded in Dedugan.All ) { @ded.Connection.DisplayName @GetPlayerStatus( ded.Connection ) @ded.Connection.Ping } } @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(); } 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(); } 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(); } }