using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics.Contracts; using BansheeGz.BGDatabase; using TMPro; //using Unity.Android.Gradle; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; using UnityEngine.UI; public class EventScript : MonoBehaviour { [SerializeField] private Image AIImage; [SerializeField] private GameObject ScriptPanel; [SerializeField] private TextMeshProUGUI ScriptTMP; [SerializeField] private TextMeshProUGUI CharacterNameTMP; [SerializeField] private GameObject scriptEndPoint = null; [SerializeField] private CanvasGroup cg; private DB_EventData eventData; private DB_EventScript eventScriptData; private int scriptIndex = 0; private int scriptArraySize = 0; private IEnumerator typingCoroutine = null; private IEnumerator checkFailLoadImageCoroutine = null; private AsyncOperationHandle spriteHandle; private AsyncOperationHandle beforeSpriteHandle; private string currentSpriteLoadAdress; private BGId eventID; private bool isFirstHuntingData = false; private string BGMtypeName; WaitForSeconds typingSecond = new WaitForSeconds(0.008f); private void Awake() { if (GameManager.Instance != null) { //GameManager.Event.RegistEvent(EEventType.OnClickFullView, this.OnClickFullView); //GameManager.Event.RegistEvent(EEventType.OnReturnFullView, this.OnReturnFullView); } cg.alpha = 0f; cg.interactable = false; cg.blocksRaycasts = false; } private void OnDestroy() { if (GameManager.Instance != null) { //GameManager.Event.RemoveEvent(EEventType.OnClickFullView, this.OnClickFullView); //GameManager.Event.RemoveEvent(EEventType.OnReturnFullView, this.OnReturnFullView); } if (spriteHandle.IsValid()) { Addressables.Release(spriteHandle); } } public void InitEventScript(BGId eventID) { this.eventID = eventID; if (spriteHandle.IsValid() == true) { Addressables.Release(spriteHandle); } if (beforeSpriteHandle.IsValid() == true) { Addressables.Release(beforeSpriteHandle); } if (checkFailLoadImageCoroutine != null) { StopCoroutine(checkFailLoadImageCoroutine); checkFailLoadImageCoroutine = null; } checkFailLoadImageCoroutine = CheckFailLoadImage(); StartCoroutine(CheckFailLoadImage()); eventData = DB_EventData.GetEntity(eventID); if (eventData != null) { spriteHandle = Addressables.LoadAssetAsync(eventData.DBF_EventScript[0].GetDBF_ImageAddressablesAddress()); if (!spriteHandle.IsDone) { spriteHandle.Completed += handle => { if (checkFailLoadImageCoroutine != null) { StopCoroutine(checkFailLoadImageCoroutine); checkFailLoadImageCoroutine = null; } GameManager.UI.DeactivateLoadingPage(); if (handle.Status == AsyncOperationStatus.Succeeded) { AIImage.sprite = handle.Result; ActivateEventScript(); } else { //Logging.LogWarning("huntingImage sprite is not Load"); } }; } else { if (checkFailLoadImageCoroutine != null) { StopCoroutine(checkFailLoadImageCoroutine); checkFailLoadImageCoroutine = null; } GameManager.UI.DeactivateLoadingPage(); if (spriteHandle.Status == AsyncOperationStatus.Succeeded) { AIImage.sprite = spriteHandle.Result; ActivateEventScript(); } else { //Logging.LogWarning("huntingImage sprite is not Load"); } } } } private void OnReturnFullView() { GameManager.Sound.PlayBGM(EBGMType.BGM_1); cg.alpha = 0f; cg.interactable = false; cg.blocksRaycasts = false; if (spriteHandle.IsValid() == true) { Addressables.Release(spriteHandle); } if (beforeSpriteHandle.IsValid() == true) { Addressables.Release(beforeSpriteHandle); } GameObject.Destroy(gameObject); } private void ActivateEventScript() { cg.alpha = 1f; cg.interactable = true; cg.blocksRaycasts = true; // ´ë»ç ½ÃÀÛÇϱâ scriptIndex = 0; scriptArraySize = eventData.DBF_EventScript.Count; ScriptPanel.gameObject.SetActive(true); PlayTypingScript(); string bgmName = eventData.DBF_EventScript[scriptIndex].DBF_BGM; if (bgmName != null && bgmName != BGMtypeName) { BGMtypeName = bgmName; GameManager.Sound.PlayBGM((EBGMType)Enum.Parse(typeof(EBGMType), BGMtypeName)); } BGMtypeName = eventData.DBF_EventScript[scriptIndex].DBF_BGM; GameManager.Sound.PlayBGM((EBGMType)Enum.Parse(typeof(EBGMType), BGMtypeName)); } // ¹öư Ŭ¸¯ public void ClickReturnFullView() { OnReturnFullView(); } public void ClickPlaySciprt() { if (typingCoroutine != null) { StopCoroutine(typingCoroutine); typingCoroutine = null; PlayScript(); } else { if (scriptArraySize > scriptIndex + 1) { scriptIndex++; SetEventImage(); string bgmName = eventData.DBF_EventScript[scriptIndex].DBF_BGM; if (bgmName != null && bgmName != BGMtypeName) { BGMtypeName = bgmName; GameManager.Sound.PlayBGM((EBGMType)Enum.Parse(typeof(EBGMType), BGMtypeName)); } PlayTypingScript(); } else { //GameManager.Event.InvokeEvent(EEventType.OnReturnFullView); OnReturnFullView(); } } } private void PlayTypingScript() { eventScriptData = eventData.DBF_EventScript[scriptIndex] as DB_EventScript; if (eventScriptData != null) { scriptEndPoint.gameObject.SetActive(false); if (eventScriptData.DBF_CharacterName == null) { CharacterNameTMP.transform.parent.gameObject.SetActive(false); } else { CharacterNameTMP.transform.parent.gameObject.SetActive(true); CharacterNameTMP.text = eventScriptData.DBF_CharacterName; } typingCoroutine = Typing(eventScriptData.DBF_EventScript); StartCoroutine(typingCoroutine); } } private void PlayScript() { eventScriptData = eventData.DBF_EventScript[scriptIndex] as DB_EventScript; if (eventScriptData != null) { scriptEndPoint.gameObject.SetActive(true); if (eventScriptData.DBF_CharacterName == null) { CharacterNameTMP.transform.parent.gameObject.SetActive(false); } else { CharacterNameTMP.transform.parent.gameObject.SetActive(true); CharacterNameTMP.text = eventScriptData.DBF_CharacterName; } ScriptTMP.text = String.Empty; ScriptTMP.text = eventScriptData.DBF_EventScript; } } IEnumerator Typing(string script) { ScriptTMP.text = String.Empty; for (int i = 0; i < script.Length; i++) { ScriptTMP.text += script[i]; yield return typingSecond; } scriptEndPoint.gameObject.SetActive(true); typingCoroutine = null; } private IEnumerator CheckFailLoadImage() { GameManager.UI.ActivateLoadingPage(); yield return new WaitForSeconds(3.0f); GameManager.UI.DeactivateLoadingPage(); } private void SetEventImage() { currentSpriteLoadAdress = eventData.DBF_EventScript[scriptIndex].GetDBF_ImageAddressablesAddress(); if (currentSpriteLoadAdress == null) { return; } if (beforeSpriteHandle.IsValid() == true) { Addressables.Release(beforeSpriteHandle); } beforeSpriteHandle = spriteHandle; spriteHandle = Addressables.LoadAssetAsync(currentSpriteLoadAdress); spriteHandle.Completed += handle => { if (handle.Status == AsyncOperationStatus.Succeeded) { if (beforeSpriteHandle.IsValid() == true) { Addressables.Release(beforeSpriteHandle); } AIImage.sprite = handle.Result; } else { Debug.LogWarning("huntingImage sprite is not Load"); } }; } }