diff --git a/packages/mmextensions/mmextensions/Ai/AiAllyBrain.cs b/packages/mmextensions/mmextensions/Ai/AiAllyBrain.cs index bd23b8c0c..fbd80b304 100644 --- a/packages/mmextensions/mmextensions/Ai/AiAllyBrain.cs +++ b/packages/mmextensions/mmextensions/Ai/AiAllyBrain.cs @@ -20,6 +20,7 @@ public class AiAllyBrain : AIBrain private AIDecisionDetectTargetRadius2D detectPlayerDecision; private AIDecisionDetectTargetRadius2D detectEnemyDecision; private AIDecisionDistanceToTarget distanceToTargetDecision; + private AIDecisionDistanceToTarget distanceToTargetFarDecision; private AIDecisionTargetIsAlive targetIsAliveDecision; private AIDecisionTimeInState timeInStateDecision; private CharacterHandleWeapon handleWeapon; @@ -86,12 +87,16 @@ protected override void Awake() protected virtual void SetupDecisionsAndActions() { - detectPlayerDecision = CreateDetectTarget2DDecision(PLAYER_LAYER_INT, 20f); + detectPlayerDecision = CreateDetectTarget2DDecision(PLAYER_LAYER_INT, 100f, false); detectEnemyDecision = CreateDetectTarget2DDecision(ENEMY_LAYER_INT, 20f); distanceToTargetDecision = CreateDistanceToTarget2DDecision( 2f, AIDecisionDistanceToTarget.ComparisonModes.LowerThan ); + distanceToTargetFarDecision = CreateDistanceToTarget2DDecision( + 4f, + AIDecisionDistanceToTarget.ComparisonModes.LowerThan + ); targetIsAliveDecision = CreateTargetIsAliveDecision(); timeInStateDecision = CreateTimeInStateDecision(2f, 2f); } @@ -137,7 +142,8 @@ private AIState CreateFollowPlayerState() followState.Transitions = new AITransitionsList { - new AITransition() { Decision = detectEnemyDecision, TrueState = "ChaseEnemy" } + new AITransition() { Decision = detectEnemyDecision, TrueState = "ChaseEnemy" }, + new AITransition() { Decision = distanceToTargetFarDecision, TrueState = "Idle" } }; return followState; @@ -184,12 +190,14 @@ private AIState CreateAttackState() private AIDecisionDetectTargetRadius2D CreateDetectTarget2DDecision( int targetLayerInt, - float radius + float radius, + bool obstacleDetection = true ) { AIDecisionDetectTargetRadius2D detectTargetDecision = gameObject.AddComponent(); detectTargetDecision.TargetLayer = 1 << targetLayerInt; + detectTargetDecision.ObstacleDetection = obstacleDetection; detectTargetDecision.Radius = radius; return detectTargetDecision;