sasalka/Code/Inventory/Ui/Inventory.razor
2025-06-26 23:24:52 +03:00

72 lines
1.7 KiB
Plaintext

@using Sasalka
@inherits PanelComponent
@namespace Sasalka.Ui
<root class="inventory @( Inventar.IsInventoryOpen ? "" : "hidden" )">
<div class="inventory-panel">
@if ( PlayerInventory != null )
{
<div class="inventory-header">
<div class="inventory-title">Инвентарь</div>
@if ( !PlayerInventory.UnlimitedSlots )
{
<div class="inventory-slots">
@PlayerInventory.GetUsedSlots() / @PlayerInventory.MaxInventorySlots слотов
<div class="inventory-usage-bar">
<div class="inventory-usage-fill" style="width: @(PlayerInventory.GetInventoryUsagePercentage())%"></div>
</div>
</div>
}
</div>
@if ( PlayerInventory.Items.Count > 0 )
{
@foreach ( var item in PlayerInventory.Items )
{
<Sasalka.Ui.InventoryItem Item="@item" OnItemClick="@( UseItem )" OnItemRightClick="@( DropItem )"/>
}
}
else
{
<div class="inventory-empty">Инвентарь пуст</div>
}
}
</div>
</root>
@code {
Dedugan Player => Dedugan.Local;
Inventar PlayerInventory => Player?.Inventory;
void UseItem( Sasalka.InventoryItem item )
{
Player?.Inventory?.EquipItem( item );
}
void DropItem( Sasalka.InventoryItem item )
{
Player?.Inventory?.DropItem( item, Player.CameraPivot.WorldPosition + Player.Camera.LocalRotation.Right * 50 );
}
protected override void OnUpdate()
{
if ( Input.Pressed( "Score" ) )
{
Inventar.IsInventoryOpen = !Inventar.IsInventoryOpen;
}
}
protected override int BuildHash()
{
if ( !Inventar.IsInventoryOpen || PlayerInventory == null )
return -1;
var hash = new HashCode();
hash.Add( Inventar.IsInventoryOpen );
return hash.ToHashCode();
}
}