using UnityEngine; using TMPro; public class PickUpKeyCard : MonoBehaviour { [Header("Per‑Object Settings")] [SerializeField] private bool isKeyCard = false; [SerializeField] private string keyCardName = "Deck D key card"; [Header("Refs & Settings")] public TMP_Text interactionPrompt; private Outline outline; [SerializeField] private Animator objectAnimator; [SerializeField] private string animationName = "PickupAnimation"; [SerializeField] private AudioClip pickupSound; [SerializeField] private KeyCardPlayer keyCardPlayer; [SerializeField] private float interactionDistance = 5f; [SerializeField] private Item keyCardItem; [SerializeField] private Inventory playerInventory; private bool isPickedUp; void Awake() { outline = GetComponent(); if (outline) outline.enabled = true; if (interactionPrompt) interactionPrompt.enabled = false; } void Update() { if (isPickedUp) return; var ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width/2, Screen.height/2)); if (!Physics.Raycast(ray, out var hit, interactionDistance)) { if (interactionPrompt) interactionPrompt.enabled = false; return; } if (hit.collider.gameObject != gameObject) { if (interactionPrompt) interactionPrompt.enabled = false; return; } if (interactionPrompt) { interactionPrompt.text = isKeyCard ? $"Left click to pick up {keyCardName}" : "Left click to pick up item"; interactionPrompt.enabled = true; } if (!Input.GetMouseButtonDown(0)) return; bool hasSpace = false; if (playerInventory != null) { foreach (var slot in playerInventory.slots) if (slot == null) { hasSpace = true; break; } if (!hasSpace) { Debug.Log("Inventory is full!"); if (interactionPrompt) interactionPrompt.text = "Inventory full!"; return; } } isPickedUp = true; if (isKeyCard && keyCardPlayer != null) keyCardPlayer.hasKeyCard = true; if (playerInventory != null) { playerInventory.AddItem(keyCardItem); FindObjectOfType()?.RefreshUI(); Destroy(gameObject); } if (outline) outline.enabled = false; interactionPrompt.enabled = false; objectAnimator?.Play(animationName, 0, 0); if (pickupSound) SoundFXManager.instance.PlaySound(pickupSound, transform, 1.5f); } }