using System; using PixelCrushers.DialogueSystem; using PixelCrushers.DialogueSystem.Wrappers; using System.Collections; using System.Collections.Generic; using Beyond; using PixelCrushers; using UnityEngine; [RequireComponent(typeof(AudioSource))] public class QuestTriggerBase : Saver { AudioSource m_audioSource; Transform m_player; public bool m_fireOnce = true; public bool m_wasFired = false; [Serializable] public class SaveData { public bool wasFired; } // Start is called before the first frame update virtual public void Awake() { m_audioSource = GetComponent(); m_audioSource.playOnAwake = false; gameObject.layer = LayerMask.NameToLayer("Triggers"); var collider = GetComponent(); if (collider != null) { collider.isTrigger = true; } if (Player.Instance == null) { Debug.LogError("No player found!"); Destroy(this); return; } m_player = Player.Instance.transform; } public virtual void Start() { Player.Instance.ThirdPersonController.onDead.AddListener(OnDead); } public virtual void OnDestroy() { if (Player.Instance != null && Player.Instance.ThirdPersonController != null) Player.Instance.ThirdPersonController.onDead.RemoveListener(OnDead); } private void OnDead(GameObject arg0) { if (m_audioSource.isPlaying) { m_audioSource.Stop(); } } public override string RecordData() { SaveData data = new SaveData(); data.wasFired = m_wasFired; return SaveSystem.Serialize(data); } public override void ApplyData(string s) { var data = SaveSystem.Deserialize(s); if (data == null) data = new SaveData(); m_wasFired = data.wasFired; } private IEnumerator ResponseCoroutine(ActionResponse action) { if (action.delay > 0f) yield return new WaitForSeconds(action.delay); if (action.audioClip != null) { m_audioSource.clip = action.audioClip; m_audioSource.Play(); } if (action.barkText != null && action.barkText != "") { DialogueManager.BarkString(action.barkText, m_player); } if (action.responseEvent != null) { action.responseEvent?.Invoke(); } yield return null; } public virtual void OnActionResponse(ActionResponse action) { StartCoroutine(ResponseCoroutine(action)); } }