43 lines
1.1 KiB
C#
43 lines
1.1 KiB
C#
using Game.Features.Items.Contracts;
|
|
using Godot;
|
|
|
|
namespace Game.Features.Items.Godot;
|
|
|
|
public sealed class PlayerHeldItemPresenter(
|
|
ItemWorldController itemWorld,
|
|
Node3D leftHandAnchor,
|
|
Node3D rightHandAnchor
|
|
) : IHeldItemPresenter
|
|
{
|
|
public bool TryShowHeld(IItemInstance item, Hand hand)
|
|
{
|
|
if (!itemWorld.TryGetController(item.Info.Id, out WorldItemController controller))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
Node3D anchor = hand == Hand.Left ? leftHandAnchor : rightHandAnchor;
|
|
controller.SetHeld(anchor, item);
|
|
return true;
|
|
}
|
|
|
|
public bool TryShowDropped(IItemInstance item, Vector3 worldPosition)
|
|
{
|
|
if (!itemWorld.TryGetController(item.Info.Id, out WorldItemController controller))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
controller.SetDropped(worldPosition, item);
|
|
return true;
|
|
}
|
|
|
|
public void Refresh(IItemInstance item)
|
|
{
|
|
if (itemWorld.TryGetController(item.Info.Id, out WorldItemController controller))
|
|
{
|
|
controller.ApplyState(item);
|
|
}
|
|
}
|
|
}
|