using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using InfallibleCode; using UnityEngine.Localization; using UnityEngine.Localization.Settings; namespace InfallibleCode { [RequireComponent(typeof(AudioSource))] public class KeyHole : MonoBehaviour, IInteractable { [SerializeField] private string doorNameID; //public DoorDebugging door; public DoorBehaviour door; public KeyPickup KeyPickup; public bool keyAndDoorNameMatch; public LocalizedString keyUsedMessage; public LocalizedString keyMismatchMessage; public EventDelegateTrigger eventDelegateTriggerOnKeyUsed; public EventTrigger OnKeyUsed; //public bool canInsertKey; private AudioSource _audioSource; private void Start() { if (door == null) { door = GetComponent(); } _audioSource = GetComponent(); _audioSource.loop = false; } //// Update is called once per frame //void Update() //{ // //if (canInsertKey && door.DoorRequiresKey) // //{ // // if (Input.GetKeyDown(KeyCode.Mouse0) /*&& KeyPickup.hasKey*/) // // { // // if (KeyPickup.hasKey) // // { // // KeyPickup.hasKey = false; // // door.UnlockDoor(); // // print("You used your key!"); // // } // // else // // { // // print("You don't have a key or you have already used it"); // // } // // } // //} //} public void UseKey() { if (door.DoorRequiresKey) { #region Old keypPickup Logic //if (KeyPickup != null) //{ // if (KeyPickup.hasKey) // { // KeyPickup.hasKey = false; // door.UnlockDoor(); // UIManager.GetInstance().StartCoroutine(UIManager.GetInstance().DisplayMessage("You used your key.")); // AudioManager.GetInstance().UnlockDoorClip(_audioSource); // if (eventDelegateTriggerOnKeyUsed != null) // { // eventDelegateTriggerOnKeyUsed?.OnEventInvoke(); // } // print("You used your key!"); // } // else // { // //UIManager.GetInstance().StartCoroutine(UIManager.GetInstance().DisplayMessage("Locked")); // print("You don't have a key or you have already used it"); // } //} //else //{ #endregion if (keyAndDoorNameMatch) { door.UnlockDoor(); string localizedText = LocalizationSettings.StringDatabase.GetLocalizedString("Messages", "keyUsed"); UIManager.GetInstance().StartCoroutine(UIManager.GetInstance().DisplayMessage(keyUsedMessage)); AudioManager.GetInstance().UnlockDoorClip(_audioSource); if (eventDelegateTriggerOnKeyUsed != null) { eventDelegateTriggerOnKeyUsed?.OnEventInvoke(); print("(eventDelegateTriggerOnKeyUsed) invoked after inserted key in key hole!"); } if(OnKeyUsed!= null) { OnKeyUsed.Invoke(); print("On key used event invoked"); } KeysManager.GetInstance().RemoveKeyNameIDFromList(doorNameID); keyAndDoorNameMatch = false; print("You used your key!"); } else { //UIManager.GetInstance().StartCoroutine(UIManager.GetInstance().DisplayMessage("Locked")); print("You don't have a key or you have already used it"); } //} } } public void OpenInventoryToUseKey() { if (GameplayController.GetInstance().IsOnState(GameplayController.State.InventoryMenu) == false && KeysManager.GetInstance().keyNameID.Contains(doorNameID)) { InventoryManager.GetInstance().OpenInventory(); //StartCoroutine(UpdateInteraction()); } } public void Interact() { OpenInventoryToUseKey(); } public void TryUnlockDoor() { if (KeysManager.GetInstance().keyNameID.Contains(doorNameID) && GameplayController.GetInstance().IsOnState(GameplayController.State.InventoryMenu)) { LookForMatchingKeyAndDoorName(); UseKey(); } } private void LookForMatchingKeyAndDoorName() { //if (!GameplayController.GetInstance().IsOnState(GameplayController.State.InventoryMenu)) //{ // foreach (var name in KeysManager.GetInstance().keyNameID) // { // if (name == doorNameID) // { // keyAndDoorNameMatch = true; // } // } //} //else //{ if (KeysManager.GetInstance().currentlySelectedInventoryKeyNameID == doorNameID) { keyAndDoorNameMatch = true; KeysManager.GetInstance().currentlySelectedKeyAndDoorNameMatch = true; KeysManager.GetInstance().currentlySelectedInventoryKeyNameID = ""; print("Found matching key and door with the same ID"); } else { string localizedText = LocalizationSettings.StringDatabase.GetLocalizedString("Messages", "keyMismatch"); UIManager.GetInstance().DisplayMessageOnScreen(keyMismatchMessage); } //} } //private void OnTriggerStay(Collider col) //{ // if (col.gameObject.tag == "Player") // { // canInsertKey = true; // } //} //private void OnTriggerExit(Collider col) //{ // if (col.gameObject.tag == "Player") // { // canInsertKey = false; // } //} } }