ui/BanishedPerks.razor

A UI Razor component that renders a small list of a player's banished perk icons. It chooses the selected player or local player, skips rendering when no player or no banished perks, then iterates the player's BanishedPerkIdentities to draw PerkIconStatic components with a slight randomized rotation.

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