From 97da432c35b8c7aaf9dd2c39e2aa4b1f55f36065 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 27 Jan 2021 16:15:06 +0800 Subject: +behaviour designer --- .../Behavior Designer/AI/Actions/XAIActionMove.cs | 280 +++++++++++++++++++++ 1 file changed, 280 insertions(+) create mode 100644 Client/Assets/Behavior Designer/AI/Actions/XAIActionMove.cs (limited to 'Client/Assets/Behavior Designer/AI/Actions/XAIActionMove.cs') diff --git a/Client/Assets/Behavior Designer/AI/Actions/XAIActionMove.cs b/Client/Assets/Behavior Designer/AI/Actions/XAIActionMove.cs new file mode 100644 index 00000000..132e6279 --- /dev/null +++ b/Client/Assets/Behavior Designer/AI/Actions/XAIActionMove.cs @@ -0,0 +1,280 @@ +using UnityEngine; +using System.Collections.Generic; +using BehaviorDesigner.Runtime; +using BehaviorDesigner.Runtime.Tasks; +using XUtliPoolLib; + +public enum MoveDirection +{ + TowardTarget = 1, + ReverseTarget = 2, + SelfFaceDir = 3, + ReverseFaceDir = 4, +} + +public enum SetDestWay +{ + Target = 1, + BornPos = 2, + NavPos = 3, +} + +public enum AdjustDirection +{ + TargetDir = 1, + TargetFace = 2, + SelfFace = 3, +} + +public class NavToTarget : Action +{ + public SharedTransform mAIArgTarget; + public SharedTransform mAIArgNavTarget; + public SharedVector3 mAIArgNavPos; + + public override TaskStatus OnUpdate() + { + if (mAIArgTarget.GetValue() == null) + { + if (mAIArgNavTarget.GetValue() == null) + { + if (mAIArgNavPos.Value == Vector3.zero) + return TaskStatus.Failure; + else + { + if (AIMgrUtil.GetAIMgrInterface().ActionNav(transform.gameObject, mAIArgNavPos.Value)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } + + } + else + { + if (AIMgrUtil.GetAIMgrInterface().NavToTarget(transform.gameObject, mAIArgNavTarget.Value.gameObject)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } + } + else + { + if (AIMgrUtil.GetAIMgrInterface().NavToTarget(transform.gameObject, mAIArgTarget.Value.gameObject)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } + + //return TaskStatus.Success; + } +} + +public class RotateToTarget : Action +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().RotateToTarget(transform.gameObject)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class DetectEnimyInSight : Action +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().DetectEnimyInSight(transform.gameObject)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class ActionMove : Action +{ + public SharedVector3 mAIArgMoveDir; + public SharedVector3 mAIArgMoveDest; + public SharedFloat mAIArgMoveSpeed; + + public override TaskStatus OnUpdate() + { + if ((mAIArgMoveDest.Value - transform.position).magnitude <= 0.01f) + return TaskStatus.Failure; + + if (mAIArgMoveDir.Value == Vector3.zero) + { + mAIArgMoveDir.Value = (mAIArgMoveDest.Value - transform.position).normalized; + mAIArgMoveDir.Value.Set(mAIArgMoveDir.Value.x, 0, mAIArgMoveDir.Value.z); + } + + if (mAIArgMoveDest.Value == Vector3.zero) + { + mAIArgMoveDest.Value = transform.position + mAIArgMoveDir.Value.normalized * 50; + } + + if (AIMgrUtil.GetAIMgrInterface().ActionMove(transform.gameObject, mAIArgMoveDir.Value, mAIArgMoveDest.Value, mAIArgMoveSpeed.Value)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + + +public class SetDest : Action +{ + public SharedVector3 mAIArgFinalDest; + public SharedTransform mAIArgTarget; + public SharedTransform mAIArgNav; + public SharedVector3 mAIArgBornPos; + public SharedInt mAIArgTickCount; + + public float mAIArgRandomMax; + + public float mAIArgAdjustAngle; + public SharedFloat mAIArgAdjustLength; + public AdjustDirection mAIArgAdjustDir; + + public SetDestWay mAIArgSetDestType; + + private Vector3 _pos_vec; + + public override void OnAwake() + { + base.OnAwake(); + + _pos_vec = new Vector3(1.0f, 0, 1.0f); + } + + public override TaskStatus OnUpdate() + { + switch (mAIArgSetDestType) + { + case SetDestWay.Target: + if (mAIArgTarget.Value == null) + return TaskStatus.Failure; + mAIArgFinalDest.Value = mAIArgTarget.Value.position; + break; + case SetDestWay.BornPos: + //if (mAIArgBornPos.Value == null) + // return TaskStatus.Failure; + mAIArgFinalDest.Value = mAIArgBornPos.Value; + break; + case SetDestWay.NavPos: + if (mAIArgNav.Value == null) + return TaskStatus.Failure; + mAIArgFinalDest.Value = mAIArgNav.Value.position; + break; + } + + if (mAIArgAdjustLength.Value != 0) + { + Vector3 vec = Vector3.zero; + + if (mAIArgAdjustDir == AdjustDirection.TargetDir) + vec = transform.position - mAIArgFinalDest.Value; + else if (mAIArgAdjustDir == AdjustDirection.TargetFace && mAIArgTarget.Value != null) + vec = mAIArgTarget.Value.forward.normalized; + else if (mAIArgAdjustDir == AdjustDirection.SelfFace) + vec = transform.forward.normalized; + + int randcount = mAIArgTickCount.Value; + + Vector3 adjustDir = (Quaternion.Euler(new Vector3(0, (randcount % 2) * mAIArgAdjustAngle * 2 - mAIArgAdjustAngle, 0)) * vec); + Vector3 dest = mAIArgFinalDest.Value + adjustDir.normalized * mAIArgAdjustLength.Value; + + if (!AIMgrUtil.GetAIMgrInterface().IsPointInMap(dest)) + { + for (int i=0; i<18; i++) + { + float angle = mAIArgAdjustAngle + i * 10; + adjustDir = (Quaternion.Euler(new Vector3(0, (randcount % 2) * angle * 2 - angle, 0)) * vec); + dest = mAIArgFinalDest.Value + adjustDir.normalized * mAIArgAdjustLength.Value; + + if (AIMgrUtil.GetAIMgrInterface().IsPointInMap(dest)) + break; + + angle = mAIArgAdjustAngle - i * 10; + adjustDir = (Quaternion.Euler(new Vector3(0, (randcount % 2) * angle * 2 - angle, 0)) * vec); + dest = mAIArgFinalDest.Value + adjustDir.normalized * mAIArgAdjustLength.Value; + + if (AIMgrUtil.GetAIMgrInterface().IsPointInMap(dest)) + break; + } + } + mAIArgFinalDest.Value = dest; + } + + if (mAIArgRandomMax > 0) + { + _pos_vec.x = (float)XCommon.singleton.RandomFloat(-0.5f, 0.5f); + _pos_vec.z = (float)XCommon.singleton.RandomFloat(-0.5f, 0.5f); + mAIArgFinalDest.Value += mAIArgRandomMax * _pos_vec.normalized; + } + + return TaskStatus.Success; + } +} + +public class MoveStratage : Action +{ + public SharedTransform mAIArgTarget; + public int mAIArgStratageIndex; + public SharedVector3 mAIArgFinalDest; + + public override TaskStatus OnUpdate() + { + return TaskStatus.Success; + } +} + +public class ActionRotate : Action +{ + public enum RotateType + { + Relative = 0, + Absolute = 1, + } + + public float mAIArgRotDegree; + public float mAIArgRotSpeed; + public RotateType mAIArgRotType; + + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().ActionRotate(transform.gameObject, mAIArgRotDegree, mAIArgRotSpeed, XFastEnumIntEqualityComparer.ToInt(mAIArgRotType))) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class ConditionCanReach : Action +{ + public SharedInt mAIArgTemplateid; + public SharedVector3 mAIArgDestPos; + + public override TaskStatus OnUpdate() + { + return TaskStatus.Success; + } +} + +public class Navigation : Action +{ + public SharedInt mAIArgMoveDir; + public float mAIArgPatrolPointRadius; + public bool mAIArgIsGoForward; + + private int oldDir = 1; + + public override TaskStatus OnUpdate() + { + int olddir = oldDir; + oldDir = mAIArgMoveDir.Value; + if (AIMgrUtil.GetAIMgrInterface().UpdateNavigation(transform.gameObject, oldDir, olddir)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} \ No newline at end of file -- cgit v1.1-26-g67d0