public override void Dispatch()
        {
            if (inProgress)
            {
                return;
            }

            context.StartCoroutine(TakeDamageAction());
        }
Ejemplo n.º 2
0
        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());
        }