using System.Collections; using System.Collections.Generic; using System.Runtime.CompilerServices; using Unity.VisualScripting; using UnityEngine; [RequireComponent(typeof(Collider))] public class PlayerInteractionHandler : MonoBehaviour { private List itemsInRange= new List(); private List heavyItemsInRange = new List(); private Inventory invent; [SerializeField] private Light flashlight; [SerializeField] private GameObject flashlight3D; [SerializeField] private int materialIndex = 1; private Material selMaterial; private Color initColor; private HeavyInteractableItem heavyInvent; public bool IsCarrying { get { return heavyInvent !=null; } } [SerializeField] private Transform carryingPos; // Start is called before the first frame update void Start() { invent = this.transform.parent.GetComponent(); initColor = flashlight3D.GetComponent().materials[materialIndex].GetColor("_BaseColor"); selMaterial = flashlight3D.GetComponent().materials[materialIndex]; } // Update is called once per frame void Update() { // if(Input.GetButtonDown("Fire1")) { if(itemsInRange.Count > 0) { invent.AddItem(itemsInRange[0]); itemsInRange[0].transform.gameObject.SetActive(false); itemsInRange.Remove(itemsInRange[0]); } else if(heavyItemsInRange.Count > 0) { heavyInvent= heavyItemsInRange[0]; heavyInvent.transform.parent = carryingPos; heavyInvent.transform.localPosition = Vector3.zero; heavyInvent.GetComponent().isKinematic = true; heavyItemsInRange.Remove(heavyItemsInRange[0]); heavyInvent.Disable(); heavyInvent.DisableAll(); } } if (Input.GetButtonDown("Fire2")) { flashlight.gameObject.SetActive(!flashlight.gameObject.activeSelf); if (flashlight.gameObject.activeSelf) { flashlight3D.GetComponent().materials[materialIndex].SetColor("_BaseColor", initColor); selMaterial.SetColor("_EmissionColor", new Color(0, 0, 0, 0)); flashlight3D.gameObject.SetActive(true); } else { flashlight3D.GetComponent().materials[materialIndex].SetColor("_BaseColor", new Color(0, 0, 0)); selMaterial.SetColor("_EmissionColor", new Color(0, 0, 0, 0)); flashlight3D.gameObject.SetActive(false); } } } private void OnTriggerEnter(Collider other) { if(other.gameObject.GetComponent() != null) { InteractableItem item = other.gameObject.GetComponent(); if(item is InteractableItem && item is not HeavyInteractableItem) { ((InteractableItem)item).Enable(); itemsInRange.Add(item); }else if(item is HeavyInteractableItem) { ((HeavyInteractableItem)item).Enable(); heavyItemsInRange.Add((HeavyInteractableItem)item); } } } private void OnTriggerExit(Collider other) { if (other.gameObject.GetComponent() != null) { InteractableItem item = other.gameObject.GetComponent(); if (item is InteractableItem && item is not HeavyInteractableItem) { ((InteractableItem)item).Disable(); itemsInRange.Remove(item); } else if (item is HeavyInteractableItem) { ((HeavyInteractableItem)item).Disable(); //itemsInRange.Remove((HeavyInteractableItem)(item)); heavyItemsInRange.Remove((HeavyInteractableItem)item); } } } }