|
|
@@ -4,10 +4,20 @@ using UnityEngine;
|
|
|
|
|
|
public class WavePowerSkill : MonoBehaviour
|
|
|
{
|
|
|
+ public enum mode
|
|
|
+ {
|
|
|
+ knockUp, //击飞
|
|
|
+ single, //单体
|
|
|
+ all, //群体
|
|
|
+ }
|
|
|
+
|
|
|
public int cacheID;
|
|
|
public PlayerController pc;
|
|
|
private float curX;
|
|
|
|
|
|
+ [Header("两种模式,模式1:单体,模式2:群体")]
|
|
|
+ public mode curMode;
|
|
|
+
|
|
|
[Header("推出去的过程")]
|
|
|
public float maxLength;
|
|
|
private float curLength;
|
|
|
@@ -23,8 +33,15 @@ public class WavePowerSkill : MonoBehaviour
|
|
|
private Vector3 curForce;
|
|
|
public int damage;
|
|
|
|
|
|
- [Header("持续时间")]
|
|
|
+ [Header("时间")]
|
|
|
public float continueTime;
|
|
|
+ public float hitIntervalTime;
|
|
|
+ private float curHitTime;
|
|
|
+
|
|
|
+ [Header("受控目标")]
|
|
|
+ public List<Enemy> targetEnes = new List<Enemy>();
|
|
|
+ public Enemy singleTarget;
|
|
|
+ public float curMinDis;
|
|
|
|
|
|
private void Start()
|
|
|
{
|
|
|
@@ -50,18 +67,109 @@ public class WavePowerSkill : MonoBehaviour
|
|
|
gameObject.SetActive(false);
|
|
|
}
|
|
|
}
|
|
|
+ AttackMode();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void AttackMode()
|
|
|
+ {
|
|
|
+ switch (curMode)
|
|
|
+ {
|
|
|
+ case mode.knockUp:
|
|
|
+ break;
|
|
|
+ case mode.single:
|
|
|
+ foreach(Enemy ene in targetEnes)
|
|
|
+ {
|
|
|
+ float dis = Mathf.Abs(ene.bodyTrans.position.x - transform.position.x);
|
|
|
+ if (singleTarget == null)
|
|
|
+ {
|
|
|
+ curMinDis = dis;
|
|
|
+ singleTarget = ene;
|
|
|
+ }
|
|
|
+ else if (dis < curMinDis)
|
|
|
+ {
|
|
|
+ singleTarget.ChangeState(CharacterState.Idle);
|
|
|
+ curMinDis = dis;
|
|
|
+ transform.localScale = new Vector3(curX, curMinDis * longFX, 1);
|
|
|
+ singleTarget = ene;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (singleTarget)
|
|
|
+ {
|
|
|
+ if (singleTarget.isDie)
|
|
|
+ {
|
|
|
+ singleTarget = null;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ singleTarget.comaTime = continueTime;
|
|
|
+ singleTarget.ChangeState(CharacterState.Coma);
|
|
|
+ singleTarget.transform.position -= new Vector3(fx * longSpeed * Time.deltaTime, 0, 0);
|
|
|
+ curHitTime += Time.deltaTime;
|
|
|
+ if (curHitTime >= hitIntervalTime)
|
|
|
+ {
|
|
|
+ curHitTime = 0;
|
|
|
+ singleTarget.BeHit(damage, Vector3.zero, false, 0);
|
|
|
+ }
|
|
|
+ curMinDis += longSpeed * Time.deltaTime;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case mode.all:
|
|
|
+ foreach (Enemy ene in targetEnes)
|
|
|
+ {
|
|
|
+ if (!ene.isDie)
|
|
|
+ {
|
|
|
+ ene.comaTime = continueTime;
|
|
|
+ ene.ChangeState(CharacterState.Coma);
|
|
|
+ ene.transform.position -= new Vector3(longSpeed * Time.deltaTime, 0, 0);
|
|
|
+ curHitTime += Time.deltaTime;
|
|
|
+ if (curHitTime >= hitIntervalTime)
|
|
|
+ {
|
|
|
+ curHitTime = 0;
|
|
|
+ ene.BeHit(damage, Vector3.zero, false, 0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void OnTriggerEnter(Collider other)
|
|
|
{
|
|
|
if (other.gameObject.layer == 8)
|
|
|
{
|
|
|
- fx = (int)((Random.Range(0, 2) - 0.5f) * 2);
|
|
|
- curForce = new Vector3(Random.Range(minForceX, maxForceX), Random.Range(minForceY, maxForceY), 0);
|
|
|
- curForce.x = curForce.x * fx;
|
|
|
- other.GetComponentInParent<Enemy>().ChangeState(CharacterState.Weak);
|
|
|
- other.GetComponentInParent<Enemy>().wallDamage = damage;
|
|
|
- other.GetComponentInParent<Rigidbody>().AddForce(curForce);
|
|
|
+ Enemy ene = other.GetComponentInParent<Enemy>();
|
|
|
+ switch (curMode)
|
|
|
+ {
|
|
|
+ case mode.knockUp:
|
|
|
+ fx = (int)((Random.Range(0, 2) - 0.5f) * 2);
|
|
|
+ curForce = new Vector3(Random.Range(minForceX, maxForceX), Random.Range(minForceY, maxForceY), 0);
|
|
|
+ curForce.x *= fx;
|
|
|
+ ene.ChangeState(CharacterState.Weak);
|
|
|
+ ene.wallDamage = damage;
|
|
|
+ ene.rb.AddForce(curForce);
|
|
|
+ break;
|
|
|
+ case mode.single:
|
|
|
+ targetEnes.Add(ene);
|
|
|
+ break;
|
|
|
+ case mode.all:
|
|
|
+ targetEnes.Add(ene);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void OnTriggerExit(Collider other)
|
|
|
+ {
|
|
|
+ if (other.gameObject.layer == 8)
|
|
|
+ {
|
|
|
+ Enemy ene = other.GetComponentInParent<Enemy>();
|
|
|
+ targetEnes.Remove(ene);
|
|
|
+ ene.ChangeState(CharacterState.Idle);
|
|
|
}
|
|
|
}
|
|
|
}
|