Scriptum/Assets/Scripts/REFACTORING/Application/NPC/NpcDialogueManager.cs
2022-12-23 16:02:04 +01:00

76 lines
2.6 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Events;
[RequireComponent(typeof(NPC))]
public class NpcDialogueManager : DialogueManager
{
public override void Start()
{
base.Start();
CanBeOpened = false;
}
public override bool OpenPanelCondition()
{
/*
* Conditions:
* - npc bust me in Talking mode
* - player is in collision range
* - panel assigned to next sentence in dialogue must be closed
*/
return gameObject.GetComponent<NPC>().State == NPCStateEnum.Talking && base.OpenPanelCondition();
}
protected virtual bool ColliderTypeCondition()
{
return !gameObject.GetComponent<NpcDialogueManager>().enabled;
}
/// <summary>
/// Function to invoke actions declared in manager on object from scene not onto asset
///
/// Used in Dialogue ScriptableObject Template
/// </summary>
/// <param name="dialogueIndex"></param>
public void DialogueEndAction(int dialogueIndex)
{
GameObject.FindObjectsOfType<NpcDialogueManager>().Where(obj => obj.name == gameObject.name).First().GetComponent<NpcDialogueManager>().InvokeDialogueEndAction(dialogueIndex);
}
/// <summary>
/// Function to invoke actions declared in manager (on current object)
///
/// Use this to invoke actions which we want to occured after specific Dialogue
/// </summary>
/// <param name="dialogueIndex"></param>
protected void InvokeDialogueEndAction(int dialogueIndex)
{
EndactionEventList.Where(el => el.Key.Key == dialogueIndex).ToList().ForEach(el => el.Value.Invoke());
}
/// <summary>
/// Function to invoke actions declared in manager on object from scene not onto asset
///
/// Used in Dialogue ScriptableObject Template
/// </summary>
public void StepEndAction()
{
GameObject.FindObjectsOfType<NpcDialogueManager>().Where(obj => obj.name == gameObject.name).First().GetComponent<NpcDialogueManager>().InvokeStepEndAction();
}
/// <summary>
/// Function to invoke actions declared in manager (on current object)
///
/// Use this to invoke actions which we want to occured after specific Dialogue Step
/// </summary>
protected void InvokeStepEndAction()
{
var dialogueProgress = Dialogue.DialogueStepStatus();
EndactionEventList.Where(el => el.Key.Key == dialogueProgress.Item1 & el.Key.Value == dialogueProgress.Item2).ToList().ForEach(el => el.Value.Invoke());
}
}