UI/Inventory/Inventory.razor
@using Sandbox;
@using Sandbox.UI;
@inherits PanelComponent
@namespace CryptidHunt

<root>
    <div class="topContainer">
        <div class="title">BACKPACK</div>
        <div class="weightBarContainer">
            <div class="weightbar">
                <div class="inner" style="width: @( Weight / 40f * 100f)%"></div></div>
        </div>
        <div class="weightContainer">
            <div class="weight">@(Weight.ToString("0.0#")) / 40.0 KG</div>
        </div>
    </div>
    <div class="bottomContainer">
        <div class="itemContainer">
            <div class="slotContainer">
                @for (int i = 0; i < Items?.Length; i++)
                {
                    var item = Items[i];
                    <Slot class="@(item.IsValid() ? "hasItem" : "") + @(SelectedItem == item ? "selected" : "")" Item="@item" />
                }
            </div>
        </div>
        <ItemView></ItemView>
    </div>
</root>

@code
{
    public static Inventory Instance { get; private set; }
    public Item[] Items => Player.Instance?.Items;
    public float Weight => Items?.Sum(x => x.IsValid() ? x.Weight * x.Amount : 0f) ?? 0f;
    public Item SelectedItem { get; set; }

    public bool Show { get; private set; } = false;

    protected override void OnStart()
    {
        base.OnStart();
        Instance = this;
    }

    protected override void OnUpdate()
    {
        if (!Player.Instance.LockInputs)
        {
            if (Input.Pressed("Inventory"))
                Show = !Show;
        }
        else
            Show = false;

        Panel.Style.Opacity = Show ? 1f : 0f;

        //if (selected == null || selected.Container != pawn.Inventory)
        //    selected = null;
    }

    protected override int BuildHash() => System.HashCode.Combine( Time.Now );
}