A UI component (Razor) that renders a leaderboard player icon with avatar, optional level badge and victory/defeat marker. It handles click to request showing the player's profile and mouse hover to set a hovered name on a Manager singleton.
@namespace Sandbox
@using Sandbox;
@using Sandbox.UI;
@using System;
@inherits Panel
@attribute [StyleSheet("LeaderboardPlayerIcon.razor.scss")]
<root class="@(IsSmall ? "small" : "")">
<div class="icon" style="background-image: url( avatar:@PlayerInfo.steamId )">
</div>
@if(PlayerInfo.level >= 0)
{
<div class="playerlevel">@(PlayerInfo.level)</div>
}
@if(Icon == LeaderboardIconType.Victory)
{
<div class="crown"></div>
}
else if(Icon == LeaderboardIconType.Defeat)
{
<div class="skull"></div>
}
</root>
@code
{
public PlayerInfo PlayerInfo { get; set; }
public bool ShowTooltip { get; set; }
public bool IsSmall { get; set; }
public enum LeaderboardIconType { None, Victory, Defeat }
public LeaderboardIconType Icon { get; set; }
protected override void OnClick(MousePanelEvent e)
{
base.OnClick(e);
ShowPlayerProfile(PlayerInfo.displayName, PlayerInfo.steamId);
e.StopPropagation();
}
protected override void OnMouseOver(MousePanelEvent e)
{
if(e.Target != this)
return;
if(ShowTooltip)
Manager.Instance.LobbyHoveredPlayerName = PlayerInfo.displayName;
}
protected override void OnMouseOut(MousePanelEvent e)
{
Manager.Instance.LobbyHoveredPlayerName = null;
}
protected override int BuildHash()
{
return HashCode.Combine(
PlayerInfo.displayName,
PlayerInfo.steamId,
PlayerInfo.level
);
}
void ShowPlayerProfile(string displayName, long steamId)
{
Manager.Instance.LobbyHoveredPlayerName = null;
Manager.Instance.PlayerProfileToShow = new PlayerInfo(displayName, steamId);
}
}