Files
2025-05-29 22:31:40 +03:00

107 lines
3.5 KiB
C#

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<string> 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);
}
}
}
}