79 lines
2.7 KiB
C#
79 lines
2.7 KiB
C#
|
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<WuChangGhostController>();
|
|||
|
}
|
|||
|
|
|||
|
_bombers[0] = bomberExample.gameObject.AddComponent<WuChangGhostController>();
|
|||
|
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;
|
|||
|
}
|
|||
|
}
|