public override BossState Update(BossStateMachine boss)
        {
            ///////////////////////////// STATE BEHAVIOR:
            Vector3 vectorToPlayer = boss.VectorToAttackTarget();

            Vector3 dirToPlayer = vectorToPlayer.normalized;

            boss.transform.position += dirToPlayer * boss.speed * Time.deltaTime;



            //////////////////////////// TRANSITION:
            ///


            if (!boss.CanSeeAttackTarget()) // if we can't see the player..
            {
                // transition to idle
                return(new BossStateIdle());
            }
            else if (boss.DistanceToAttackTargt() < boss.attackDistanceThreshold)
            {
                return(new BossStateAttack());
            }
            else if (boss.DistanceToAttackTargt() < boss.pursueDistanceThreshold)
            {
                return(new BossStateShoot());
            }
            else
            {
                return(null);
            }
        }
        public override BossState Update(BossStateMachine boss)
        {
            ///////////////////////////// STATE BEHAVIOR:
            Vector3 vectorToPlayer = boss.VectorToAttackTarget();

            Vector3 dirToPlayer = vectorToPlayer.normalized;

            boss.transform.position += dirToPlayer * boss.speed * Time.deltaTime;



            //////////////////////////// TRANSITION:
            ///
            if (vectorToPlayer.sqrMagnitude < boss.pursueDistanceThreshold * boss.pursueDistanceThreshold) // if dis < threshold
            {
                return(new BossStatePursue());
            }

            if (!boss.CanSeeAttackTarget()) // if we can't see the player..
            {
                // transition to idle
                return(new BossStateIdle());
            }

            return(null);
        }