Files
SVSimServer/SVSim.BattleEngine/Engine/BackGroundBase.cs
gamer147 0d9d8acae0 feat(battle-engine): M1 auto-copy closure (782 battle-logic files)
Compile-driven bulk-copy loop (tools/engine-port/m1_copy_loop.py) pulled the precise reference closure of the battle-core roots, stopping at the classify god-object/View-VFX-UI boundary. 782 files; no re-explosion (M0 had estimated ~order 1000). Residual frontier = 52 shim-classified + 80 external (Unity/BCL) types to author next.
2026-06-05 16:57:20 -04:00

273 lines
8.3 KiB
C#

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<string, Animation> m_FieldAnimationDictionary;
protected IDictionary<string, GameObject> _fieldObjDictionary;
protected IDictionary<string, Animator> m_FieldAnimatorDictionary;
protected IDictionary<string, ParticleSystem> _fieldParticleSystemDictionary;
protected IDictionary<string, int> _gimicCntDictionary;
public string[] GimicAudioList;
protected string _str3DFieldNo;
protected string _str3DFieldPath;
protected BattleManagerBase m_BtlMgrIns;
protected string m_FieldAssetPath;
protected List<string> 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<string>();
_fieldObjDictionary = new Dictionary<string, GameObject>();
m_FieldAnimationDictionary = new Dictionary<string, Animation>();
m_FieldAnimatorDictionary = new Dictionary<string, Animator>();
_fieldParticleSystemDictionary = new Dictionary<string, ParticleSystem>();
_gimicCntDictionary = new Dictionary<string, int>();
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>();
Camera component = componentInChildren.transform.Find("Camera 3DGround").GetComponent<Camera>();
_battleCamera.SetUp(componentInChildren, m_BattleCutInContainer.transform.Find("Camera").GetComponent<UICamera>(), 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<string> 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<string> 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<Transform> list = new List<Transform>();
list.Add(_fieldParticles.transform);
List<Transform> list2 = new List<Transform>();
for (int i = 0; i < array.Length; i++)
{
list2 = new List<Transform>();
for (int j = 0; j < list.Count; j++)
{
list2.AddRange(FindAllChildByName(list[j], array[i]));
}
list = new List<Transform>(list2);
}
for (int k = 0; k < list2.Count; k++)
{
_fieldObjDictionary.Add(targetPath + "_" + k, list2[k].gameObject);
}
}
public List<Transform> FindAllChildByName(Transform parent, string name)
{
List<Transform> list = new List<Transform>();
for (int i = 0; i < parent.childCount; i++)
{
Transform child = parent.GetChild(i);
if (child.name == name)
{
list.Add(child);
}
}
return list;
}
}