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; // Pre-Phase-5b: seeded m_BtlMgrIns from the ambient mgr. All Field*.cs subclass ctors // were stubbed to no-ops in chunk 3; nothing reads m_BtlMgrIns after that cull. Keeping // the field as null in headless is safe (no user of it survives the Field cull). m_BtlMgrIns = null; 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); } private string GetFieldIdString(int fieldId) { return fieldId.ToString((fieldId < 100) ? "00" : "0000"); } protected virtual void BattleFieldBuild() { } protected virtual List CollectAdditionalAssets() { return null; } public virtual void StartFieldSetEffect(Vector3 pos) { } public virtual void StartFieldTapEffect(int areaId, Vector3 pos) { m_BtlMgrIns.BattlePlayer.PlayerBattleView.IsTouchable(); } public void StartFieldOpening() { PlayBgm(); OpeningVfx.OpenningLogStep = "StartFieldOpening"; IsFieldRandom = true; BattleCoroutine.GetInstance().StartCoroutine(RunFieldOpening()); } public void PlayBgm() { } protected virtual IEnumerator RunFieldOpening() { yield return new WaitForSeconds(0f); } public static IEnumerator ObjectChecker(float fWaitSecs, string strObjectFind, Action callback) { // Pre-Phase-5b: polled GameObject.Find + EffectMgr readiness flags. All Field*.cs // subclass BattleFieldBuild bodies were stubbed to no-ops in chunk 3; ObjectChecker // is now only reachable via dead code. Fire the callback immediately. yield return null; callback(); } public void StartFieldGimic(GameObject obj) { if (!m_BtlMgrIns.GameMgr.IsReplayBattle && m_BtlMgrIns.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; } }