using GCGame.Table; using Module.Log; using UnityEngine; public class WuChangGhostAuraController : MonoBehaviour, IParticleCleaner { private WuChangGhostController[] _bombers; private float _intervalDegree; private float _radius; private float _speedDegree; public Vector3 ownerPos { get; set; } public float DelayRecoveryTime { get { return 0; } } public void StartDelayRecovery() { } public void Init(int bomberCount, Tab_Effect data) { var radius = data.GetParamValuebyIndex(0) * 0.01f; var rotateRate = data.GetParamValuebyIndex(1); var returnSpeed = data.GetParamValuebyIndex(2) * 0.01f; _bombers = new WuChangGhostController[bomberCount]; if (bomberCount > 0) { var bomberExample = transform.Find("Bomber"); for (var i = 1; i < bomberCount; i++) { var bomberTrans = Instantiate(bomberExample); bomberTrans.SetParent(bomberExample.parent); bomberTrans.localPosition = bomberExample.localPosition; bomberTrans.localRotation = bomberExample.localRotation; bomberTrans.localScale = bomberExample.localScale; _bombers[i] = bomberTrans.gameObject.AddComponent(); } _bombers[0] = bomberExample.gameObject.AddComponent(); for (var i = 0; i < bomberCount; i++) _bombers[i].Init(this, i, returnSpeed); _intervalDegree = 360f / bomberCount; _speedDegree = rotateRate; _radius = radius; } else { LogModule.ErrorLog("无常幽灵数量配置为0!"); } } public void AttackTarget(Transform target, Vector3 offset, float impactTime) { var targetPos = target.position + offset; WuChangGhostController bomber = null; var lastDistSqr = float.PositiveInfinity; for (var i = 0; i < _bombers.Length; i++) if (_bombers[i].state == WuChangGhostController.GhostState.Docked) { var distSqr = (_bombers[i].transform.position - targetPos).sqrMagnitude; if (distSqr < lastDistSqr) { lastDistSqr = distSqr; bomber = _bombers[i]; } } if (bomber != null) bomber.AttackTarget(target, offset, impactTime); } public Vector3 GetHangerPosition(int index) { var degree = Time.unscaledTime * _speedDegree + index * _intervalDegree; return ownerPos + Quaternion.Euler(0f, degree, 0f) * Vector3.forward * _radius; } }