From 97da432c35b8c7aaf9dd2c39e2aa4b1f55f36065 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 27 Jan 2021 16:15:06 +0800 Subject: +behaviour designer --- Client/Assets/Behavior Designer/AI/Actions.meta | 7 + .../AI/Actions/XAIActionCastSkill.cs | 166 +++++++++ .../AI/Actions/XAIActionCastSkill.cs.meta | 8 + .../Behavior Designer/AI/Actions/XAIActionMove.cs | 280 ++++++++++++++ .../AI/Actions/XAIActionMove.cs.meta | 8 + .../Behavior Designer/AI/Actions/XAIActionOther.cs | 403 +++++++++++++++++++++ .../AI/Actions/XAIActionOther.cs.meta | 8 + .../AI/Actions/XAIActionTarget.cs | 236 ++++++++++++ .../AI/Actions/XAIActionTarget.cs.meta | 8 + .../Assets/Behavior Designer/AI/Conditionals.meta | 7 + .../AI/Conditionals/XAIConditionStatus.cs | 172 +++++++++ .../AI/Conditionals/XAIConditionStatus.cs.meta | 8 + .../AI/Conditionals/XAIConditionValue.cs | 216 +++++++++++ .../AI/Conditionals/XAIConditionValue.cs.meta | 8 + .../Behavior Designer/AI/XAICreateBehaviorTree.cs | 29 ++ .../AI/XAICreateBehaviorTree.cs.meta | 8 + 16 files changed, 1572 insertions(+) create mode 100644 Client/Assets/Behavior Designer/AI/Actions.meta create mode 100644 Client/Assets/Behavior Designer/AI/Actions/XAIActionCastSkill.cs create mode 100644 Client/Assets/Behavior Designer/AI/Actions/XAIActionCastSkill.cs.meta create mode 100644 Client/Assets/Behavior Designer/AI/Actions/XAIActionMove.cs create mode 100644 Client/Assets/Behavior Designer/AI/Actions/XAIActionMove.cs.meta create mode 100644 Client/Assets/Behavior Designer/AI/Actions/XAIActionOther.cs create mode 100644 Client/Assets/Behavior Designer/AI/Actions/XAIActionOther.cs.meta create mode 100644 Client/Assets/Behavior Designer/AI/Actions/XAIActionTarget.cs create mode 100644 Client/Assets/Behavior Designer/AI/Actions/XAIActionTarget.cs.meta create mode 100644 Client/Assets/Behavior Designer/AI/Conditionals.meta create mode 100644 Client/Assets/Behavior Designer/AI/Conditionals/XAIConditionStatus.cs create mode 100644 Client/Assets/Behavior Designer/AI/Conditionals/XAIConditionStatus.cs.meta create mode 100644 Client/Assets/Behavior Designer/AI/Conditionals/XAIConditionValue.cs create mode 100644 Client/Assets/Behavior Designer/AI/Conditionals/XAIConditionValue.cs.meta create mode 100644 Client/Assets/Behavior Designer/AI/XAICreateBehaviorTree.cs create mode 100644 Client/Assets/Behavior Designer/AI/XAICreateBehaviorTree.cs.meta (limited to 'Client/Assets/Behavior Designer/AI') diff --git a/Client/Assets/Behavior Designer/AI/Actions.meta b/Client/Assets/Behavior Designer/AI/Actions.meta new file mode 100644 index 00000000..d4ccbe1e --- /dev/null +++ b/Client/Assets/Behavior Designer/AI/Actions.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8395c8fc1ba13ea43b23ac3a8f7473fa +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Behavior Designer/AI/Actions/XAIActionCastSkill.cs b/Client/Assets/Behavior Designer/AI/Actions/XAIActionCastSkill.cs new file mode 100644 index 00000000..9db35f96 --- /dev/null +++ b/Client/Assets/Behavior Designer/AI/Actions/XAIActionCastSkill.cs @@ -0,0 +1,166 @@ +using UnityEngine; +using System.Collections.Generic; +using BehaviorDesigner.Runtime; +using BehaviorDesigner.Runtime.Tasks; + +public enum ComboSkillType +{ + StartSkill, + ComboSkill, +} + +public class PhysicalAttack : Action +{ + public SharedTransform mAIArgTarget; + + public override TaskStatus OnUpdate() + { + if (mAIArgTarget.Value == null) + return TaskStatus.Failure; + + if (AIMgrUtil.GetAIMgrInterface().TryCastPhysicalSkill(transform.gameObject, mAIArgTarget.Value.gameObject)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class TryCastQTE : Action +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().CastQTESkill(transform.gameObject)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class CastDash : Action +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().CastDashSkill(transform.gameObject)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class CastStartSkill : Action +{ + public SharedTransform mAIArgTarget; + public override TaskStatus OnUpdate() + { + return TaskStatus.Failure; + } +} + +public class CastNextSkill : Action +{ + public SharedTransform mAIArgTarget; + public override TaskStatus OnUpdate() + { + return TaskStatus.Failure; + } +} + +public class FilterSkill : Action +{ + public SharedTransform mAIArgTarget; + //public bool mAIArgUseInstall; + public bool mAIArgUseMP; + public bool mAIArgUseName; + public bool mAIArgUseHP; + public bool mAIArgUseCoolDown; + public bool mAIArgUseAttackField; + public bool mAIArgUseCombo; + public bool mAIArgUseInstall = false; + public ComboSkillType mAIArgSkillType; + public string mAIArgSkillName; + public bool mAIArgDetectAllPlayInAttackField; + public int mAIArgMaxSkillNum; + + public override TaskStatus OnUpdate() + { + XUtliPoolLib.FilterSkillArg skillArg = new XUtliPoolLib.FilterSkillArg(); + skillArg.mAIArgTarget = mAIArgTarget.Value; + skillArg.mAIArgUseMP = mAIArgUseMP; + skillArg.mAIArgUseName = mAIArgUseName; + skillArg.mAIArgUseHP = mAIArgUseHP; + skillArg.mAIArgUseCoolDown = mAIArgUseCoolDown; + skillArg.mAIArgUseAttackField = mAIArgUseAttackField; + skillArg.mAIArgUseCombo = mAIArgUseCombo; + skillArg.mAIArgUseInstall = mAIArgUseInstall; + skillArg.mAIArgSkillType = (int)mAIArgSkillType; + skillArg.mAIArgSkillName = mAIArgSkillName; + skillArg.mAIArgDetectAllPlayInAttackField = mAIArgDetectAllPlayInAttackField; + skillArg.mAIArgMaxSkillNum = mAIArgMaxSkillNum; + + if (AIMgrUtil.GetAIMgrInterface().SelectSkill(transform.gameObject, skillArg)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class DoSelectSkillInOrder : Action +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().DoSelectInOrder(transform.gameObject)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class DoSelectSkillRandom : Action +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().DoSelectRandom(transform.gameObject)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class DoCastSkill : Action +{ + public SharedTransform mAIArgTarget; + public override TaskStatus OnUpdate() + { + if (mAIArgTarget.Value == null) + { + if (AIMgrUtil.GetAIMgrInterface().DoCastSkill(transform.gameObject, null)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } + else + { + if (AIMgrUtil.GetAIMgrInterface().DoCastSkill(transform.gameObject, mAIArgTarget.Value.gameObject)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } + } +} + +public class StopCastingSkill : Action +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().StopCastingSkill(transform.gameObject)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class IsInSkillAttackField : Action +{ + public SharedString mAIArgUID; + public SharedInt mAIArgSkillID; +} \ No newline at end of file diff --git a/Client/Assets/Behavior Designer/AI/Actions/XAIActionCastSkill.cs.meta b/Client/Assets/Behavior Designer/AI/Actions/XAIActionCastSkill.cs.meta new file mode 100644 index 00000000..78890f07 --- /dev/null +++ b/Client/Assets/Behavior Designer/AI/Actions/XAIActionCastSkill.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 75e3739c363b7ee42a598470e8cb4378 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: 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 diff --git a/Client/Assets/Behavior Designer/AI/Actions/XAIActionMove.cs.meta b/Client/Assets/Behavior Designer/AI/Actions/XAIActionMove.cs.meta new file mode 100644 index 00000000..2ed70cfd --- /dev/null +++ b/Client/Assets/Behavior Designer/AI/Actions/XAIActionMove.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 39ab5df0181b88641b7ad24e1a862321 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Client/Assets/Behavior Designer/AI/Actions/XAIActionOther.cs b/Client/Assets/Behavior Designer/AI/Actions/XAIActionOther.cs new file mode 100644 index 00000000..e7a98554 --- /dev/null +++ b/Client/Assets/Behavior Designer/AI/Actions/XAIActionOther.cs @@ -0,0 +1,403 @@ +using UnityEngine; +using System.Collections.Generic; +using BehaviorDesigner.Runtime; +using BehaviorDesigner.Runtime.Tasks; +using XUtliPoolLib; + +public enum AIMsgType +{ + ExtString = 0, + StringCmd = 1, +} + +public enum AIMsgTarget +{ + Ally = 0, + Role, + Boss, + Monster, + Enemy, + All, + LevelMgr, + GlobalAI, +} + +public enum SetEnmityType +{ + HateValue = 1, + Provoke, + ProvokeIfNotProvoked, + Clear +} + +public class Shout : Action +{ + public override TaskStatus OnUpdate() + { + return TaskStatus.Success; + } +} + +public class SetExString : Action +{ + public override TaskStatus OnUpdate() + { + return TaskStatus.Success; + } +} + +public class ReceiveAIEvent : Action +{ + public bool mAIArgDeprecate; + public AIMsgType mAIArgMsgType; + public SharedString mAIArgMsgStr; + public SharedInt mAIArgTypeId; + public SharedVector3 mAIArgPos; + public SharedInt mAIArgSkillTemplateId; + public SharedInt mAIArgSkillId; + public SharedFloat mAIArgFloatArg; + public SharedString mAIArgSenderUID; + + public override TaskStatus OnUpdate() + { + string stringCmd = AIMgrUtil.GetAIMgrInterface().ReceiveAIEvent(transform.gameObject, (int)mAIArgMsgType, mAIArgDeprecate); + + if (stringCmd == "") + return TaskStatus.Failure; + else + { + string[] args = stringCmd.Split(' '); + mAIArgMsgStr.Value = args[0]; + mAIArgTypeId.Value = int.Parse(args[1]); +#if UNITY_EDITOR + mAIArgPos.Value = new Vector3(XEditor.XParse.Parse(args[2]), XEditor.XParse.Parse(args[3]), XEditor.XParse.Parse(args[4])); +#endif + mAIArgSkillId.Value = int.Parse(args[5]); + mAIArgSenderUID.Value = args[6]; + return TaskStatus.Success; + } + + } +} + +public class SendAIEvent : Action +{ + public AIMsgTarget mAIArgMsgTo; + public AIMsgType mAIArgMsgType; + public int mAIArgEntityTypeId; + public string mAIArgMsgStr; + public SharedVector3 mAIArgPos; + public float mAIArgDelayTime; + + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().SendAIEvent(transform.gameObject, (int)mAIArgMsgTo, (int)mAIArgMsgType, mAIArgEntityTypeId, mAIArgMsgStr, mAIArgDelayTime, mAIArgPos.Value)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class CallMonster : Action +{ + public SharedFloat mAIArgDist; + public SharedFloat mAIArgAngle; + public int mAIArgMonsterId; + public SharedInt mAIArgMonsterId2; + public int mAIArgCopyMonsterId; + public int mAIArgMaxMonsterNum; + public float mAIArgLifeTime; + public float mAIArgDelayTime; + public SharedVector3 mAIArgPos; + public int mAIArgBornType; // 0: eventpos, 1: randompos 3: 相对位置 + public Vector3 mAIArgPos1; + public Vector3 mAIArgPos2; + public Vector3 mAIArgPos3; + public Vector3 mAIArgPos4; + public Vector3 mAIArgFinalPos; // 保底位置 + public bool mAIArgForcePlace; //一定要在指定地点,如果指定地点在地图外,则招怪失败 + public float mAIArgDeltaArg; + public float mAIArgHPPercent; + + public override TaskStatus OnUpdate() + { + CallMonsterData data = new CallMonsterData(); + data.mAIArgDist = mAIArgDist.Value; + data.mAIArgAngle = mAIArgAngle.Value; + data.mAIArgMonsterId = mAIArgMonsterId2.Value == 0 ? mAIArgMonsterId : mAIArgMonsterId2.Value; + data.mAIArgCopyMonsterId = mAIArgCopyMonsterId; + data.mAIArgLifeTime = mAIArgLifeTime; + data.mAIArgDelayTime = mAIArgDelayTime; + data.mAIArgPos = mAIArgPos.Value; + data.mAIArgBornType = mAIArgBornType; + data.mAIArgPos1 = mAIArgPos1; + data.mAIArgPos2 = mAIArgPos2; + data.mAIArgPos3 = mAIArgPos3; + data.mAIArgPos4 = mAIArgPos4; + data.mAIArgFinalPos = mAIArgFinalPos; + data.mAIArgForcePlace = mAIArgForcePlace; + data.mAIArgDeltaArg = mAIArgDeltaArg; + data.mAIArgHPPercent = mAIArgHPPercent; + + if (AIMgrUtil.GetAIMgrInterface().CallMonster(transform.gameObject, data)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class MixMonsterPos : Action +{ + public int mAIArgMixMonsterId0; + public int mAIArgMixMonsterId1; + public int mAIArgMixMonsterId2; + + public override TaskStatus OnUpdate() + { + return TaskStatus.Success; + } +} + +public class KillMonster : Action +{ + public int mAIArgMonsterId; + public float mAIArgDelayTime; + + public override TaskStatus OnUpdate() + { + return TaskStatus.Success; + } +} + +public class AddBuff : Action +{ + public SharedInt mAIArgMonsterId; + public SharedInt mAIArgBuffId; + public SharedInt mAIArgBuffId2; + public SharedInt mAIArgAddBuffTarget; // 0: monster 1: player + public SharedInt mAIArgAddBuffWay; // 0: all 1: random one 2; prof + public SharedInt mAIArgPlayerProfId; // player proffesion id + + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().AddBuff(mAIArgMonsterId.Value, mAIArgBuffId.Value, mAIArgBuffId2.Value)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class RemoveBuff : Action +{ + public int mAIArgMonsterId; + public int mAIArgBuffId; + + public override TaskStatus OnUpdate() + { + return TaskStatus.Success; + } +} + +public class CallScript : Action +{ + public string mAIArgFuncName; + public float mAIArgDelayTime; + + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().CallScript(transform.gameObject, mAIArgFuncName, mAIArgDelayTime)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class RunSubTree : Action +{ + public string mAIArgTreeName; + + public override TaskStatus OnUpdate() + { + AIMgrUtil.GetAIMgrInterface().RunSubTree(transform.gameObject, mAIArgTreeName); + return TaskStatus.Success; + } +} + +public class PlayFx : Action +{ + public string mAIArgFxName; + public SharedVector3 mAIArgFxPos; + public float mAIArgDelayTime; + + public override TaskStatus OnUpdate() + { + //if (mAIArgFxPos.Value == null) + // return TaskStatus.Failure; + + //if (AIMgrUtil.GetAIMgrInterface().PlayFx(transform.gameObject, mAIArgFxName, mAIArgFxPos.Value, mAIArgDelayTime)) + // return TaskStatus.Success; + //else + return TaskStatus.Failure; + } +} + +public class DetectEnemyInRange : Action +{ + public enum FightGroupType + { + Opponent = 0, + Ally + } + + public int mAIArgRangeType; // 0: circle 1: rect + public float mAIArgRadius; + public float mAIArgAngle; + public float mAIArgLength; + public float mAIArgWidth; + public float mAIArgOffsetLength; + public int mAIArgMonsterType; + public FightGroupType mAIArgFightGroupType; + + public override TaskStatus OnUpdate() + { + DetectEnemyInRangeArg arg; + arg.mAIArgAngle = mAIArgAngle; + arg.mAIArgRangeType = mAIArgRangeType; + arg.mAIArgRadius = mAIArgRadius; + arg.mAIArgLength = mAIArgLength; + arg.mAIArgWidth = mAIArgWidth; + arg.mAIArgOffsetLength = mAIArgOffsetLength; + arg.mAIArgMonsterType = mAIArgMonsterType; + arg.mAIArgFightGroupType = XFastEnumIntEqualityComparer.ToInt(mAIArgFightGroupType); + + if (AIMgrUtil.GetAIMgrInterface().DetectEnemyInRange(transform.gameObject, ref arg)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class XHashFunc : Action +{ + public string mAIArgInput; + public SharedInt mAIArgResult; + + public override TaskStatus OnUpdate() + { + mAIArgResult.Value = (int)XCommon.singleton.XHash(mAIArgInput); + return TaskStatus.Success; + } +} + +public class AIDoodad : Action +{ + public SharedInt mAIArgDoodadId; + public SharedInt mAIArgWaveId; + public SharedVector3 mAIArgDoodadPos; + public float mAIArgRandomPos; + public float mAIArgDelayTime; + + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().AIDoodad(transform.gameObject, mAIArgDoodadId.Value, mAIArgWaveId.Value, mAIArgDoodadPos.Value, mAIArgRandomPos, mAIArgDelayTime)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class RemoveSceneBuff : Action +{ + public int mAIArgBuffId; + + + public override TaskStatus OnUpdate() + { + return TaskStatus.Success; + } +} + +public class RandomEntityPos : Action +{ + public int mAIArgTemplateId; + public float mAIArgRadius; + public Vector3 mAIArgCenterPos; + public Vector3 mAIArgFinalPos; + public int mAIArgNearPlayerTemplateId; // 0: no use -1: all player >0 : prof + + public override TaskStatus OnUpdate() + { + return base.OnUpdate(); + } +} + +public class SelectPlayerFromList : Action +{ + public int mAIArgSelectType; + public int mAIArgStartIndex; + public int mAIArgEndIndex; + + public override TaskStatus OnUpdate() + { + return base.OnUpdate(); + } +} + +public class GetEntityPos : Action +{ + public int mAIArgIsPlayer; + public int mAIArgTemplateId; + public SharedVector3 mAIArgStorePos; + + public override TaskStatus OnUpdate() + { + return base.OnUpdate(); + } +} + +public class GetEntityCount : Action +{ + ///> TODO + /// 区分怪还是人,并可以指定TypeID + public int mAIArgWay; + public SharedInt mAIArgStoreCount; +} + +public class SetEnmity : Action +{ + public SetEnmityType mAIArgOperateType; + public SharedFloat mAIArgOperateValue; + + public override TaskStatus OnUpdate() + { + return base.OnUpdate(); + } +} + +public class GetMonsterID : Action +{ + public int mAIArgType; + public SharedInt mAIArgStoreID; +} + +public class GetUID : Action +{ + public SharedString mAIArgStoreID; +} + +public class AddGroupLevel : Action +{ + public SharedInt mAIArgFightGroup; + public int mAIArgLevel; +} + +public class NotifyTarget : Action +{ + +} + +public class GetFightGroup : Action +{ + public SharedString mAIArgUID; + public SharedInt mAIArgStoreFightGroup; +} \ No newline at end of file diff --git a/Client/Assets/Behavior Designer/AI/Actions/XAIActionOther.cs.meta b/Client/Assets/Behavior Designer/AI/Actions/XAIActionOther.cs.meta new file mode 100644 index 00000000..18cc5268 --- /dev/null +++ b/Client/Assets/Behavior Designer/AI/Actions/XAIActionOther.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 403e52aea5bdf5345868c31ef18830f2 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Client/Assets/Behavior Designer/AI/Actions/XAIActionTarget.cs b/Client/Assets/Behavior Designer/AI/Actions/XAIActionTarget.cs new file mode 100644 index 00000000..67baf939 --- /dev/null +++ b/Client/Assets/Behavior Designer/AI/Actions/XAIActionTarget.cs @@ -0,0 +1,236 @@ +using UnityEngine; +using System.Collections.Generic; +using BehaviorDesigner.Runtime; +using BehaviorDesigner.Runtime.Tasks; + +public class FindTargetByDistance : Action +{ + public SharedFloat mAIArgDistance; + public bool mAIArgFilterImmortal; + public float mAIArgAngle; + public float mAIArgDelta; + public int mAIArgTargetType; + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().FindTargetByDistance(transform.gameObject, mAIArgDistance.Value, mAIArgFilterImmortal, mAIArgAngle, mAIArgDelta, mAIArgTargetType)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class FindTargetByHitLevel : Action +{ + //public SharedFloat mAIArgDistance; + public bool mAIArgFilterImmortal; + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().FindTargetByHitLevel(transform.gameObject, mAIArgFilterImmortal)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class FindTargetByNonImmortal : Action +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().FindTargetByNonImmortal(transform.gameObject)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class TargetByHatredList : Action +{ + public SharedFloat mAIArgDistance; + public bool mAIArgFilterImmortal; + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().FindTargetByHartedList(transform.gameObject, mAIArgFilterImmortal)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class DoSelectByUID : Action +{ + public SharedString mAIArgUID; +} + +public class DoSelectRoleByIndex : Action +{ + public SharedInt mAIArgIndex; +} + +public class FindNavPath : Action +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().FindNavPath(transform.gameObject)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class ResetTargets : Action +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().ResetTargets(transform.gameObject)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class DoSelectNearest : Action +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().DoSelectNearest(transform.gameObject)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + + +public class DoSelectFarthest : Action +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().DoSelectFarthest(transform.gameObject)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class DoSelectRandomTarget : Action +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().DoSelectRandomTarget(transform.gameObject)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class CalDistance : Action +{ + public SharedTransform mAIArgObject; + public SharedFloat mAIArgDistance; + public SharedVector3 mAIArgDestPoint; + + + public override TaskStatus OnUpdate() + { + //if (mAIArgDistance.Value == null) + // return TaskStatus.Failure; + + if (mAIArgObject.Value != null) + { + mAIArgDistance.Value = (transform.position - mAIArgObject.Value.position).magnitude; + } + else + { + mAIArgDistance.Value = (transform.position - mAIArgDestPoint.Value).magnitude; + } + + + return TaskStatus.Success; + } +} + +public class SelectMoveTargetById : Action +{ + public SharedTransform mAIArgMoveTarget; + public int mAIArgObjectId; + + public override TaskStatus OnUpdate() + { + Transform moveTarget = AIMgrUtil.GetAIMgrInterface().SelectMoveTargetById(transform.gameObject, mAIArgObjectId); + + if (moveTarget == null) + return TaskStatus.Failure; + else + { + mAIArgMoveTarget.Value = moveTarget; + return TaskStatus.Success; + } + } +} + +public class SelectBuffTarget : Action +{ + //public SharedVector3 mAIArgBuffTarget; + public SharedTransform mAIArgBuffTarget; + + public override TaskStatus OnUpdate() + { + Transform buffTarget = AIMgrUtil.GetAIMgrInterface().SelectBuffTarget(transform.gameObject); + + if (buffTarget == null) + { + return TaskStatus.Failure; + } + else + { + mAIArgBuffTarget.Value = buffTarget; + return TaskStatus.Success; + } + } +} + +public class SelectItemTarget : Action +{ + //public SharedVector3 mAIArgBuffTarget; + public SharedTransform mAIArgItemTarget; + + public override TaskStatus OnUpdate() + { + Transform itemTarget = AIMgrUtil.GetAIMgrInterface().SelectItemTarget(transform.gameObject); + + if (itemTarget == null) + return TaskStatus.Failure; + else + { + mAIArgItemTarget.Value = itemTarget; + return TaskStatus.Success; + } + } +} + +public class SelectTargetBySkillCircle : Action +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().SelectTargetBySkillCircle(transform.gameObject)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class SelectNonHartedList : Action +{ + public override TaskStatus OnUpdate() + { + return TaskStatus.Success; + } +} + +public class ResetHartedList : Action +{ + public override TaskStatus OnUpdate() + { + AIMgrUtil.GetAIMgrInterface().ResetHartedList(transform.gameObject); + return TaskStatus.Success; + } +} diff --git a/Client/Assets/Behavior Designer/AI/Actions/XAIActionTarget.cs.meta b/Client/Assets/Behavior Designer/AI/Actions/XAIActionTarget.cs.meta new file mode 100644 index 00000000..9d16abb2 --- /dev/null +++ b/Client/Assets/Behavior Designer/AI/Actions/XAIActionTarget.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 427ab1b85b2f23f47b002c88e25fe4b6 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Client/Assets/Behavior Designer/AI/Conditionals.meta b/Client/Assets/Behavior Designer/AI/Conditionals.meta new file mode 100644 index 00000000..efc56f67 --- /dev/null +++ b/Client/Assets/Behavior Designer/AI/Conditionals.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 760f2ae14d62bdf4db4dbc82ff8d2f6e +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Behavior Designer/AI/Conditionals/XAIConditionStatus.cs b/Client/Assets/Behavior Designer/AI/Conditionals/XAIConditionStatus.cs new file mode 100644 index 00000000..bf5d06d0 --- /dev/null +++ b/Client/Assets/Behavior Designer/AI/Conditionals/XAIConditionStatus.cs @@ -0,0 +1,172 @@ +using UnityEngine; +using BehaviorDesigner.Runtime.Tasks; +using BehaviorDesigner.Runtime; + +internal enum XStateDefine +{ + XState_Idle = 0, + XState_Move, + XState_Jump, + XState_Fall, + XState_Freeze, + XState_BeHit, + XState_Death, + XState_Charge, +} + +public enum XQTEState +{ + None = 0, + HitBackPresent, + HitBackStraight, + HitBackGetup, + HitFlyPresent, + HitFlyLand, + HitFlyStraight, + HitFlyGetup, + HitRollPresent, + HitRollStraight, + HitRollGetup, + CanDash = 20, + DashState, + ChargeState, + DashAttackState, + StayInAir, + firedash, + onelight, + Any = 1000, +} + +public class StatusIdle : Conditional +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().IsAtState(transform.gameObject, (int)XStateDefine.XState_Idle)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class StatusMove : Conditional +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().IsAtState(transform.gameObject, (int)XStateDefine.XState_Move)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class StatusRotate : Conditional +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().IsRotate(transform.gameObject)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class StatusBehit : Conditional +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().IsAtState(transform.gameObject, (int)XStateDefine.XState_BeHit)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class StatusDeath : Conditional +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().IsAtState(transform.gameObject, (int)XStateDefine.XState_Death)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class StatusFreeze : Conditional +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().IsAtState(transform.gameObject, (int)XStateDefine.XState_Freeze)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class StatusSkill : Conditional +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().IsCastSkill(transform.gameObject)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class StatusWoozy : Conditional +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().IsWoozy(transform.gameObject)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class IsQTEState : Conditional +{ + public XQTEState mAIArgQTEState; + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().HasQTE(transform.gameObject, (int)mAIArgQTEState)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class TargetQTEState : Conditional +{ + public SharedTransform mAIArgTarget; + public XQTEState mAIArgQTEState; + + public override TaskStatus OnUpdate() + { + if (mAIArgTarget.Value == null) + return TaskStatus.Failure; + + if (AIMgrUtil.GetAIMgrInterface().HasQTE(mAIArgTarget.Value.gameObject, (int)mAIArgQTEState)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } + +} + +public class IsTargetImmortal : Conditional +{ + public SharedTransform mAIArgTarget; + + public override TaskStatus OnUpdate() + { + if (mAIArgTarget.Value == null) + return TaskStatus.Failure; + ulong id = ulong.Parse(mAIArgTarget.Value.gameObject.name); + if (AIMgrUtil.GetAIMgrInterface().IsTargetImmortal(id)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} \ No newline at end of file diff --git a/Client/Assets/Behavior Designer/AI/Conditionals/XAIConditionStatus.cs.meta b/Client/Assets/Behavior Designer/AI/Conditionals/XAIConditionStatus.cs.meta new file mode 100644 index 00000000..f62f1a28 --- /dev/null +++ b/Client/Assets/Behavior Designer/AI/Conditionals/XAIConditionStatus.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 23511b3fb9bca1841821dc6c4649523f +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Client/Assets/Behavior Designer/AI/Conditionals/XAIConditionValue.cs b/Client/Assets/Behavior Designer/AI/Conditionals/XAIConditionValue.cs new file mode 100644 index 00000000..6d998a81 --- /dev/null +++ b/Client/Assets/Behavior Designer/AI/Conditionals/XAIConditionValue.cs @@ -0,0 +1,216 @@ +using UnityEngine; +using BehaviorDesigner.Runtime.Tasks; +using BehaviorDesigner.Runtime; +using XUtliPoolLib; + +public class ValueHP : Conditional +{ + public int mAIArgMaxPercent; + public int mAIArgMinPercent; + + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().IsHPValue(transform, mAIArgMinPercent, mAIArgMaxPercent)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class ValueMP : Conditional +{ + public int mAIArgMaxPercent; + public int mAIArgMinPercent; + + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().IsMPValue(transform, mAIArgMinPercent, mAIArgMaxPercent)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class ValueFP : Conditional +{ + public int mAIArgMaxFP; + public int mAIArgMinFP; + + public override TaskStatus OnUpdate() + { + return TaskStatus.Success; + } +} + +public class ValueTarget : Conditional +{ + public SharedTransform mAIArgTarget; + + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().IsValid(mAIArgTarget.Value)) + return TaskStatus.Success; + else + { + AIMgrUtil.GetAIMgrInterface().ClearTarget(transform); + return TaskStatus.Failure; + } + } +} + +public class ValueDistance : Conditional +{ + public SharedTransform mAIArgTarget; + public SharedFloat mAIArgMaxDistance; + + public override TaskStatus OnUpdate() + { + if (mAIArgTarget.Value == null) + return TaskStatus.Failure; + + if ((transform.position - mAIArgTarget.Value.position).magnitude <= mAIArgMaxDistance.Value) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class IsOppoCastingSkill : Conditional +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().IsOppoCastingSkill(transform)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class IsHurtOppo : Conditional +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().IsHurtOppo(transform)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class IsFixedInCd : Conditional +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().IsFixedInCd(transform)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class IsWander : Conditional +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().IsWander(transform)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class IsCastingSkill : Conditional +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().IsCastSkill(transform.gameObject)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class IsFighting : Conditional +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().IsFighting(transform)) + return TaskStatus.Success; + else + { + AIMgrUtil.GetAIMgrInterface().ClearTarget(transform); + return TaskStatus.Failure; + } + } +} + +public class IsSkillChoosed : Conditional +{ + public override TaskStatus OnUpdate() + { + if (AIMgrUtil.GetAIMgrInterface().IsSkillChoosed(transform)) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class ConditionDist : Conditional +{ + public SharedTransform mAIArgTarget; + public SharedFloat mAIArgUpper; + public SharedFloat mAIArgLower; + + public override TaskStatus OnUpdate() + { + if (mAIArgTarget.Value == null) + return TaskStatus.Failure; + + float dist = (mAIArgTarget.Value.position - transform.position).magnitude; + + if (dist >= mAIArgLower.Value && dist <= mAIArgUpper.Value) + return TaskStatus.Success; + else + return TaskStatus.Failure; + } +} + +public class ConditionMonsterNum : Conditional +{ + public SharedInt mAIArgNum; + public int mAIArgMonsterId; + + public override TaskStatus OnUpdate() + { + return TaskStatus.Success; + } +} + +public class ConditionPlayerNum : Conditional +{ + + public int mAIArgPlayerBaseProf; + public int mAIArgPlayerDetailProf; + public int mAIArgWay; + public Vector3 mAIArgCenter; + public float mAIArgRadius; + public SharedInt mAIArgNum; + + public override TaskStatus OnUpdate() + { + int playerprof = AIMgrUtil.GetAIMgrInterface().GetPlayerProf(); + + if (mAIArgPlayerBaseProf == 0 && mAIArgPlayerDetailProf == 0) + mAIArgNum.Value = 1; + else + { + if (mAIArgPlayerBaseProf != 0 && playerprof % 10 == mAIArgPlayerBaseProf) + mAIArgNum.Value = 1; + + if (mAIArgPlayerDetailProf != 0 && playerprof == mAIArgPlayerDetailProf) + mAIArgNum.Value = 1; + } + + return TaskStatus.Success; + } +} \ No newline at end of file diff --git a/Client/Assets/Behavior Designer/AI/Conditionals/XAIConditionValue.cs.meta b/Client/Assets/Behavior Designer/AI/Conditionals/XAIConditionValue.cs.meta new file mode 100644 index 00000000..cdccdc95 --- /dev/null +++ b/Client/Assets/Behavior Designer/AI/Conditionals/XAIConditionValue.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 53441264acbdd0542b20476fcdef876c +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Client/Assets/Behavior Designer/AI/XAICreateBehaviorTree.cs b/Client/Assets/Behavior Designer/AI/XAICreateBehaviorTree.cs new file mode 100644 index 00000000..6409d8ad --- /dev/null +++ b/Client/Assets/Behavior Designer/AI/XAICreateBehaviorTree.cs @@ -0,0 +1,29 @@ +using UnityEngine; +using BehaviorDesigner.Runtime; +using XUtliPoolLib; + +public class CreateTree : MonoBehaviour +{ + public ExternalBehaviorTree behaviorTree; + + void Start() + { + BehaviorTree bt = transform.gameObject.AddComponent(); + bt.ExternalBehavior = behaviorTree; + bt.StartWhenEnabled = false; + } +} + +public class AIMgrUtil +{ + private static IXAIGeneralMgr _ai_general_mgr = null; + + public static IXAIGeneralMgr GetAIMgrInterface() + { + if (_ai_general_mgr == null || _ai_general_mgr.Deprecated) + _ai_general_mgr = XInterfaceMgr.singleton.GetInterface(XCommon.singleton.XHash("XAIGeneralMgr")); + + return _ai_general_mgr; + } + +} \ No newline at end of file diff --git a/Client/Assets/Behavior Designer/AI/XAICreateBehaviorTree.cs.meta b/Client/Assets/Behavior Designer/AI/XAICreateBehaviorTree.cs.meta new file mode 100644 index 00000000..7492bd15 --- /dev/null +++ b/Client/Assets/Behavior Designer/AI/XAICreateBehaviorTree.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fa82ad9bb496b0140a2935cccc3135b7 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: -- cgit v1.1-26-g67d0