74 lines
2.5 KiB
C#
74 lines
2.5 KiB
C#
using BehaviorDesigner.Runtime;
|
|
using BehaviorDesigner.Runtime.Tasks;
|
|
using UnityEngine;
|
|
|
|
public class Conditionals
|
|
{
|
|
public class CheckEnemyState : Conditional
|
|
{
|
|
public SharedInt state;
|
|
|
|
public override TaskStatus OnUpdate()
|
|
{
|
|
Enemy enemy = transform.GetComponent<Enemy>();
|
|
if (enemy == null) return TaskStatus.Failure;
|
|
if (enemy.state == (EnemyState)state.Value)
|
|
{
|
|
return TaskStatus.Success;
|
|
}
|
|
else
|
|
{
|
|
return TaskStatus.Failure;
|
|
}
|
|
}
|
|
}
|
|
|
|
public class EnemyHaveTarget : Conditional
|
|
{
|
|
public override TaskStatus OnUpdate()
|
|
{
|
|
Enemy enemy = transform.GetComponent<Enemy>();
|
|
if (enemy == null) return TaskStatus.Failure;
|
|
return enemy.target == null ? TaskStatus.Failure : TaskStatus.Success;
|
|
}
|
|
}
|
|
|
|
public class EnemyInMaxAtkArea : Conditional
|
|
{
|
|
public override TaskStatus OnUpdate()
|
|
{
|
|
Enemy self = transform.GetComponent<Enemy>();
|
|
if (self == null) return TaskStatus.Failure;
|
|
if (self.target == null) return TaskStatus.Failure;
|
|
TaskStatus res = TaskStatus.Failure;
|
|
EnemyInfo enemyInfo = GameManager.Ins.EnemyInfos[self.type][1];
|
|
UnityEngine.Vector3 x0zSelf = new UnityEngine.Vector3(self.transform.position.x, 0, self.transform.position.z);
|
|
UnityEngine.Vector3 x0zTarget = new UnityEngine.Vector3(self.target.transform.position.x, 0, self.target.transform.position.z);
|
|
float dis = UnityEngine.Vector3.Distance(x0zTarget, x0zSelf);
|
|
if (dis <= enemyInfo.MaxAtkArea)
|
|
{
|
|
res = TaskStatus.Success;
|
|
}
|
|
return res;
|
|
}
|
|
}
|
|
|
|
public class EnemyInMinAtkArea : Conditional
|
|
{
|
|
public override TaskStatus OnUpdate()
|
|
{
|
|
Enemy self = transform.GetComponent<Enemy>();
|
|
if (self == null) return TaskStatus.Failure;
|
|
if (self.target == null) return TaskStatus.Failure;
|
|
TaskStatus res = TaskStatus.Failure;
|
|
EnemyInfo enemyInfo = GameManager.Ins.EnemyInfos[self.type][1];
|
|
float dis = UnityEngine.Vector3.Distance(self.target.transform.position, self.transform.position);
|
|
if (dis <= enemyInfo.MinAtkArea)
|
|
{
|
|
res = TaskStatus.Success;
|
|
}
|
|
return res;
|
|
}
|
|
}
|
|
}
|