public override void Dispatch() { if (inProgress) { return; } context.StartCoroutine(TakeDamageAction()); }
public override void Dispatch() { if (context.target == null) { context.SetState(AGENT_STATE.PATROL); return; } if (context.target.GetComponent <Health>().IsDead()) { context.SetState(AGENT_STATE.PATROL); return; } // If my health is low if (context.health.IsLowHealth()) { float chanceToFlee = UnityEngine.Random.Range(0f, 1f); if (chanceToFlee >= context.minimumChanceToFleeIfLowHealth) { context.SetState(AGENT_STATE.FLEE); return; } } // If my target is far away if (AI_Helpers.TargetIsFarAway( context.target, context.gameObject, context.gameObject.GetComponent <WeaponManager>() )) { context.SetState(AGENT_STATE.CHASE); return; } if (inProgress) { return; } // Target is attacking, let's receive the attack and decide later if we should dodge or defend if (context.target.GetComponent <Battler>().IsAttacking()) { float chanceToNotAttack = UnityEngine.Random.Range(0, 1f); if (chanceToNotAttack >= 0.1f) { return; } } float chanceToAttack = UnityEngine.Random.Range(0, 1f); if (chanceToAttack < context.minimumChanceToAttack) { Debug.Log("Hit twice"); context.SetState(AGENT_STATE.CHASE); return; } context.StartCoroutine(Attack()); }