ui/BanishedPerks.razor

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.

File Access
@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);
	}
}