107 lines
3.5 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|