using System.Collections; using System.Collections.Generic; using System.Linq; 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; public Inventory Inventory { get { return invent; } } public static PlayerInteractionHandler instance; [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() { instance = this; 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 (!IsCarrying) { int t_index = 0; bool pickupFound = false; if (itemsInRange.Count > 0) { while (t_index 0) { pickupFound = true; 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 (!pickupFound) { foreach(InteractableItem item in itemsInRange) { if (!item.CanPickup) { if(!item.Interact(ref invent, ref heavyInvent)) { item.Interact(); } } } } } else { heavyInvent.transform.parent = null; heavyInvent.GetComponent().isKinematic = false; heavyInvent.EnableAll(); heavyInvent = null; } } 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(255,255, 255, 255)); 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); } } } }