using AfterHours.Data; using AfterHours.Interaction; using AfterHours.Networking; using Unity.Netcode; using UnityEngine; namespace AfterHours.Shop { /// /// Lagerkiste im Backroom: hält Nachschub einer einzigen Produktsorte. /// Spieler nehmen daraus in die Hände auf und tragen die Ware zum Regal /// (siehe ShelfSlot.Interact). /// public sealed class StorageCrate : NetworkBehaviour, IInteractable { [SerializeField] private ProductCatalog _catalog; [SerializeField] private int _productId = -1; [SerializeField] private int _startingQuantity = 200; private readonly NetworkVariable _quantity = new(0); public int ProductId => _productId; public int Quantity => _quantity.Value; public bool IsEmpty => _quantity.Value <= 0; public override void OnNetworkSpawn() { if (!IsServer) return; _quantity.Value = _startingQuantity; StorageCrateRegistry.Instance.Register(this); } public override void OnNetworkDespawn() { if (IsServer) StorageCrateRegistry.Instance.Unregister(this); } public string GetPrompt(ulong clientId) { var product = _catalog.Get(_productId); string name = product != null ? product.DisplayName : "?"; return IsEmpty ? $"{name} — Lager leer" : $"{name} nehmen — {_quantity.Value} im Lager"; } /// Server: Spieler nimmt Ware in die Hände auf. public void Interact(NetworkObject actor) { if (!IsServer || IsEmpty) return; if (!actor.TryGetComponent(out var hands)) return; int want = Mathf.Min(_quantity.Value, PlayerHands.MaxCarry); int taken = hands.TryTake(_productId, want); _quantity.Value -= taken; } /// Server: Lieferung trifft ein. public void Restock(int quantity) { if (!IsServer || quantity <= 0) return; _quantity.Value += quantity; } } }