141 lines
3.8 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|