Files
AliceBall/Assets/_Alice/Scripts/Enemy/EnemyAction.cs
2025-07-23 18:47:59 +08:00

141 lines
3.8 KiB
C#

using System.Collections;
using System.Collections.Generic;
using BehaviorDesigner.Runtime;
using BehaviorDesigner.Runtime.Tasks;
using DarkTonic.MasterAudio;
using DG.Tweening;
using UnityEngine;
public class EnemyAction : Action
{
public class CheckEnemyState :Conditional
{
public SharedInt state;
public override TaskStatus OnUpdate()
{
Enemy aiTourGuide = transform.GetComponent<Enemy>();
if (aiTourGuide == null) return TaskStatus.Failure;
if (aiTourGuide.state == state.Value)
{
return TaskStatus.Success;
}
else
{
return TaskStatus.Failure;
}
}
}
public class SetEnemyState : Action
{
public SharedInt state;
public override TaskStatus OnUpdate()
{
Enemy enemy = transform.GetComponent<Enemy>();
if (enemy == null)
return TaskStatus.Failure;
GameManager.Ins.enemy.state=state.Value;
return TaskStatus.Success;
}
}
public class PlayEnemyAudio : Action
{
public SharedBool IsStop;
public SharedString AudioName;
public SharedBool IsBack;
private Enemy _enemy;
public override void OnStart()
{
base.OnStart();
//_enemy = transform.GetComponent<Enemy>();
if(IsStop.Value)
MasterAudio.StopAllSoundsOfTransform(transform);
MasterAudio.PlaySound3DAtTransform(AudioName.Value, transform);
}
public override TaskStatus OnUpdate()
{
base.OnUpdate();
TaskStatus status = TaskStatus.Running;
MasterAudioGroup audioGroup = MasterAudio.GrabGroup(AudioName.Value);
if (audioGroup == null)
{
status = TaskStatus.Failure;
}
else if (audioGroup.ActiveVoices <= 0|| IsBack.Value)
{
status = TaskStatus.Success;
}
return status;
}
}
public class TurnToSelfTask : Action
{
public SharedVector3 targetPosition;
public float rotationSpeed = 1f; // 转向速度
private bool isOver=false;
public override TaskStatus OnUpdate()
{
return TaskStatus.Success;
// 平滑朝向玩家
transform.eulerAngles = Vector3.Slerp(transform.eulerAngles, targetPosition.Value, Time.deltaTime * 2f);
if(transform.eulerAngles==targetPosition.Value)
return TaskStatus.Success;
return TaskStatus.Running; // 如果未接近目标,继续运行
}
}
public class WaitStartTask: Action
{
public SharedBool IsStart;
public override TaskStatus OnUpdate()
{
if (IsStart.Value)
return TaskStatus.Success;
return TaskStatus.Running;
}
}
public class SetAttackTask: Action
{
public SharedInt AttackMode;
public int curAttackMode;
public override TaskStatus OnUpdate()
{
AttackMode = curAttackMode;
return TaskStatus.Success;
}
}
public class IsEnemyDie:Conditional
{
public override TaskStatus OnUpdate()
{
Enemy enemy = GetComponent<Enemy>();
if(enemy.hp<=0)
return TaskStatus.Success;
return TaskStatus.Failure;
}
}
public class EnemyHit:Action
{
public override TaskStatus OnUpdate()
{
Enemy enemy = transform.GetComponent<Enemy>();
if (enemy.isHit)
return TaskStatus.Running;
return TaskStatus.Success;
}
}
}