A UI Razor component for a player tooltip. It displays the player's avatar, level, name and ping, positions itself near the mouse, and hides when using a controller.
@namespace Sandbox
@using Sandbox;
@using Sandbox.UI;
@using System;
@inherits Panel
@attribute [StyleSheet("PlayerTooltip.razor.scss")]
<root>
@{
string name = "";
}
@if(Player != null )
{
@if(ShowIcon)
{
<div class="icon">
<img src="avatar:@Player.Network.Owner.SteamId" />
<div class="level">@Player.Level</div>
</div>
}
@{
name = Player?.Network.Owner?.DisplayName ?? "";
}
}
else
{
name = Name ?? "";
}
<div class="name">@name</div>
@if(Player != null && Player.Network.Owner != null)
{
<div class="ping">@($"{Player.Network.Owner.Ping:0}ms")</div>
}
</root>
@code {
public Player Player { get; set; }
public bool ShowIcon { get; set; }
public string Name { get; set; }
public override void Tick()
{
SetClass( "hidden", Input.UsingController );
var mousePos = Mouse.Position;
if (mousePos.x > Screen.Width * 0.9f)
{
mousePos += new Vector2(-20f, 20f);
var mousePosRelative = mousePos / Screen.Size;
Style.Right = Length.Fraction(1f - mousePosRelative.x);
Style.Top = Length.Fraction(mousePosRelative.y);
}
else
{
mousePos += new Vector2(20f, 20f);
var mousePosRelative = mousePos / Screen.Size;
Style.Left = Length.Fraction(mousePosRelative.x);
Style.Top = Length.Fraction(mousePosRelative.y);
}
}
protected override int BuildHash()
{
return HashCode.Combine(RealTime.Now);
}
}