using System; using System.Collections; using System.Collections.Generic; using Cute; using UnityEngine; using Wizard.Battle.View.Vfx; public class BackGroundBase { protected string _bgmId; protected BattleCamera _battleCamera; protected GameObject _fieldModel; protected GameObject _fieldParticles; protected IDictionary m_FieldAnimationDictionary; protected IDictionary _fieldObjDictionary; protected IDictionary m_FieldAnimatorDictionary; protected IDictionary _fieldParticleSystemDictionary; protected IDictionary _gimicCntDictionary; public string[] GimicAudioList; protected string _str3DFieldNo; protected string _str3DFieldPath; protected BattleManagerBase m_BtlMgrIns; protected string m_FieldAssetPath; protected List m_SoundAssetPathList; protected float m_RandomActionTime; protected bool IsFieldRandom; private Coroutine battleLoadCoroutine; public virtual int FieldId => 1; public virtual int FieldEffectId => FieldId; public GameObject Field { get; protected set; } public GameObject m_Battle3DContainer { get; protected set; } public GameObject m_BattleCutInContainer { get; protected set; } public SetShaderGlobalColorBG SetShaderGlobalColorBG { get; protected set; } public bool IsLoadDone { get; protected set; } public BackGroundBase(string bgmId = "NONE") { _battleCamera = null; m_Battle3DContainer = null; m_BattleCutInContainer = null; m_BtlMgrIns = BattleManagerBase.GetIns(); IsLoadDone = false; _str3DFieldNo = ""; _str3DFieldPath = ""; m_FieldAssetPath = ""; Field = null; _fieldModel = null; _fieldParticles = null; _bgmId = bgmId; m_RandomActionTime = 0f; IsFieldRandom = false; m_SoundAssetPathList = new List(); _fieldObjDictionary = new Dictionary(); m_FieldAnimationDictionary = new Dictionary(); m_FieldAnimatorDictionary = new Dictionary(); _fieldParticleSystemDictionary = new Dictionary(); _gimicCntDictionary = new Dictionary(); SetShaderGlobalColorBG = null; Physics.gravity = new Vector3(0f, 0f, 9.8f); _str3DFieldNo = GetFieldIdString(FieldId); _gimicCntDictionary.Add("FieldGimic1", 0); _gimicCntDictionary.Add("FieldGimic2", 0); _gimicCntDictionary.Add("FieldGimic3", 0); } public void Dispose() { UnityEngine.Object.DestroyImmediate(Field); Field = null; _fieldModel = null; _fieldParticles = null; _fieldObjDictionary.Clear(); m_FieldAnimationDictionary.Clear(); m_FieldAnimatorDictionary.Clear(); _fieldParticleSystemDictionary.Clear(); m_SoundAssetPathList.Clear(); _gimicCntDictionary.Clear(); SetShaderGlobalColorBG = null; BattleCoroutine.GetInstance().StopCoroutine(battleLoadCoroutine); } public void CreateField(BattleCamera battleCamera, GameObject battle3DContainer, GameObject cutInContainer) { _battleCamera = battleCamera; m_Battle3DContainer = battle3DContainer; m_BattleCutInContainer = cutInContainer; Camera componentInChildren = m_Battle3DContainer.GetComponentInChildren(); Camera component = componentInChildren.transform.Find("Camera 3DGround").GetComponent(); _battleCamera.SetUp(componentInChildren, m_BattleCutInContainer.transform.Find("Camera").GetComponent(), component); LoadField(); } protected void LoadField() { IsLoadDone = false; m_BtlMgrIns = BattleManagerBase.GetIns(); _str3DFieldNo = GetFieldIdString(FieldEffectId); _str3DFieldPath = "3DField" + GetFieldIdString(FieldId); m_SoundAssetPathList.Add($"s/se_field_{_str3DFieldNo}.acb"); m_SoundAssetPathList.Add(string.Format("b/bgm_field_{0}.acb", (_bgmId != "NONE") ? GetFieldIdString(_bgmId) : _str3DFieldNo)); m_SoundAssetPathList.Add(string.Format("b/bgm_field_{0}.awb", (_bgmId != "NONE") ? GetFieldIdString(_bgmId) : _str3DFieldNo)); m_FieldAssetPath = Toolbox.ResourcesManager.GetAssetTypePath(_str3DFieldPath, ResourcesManager.AssetLoadPathType.Field3D); List additionalAssetList = CollectAdditionalAssets(); GameMgr.GetIns().GetEffectMgr().InitCommonEffect(string.Format("Json/FIeld" + _str3DFieldNo + "EffectData", _str3DFieldNo), isBattle: true); battleLoadCoroutine = BattleCoroutine.GetInstance().StartCoroutine(Toolbox.ResourcesManager.LoadAssetGroupAsync(m_SoundAssetPathList, delegate { BattleCoroutine.GetInstance().StartCoroutine(Toolbox.ResourcesManager.LoadAssetAsync(m_FieldAssetPath, delegate { Toolbox.ResourcesManager.BattleListAssetPathList.AddRange(m_SoundAssetPathList); Toolbox.ResourcesManager.BattleListAssetPathList.Add(m_FieldAssetPath); (UnityEngine.Object.Instantiate(Toolbox.ResourcesManager.LoadObject(Toolbox.ResourcesManager.GetAssetTypePath(_str3DFieldPath, ResourcesManager.AssetLoadPathType.Field3D, isfetch: true))) as GameObject).name = _str3DFieldPath; if (additionalAssetList.IsNotNullOrEmpty()) { BattleCoroutine.GetInstance().StartCoroutine(Toolbox.ResourcesManager.LoadAssetGroupAsync(additionalAssetList, delegate { Toolbox.ResourcesManager.BattleListAssetPathList.AddRange(additionalAssetList); BattleFieldBuild(); })); } else { BattleFieldBuild(); } })); })); } private string GetFieldIdString(int fieldId) { return fieldId.ToString((fieldId < 100) ? "00" : "0000"); } private string GetFieldIdString(string fileldId) { if (int.TryParse(fileldId, out var result)) { return result.ToString((result < 100) ? "00" : "0000"); } return fileldId; } protected virtual void BattleFieldBuild() { } protected virtual List CollectAdditionalAssets() { return null; } public virtual void StartFieldSetEffect(Vector3 pos) { } public virtual void StartFieldTapEffect(int areaId, Vector3 pos) { BattleManagerBase.GetIns().BattlePlayer.PlayerBattleView.IsTouchable(); } public void StartFieldOpening() { PlayBgm(); OpeningVfx.OpenningLogStep = "StartFieldOpening"; IsFieldRandom = true; BattleCoroutine.GetInstance().StartCoroutine(RunFieldOpening()); } public void PlayBgm() { GameMgr.GetIns().GetSoundMgr().PlayBGM(string.Format("bgm_field_{0}", (_bgmId != "NONE") ? GetFieldIdString(_bgmId) : _str3DFieldNo), 0f, 0L); } protected virtual IEnumerator RunFieldOpening() { yield return new WaitForSeconds(0f); } public static IEnumerator ObjectChecker(float fWaitSecs, string strObjectFind, Action callback) { while (GameObject.Find(strObjectFind) == null || !GameMgr.GetIns().GetEffectMgr().IsFieldEffectReady || !GameMgr.GetIns().GetEffectMgr().IsBattleUIEffectReady) { yield return null; } callback(); } public void StartFieldGimic(GameObject obj) { if (!GameMgr.GetIns().IsReplayBattle && BattleManagerBase.GetIns().BattlePlayer.PlayerBattleView.IsTouchable()) { BattleCoroutine.GetInstance().StartCoroutine(RunFieldGimic(obj)); } } protected virtual IEnumerator RunFieldGimic(GameObject obj) { yield return new WaitForSeconds(0f); } public void StartFieldShake() { BattleCoroutine.GetInstance().StartCoroutine(RunFieldShake()); } protected virtual IEnumerator RunFieldShake() { yield return new WaitForSeconds(0f); } public virtual void UpdateFieldRandom() { } public void AddParticleToFieldObjDictionary(string targetPath) { string[] array = targetPath.Split('/'); List list = new List(); list.Add(_fieldParticles.transform); List list2 = new List(); for (int i = 0; i < array.Length; i++) { list2 = new List(); for (int j = 0; j < list.Count; j++) { list2.AddRange(FindAllChildByName(list[j], array[i])); } list = new List(list2); } for (int k = 0; k < list2.Count; k++) { _fieldObjDictionary.Add(targetPath + "_" + k, list2[k].gameObject); } } public List FindAllChildByName(Transform parent, string name) { List list = new List(); for (int i = 0; i < parent.childCount; i++) { Transform child = parent.GetChild(i); if (child.name == name) { list.Add(child); } } return list; } }