A Razor UI component that renders a list of a player's banished perk icons. It picks the selected player (fallback to local), aborts render if none or list empty, then iterates BanishedPerkIdentities to draw PerkIconStatic components with a small rotation and reduced opacity for non-proxy players. It overrides BuildHash to include player and count for change detection.
@namespace Sandbox
@using Sandbox;
@using Sandbox.UI;
@using System;
@inherits Panel
@attribute [StyleSheet("BanishedPerks.razor.scss")]
@{
var player = Manager.Instance.SelectedPlayer.IsValid()
? Manager.Instance.SelectedPlayer
: Manager.Instance.LocalPlayer;
if (!player.IsValid() || player.BanishedPerkIdentities.Count == 0)
return;
}
<root>
<div class="banishedlist" style="opacity:@(player.IsProxy ? 1f : 0.3f);">
@{
int index = 0;
}
@foreach(var typeIdentity in player.BanishedPerkIdentities)
{
var rot = Utils.Map((player.PerkRandomRotationSeed * 2 + index * 4f) % 10, 0, 9, -5f, 5f);
<PerkIconStatic style="width: 42px; height: 42px; transform: rotate(@(rot)deg);" PerkType=@(PerkManager.IdentityToType(typeIdentity)) Level=@(1) Banished=@true />
index++;
}
</div>
</root>
@code{
protected override int BuildHash()
{
var player = Manager.Instance.SelectedPlayer.IsValid()
? Manager.Instance.SelectedPlayer
: Manager.Instance.LocalPlayer;
return HashCode.Combine(player, player.BanishedPerkIdentities.Count);
}
}