162 lines
4.0 KiB
C#
162 lines
4.0 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using DarkTonic.MasterAudio;
|
|
using DG.Tweening;
|
|
using DragonLi.Core;
|
|
using UnityEngine;
|
|
|
|
public class TortoiseBoss : Enemy
|
|
{
|
|
public GameObject clipQuadObj;
|
|
public Transform[] firePoints;
|
|
|
|
public GameObject fireBallPre;
|
|
public GameObject trampleEffectPre;
|
|
|
|
public GameObject skill3Effect;
|
|
|
|
public EnemyBoneHit[] boneHits;
|
|
|
|
public Animator bossAnim;
|
|
|
|
[Header("Drill Move")]
|
|
public float drillMoveSpeed = 12f;
|
|
public float drillRotateSpeed = 720f;
|
|
public LayerMask drillHitMask; // 建筑 / 墙
|
|
public EnemyBoneHit skill3Collider;
|
|
|
|
public Collider mainCollider;
|
|
|
|
|
|
private void Start()
|
|
{
|
|
mainCollider = GetComponent<Collider>();
|
|
clipQuadObj.transform.localPosition = new Vector3(0, -3f, 0);
|
|
foreach (var bone in boneHits)
|
|
{
|
|
bone.SetDamage(Data.Atk_1P);
|
|
}
|
|
skill3Effect.SetActive(false);
|
|
skill3Collider.GetComponent<Collider>().enabled = false;
|
|
skill3Collider.SetDamage(Data.Atk_3);
|
|
}
|
|
|
|
public override void Update()
|
|
{
|
|
base.Update();
|
|
if (enemyState != EnemyState.Show && enemyState != EnemyState.Dead)
|
|
{
|
|
skill1Timer += Time.deltaTime;
|
|
skill2Timer += Time.deltaTime;
|
|
teleportTimer += Time.deltaTime;
|
|
}
|
|
}
|
|
|
|
public void ResetSkill1() => skill1Timer = 0;
|
|
public void ResetSkill2() => skill2Timer = 0;
|
|
public void ResetTeleport() => teleportTimer = 0;
|
|
|
|
public override void Show()
|
|
{
|
|
base.Show();
|
|
GameManager.Ins.PlaySound3D("1.48",transform);
|
|
clipQuadObj.transform.DOLocalMoveY(13, 5).OnComplete(() =>
|
|
{
|
|
Roar();
|
|
CoroutineTaskManager.Instance.WaitSecondTodo(() =>
|
|
{
|
|
isShowEnd = true;
|
|
}, 2f);
|
|
});
|
|
}
|
|
|
|
/// <summary>
|
|
/// 吼叫
|
|
/// </summary>
|
|
public void Roar()
|
|
{
|
|
bossAnim.SetInteger("State",0);
|
|
GameManager.Ins.PlaySound3D("1.2",transform);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 跑
|
|
/// </summary>
|
|
public void Run()
|
|
{
|
|
bossAnim.SetInteger("State", 2);
|
|
GameManager.Ins.PlaySound3D("1.19",transform);
|
|
}
|
|
|
|
public void Idle()
|
|
{
|
|
bossAnim.SetInteger("State", 1);
|
|
GameManager.Ins.PlaySound3D("1.29",transform,true);
|
|
}
|
|
|
|
public IEnumerator Drilling()
|
|
{
|
|
// 关闭导航 & 主碰撞
|
|
aiPath.enabled = false;
|
|
mainCollider.enabled = false;
|
|
|
|
GameManager.Ins.PlaySound3D("1.24", transform, true);
|
|
bossAnim.SetInteger("State", 6); // 钻地开始
|
|
|
|
yield return new WaitForSeconds(4f); // 钻地动画长度
|
|
|
|
bossAnim.SetInteger("State", 7); // 地下状态
|
|
skill3Effect.SetActive(true);
|
|
skill3Collider.enabled = true;
|
|
mainCollider.enabled = true;
|
|
}
|
|
|
|
|
|
public IEnumerator EndDrilling()
|
|
{
|
|
skill3Effect.SetActive(false);
|
|
skill3Collider.enabled = false;
|
|
|
|
bossAnim.SetInteger("State", 8); // 钻出
|
|
|
|
yield return new WaitForSeconds(3f); // 钻出动画
|
|
|
|
// ⚠️ 下一帧再恢复
|
|
yield return null;
|
|
|
|
aiPath.enabled = true;
|
|
mainCollider.enabled = true;
|
|
|
|
GameManager.Ins.PlaySound3D("1.27", transform, true);
|
|
Idle();
|
|
}
|
|
|
|
|
|
public void Trample()
|
|
{
|
|
bossAnim.SetInteger("State", 3);
|
|
MasterAudio.StopAllSoundsOfTransform(transform);
|
|
CoroutineTaskManager.Instance.WaitSecondTodo(() =>
|
|
{
|
|
GameManager.Ins.PlaySound3D("践踏",transform,true);
|
|
ShowTrampEx();
|
|
}, 2f);
|
|
}
|
|
|
|
public void ShowTrampEx()
|
|
{
|
|
GameObject ex= Instantiate(trampleEffectPre,transform.position,Quaternion.identity);
|
|
var exSp= ex.GetComponent<EnemyBoneHit>();
|
|
if(exSp!=null)
|
|
exSp.SetDamage(Data.Atk_1P);
|
|
}
|
|
|
|
void SetHitEnable(bool enable)
|
|
{
|
|
foreach (var hit in boneHits)
|
|
hit.enabled = enable;
|
|
}
|
|
|
|
}
|