using InfallibleCode; using NUnit.Framework; using System.Collections.Generic; using UnityEngine; using UnityEngine.Playables; using UnityEngine.ProBuilder.Shapes; using UnityEngine.Localization; using UnityEngine.Localization.Settings; public class StabPuzzle : MonoBehaviour, IInteractable { [SerializeField] private string correctKnifeID; [SerializeField] private List wrongKnifesID; public bool knifeIsCorrect; public EventDelegateTrigger eventDelegateTriggerOnKeyUsed; public EventTrigger OnKnifeUsed; public EventTrigger OnCorrectKnifeUsed; public EventTrigger OnWrongKnifeUsed; private AudioSource _audioSource; public LocalizedString wrongKnifeMessage; public void UseKnife() { if (knifeIsCorrect) { if (eventDelegateTriggerOnKeyUsed != null) { eventDelegateTriggerOnKeyUsed?.OnEventInvoke(); print("(eventDelegateTriggerOnKeyUsed) invoked after inserted key in key hole!"); } if (OnKnifeUsed != null) { OnKnifeUsed.Invoke(); print("On key used event invoked"); } KeysManager.GetInstance().RemoveKeyNameIDFromList(correctKnifeID); knifeIsCorrect = false; print("You used your knife!"); } else { print("You don't have a knife or you have already used it"); } } public void Interact() { OpenInventoryToUseKey(); } public void Stab() { foreach (var wrongKnife in wrongKnifesID) { if (KeysManager.GetInstance().keyNameID.Contains(correctKnifeID) || KeysManager.GetInstance().keyNameID.Contains(wrongKnife) && GameplayController.GetInstance().IsOnState(GameplayController.State.InventoryMenu)) { LookForMatchingKnife(); UseKnife(); } } } public void OpenInventoryToUseKey() { foreach (var wrongKnife in wrongKnifesID) { if (GameplayController.GetInstance().IsOnState(GameplayController.State.InventoryMenu) == false && KeysManager.GetInstance().keyNameID.Contains(correctKnifeID) || KeysManager.GetInstance().keyNameID.Contains(wrongKnife)) { InventoryManager.GetInstance().OpenInventory(); } } } private void LookForMatchingKnife() { foreach (var wrongKnife in wrongKnifesID) { if (KeysManager.GetInstance().currentlySelectedInventoryKeyNameID == correctKnifeID) { knifeIsCorrect = true; KeysManager.GetInstance().currentlySelectedKeyAndDoorNameMatch = true; KeysManager.GetInstance().currentlySelectedInventoryKeyNameID = ""; OnCorrectKnifeUsed.Invoke(); print("Found matching Knife and stabable with the same ID"); } else if (KeysManager.GetInstance().currentlySelectedInventoryKeyNameID == wrongKnife) { knifeIsCorrect = false; KeysManager.GetInstance().currentlySelectedInventoryKeyNameID = ""; OnWrongKnifeUsed.Invoke(); } else { string localizedText = LocalizationSettings.StringDatabase.GetLocalizedString("Messages", "wrongKnifeMessage"); UIManager.GetInstance().DisplayMessageOnScreen(wrongKnifeMessage); } } } }