Exemplo n.º 1
0
    IEnumerator AI()
    {
        float baseSpeed = myMovement_.GetSpeed();

        while (true)
        {
            while (true)
            {
                if (me_.IsDead)
                {
                    yield break;
                }

                bool hasRecentlySeenPlayer = mySenses_.GetPlayerLatestKnownPositionAge() < 2.0f;
                if (!hasRecentlySeenPlayer)
                {
                    break;
                }

                var target = mySenses_.GetPlayerLatestKnownPosition(PlayerPositionType.Feet);
                myMovement_.MoveTo(target, baseSpeed * 2);

                yield return(null);
            }

            var pos       = myMovement_.GetPosition();
            var direction = CollisionUtil.GetRandomFreeDirection(pos) * (Random.value * 0.8f + 0.1f);
            myMovement_.MoveTo(pos + direction, baseSpeed);

            float endTime = Time.time + 4 + Random.value;
            while (true)
            {
                if (myMovement_.MoveTargetReached())
                {
                    break;
                }

                if (Time.time > endTime)
                {
                    break;
                }

                bool hasRecentlySeenPlayer = mySenses_.GetPlayerLatestKnownPositionAge() < 2.0f;
                if (hasRecentlySeenPlayer)
                {
                    break;
                }

                yield return(null);
            }

            yield return(null);
        }
    }
Exemplo n.º 2
0
    void CheckFire(float time)
    {
        if (time < reloadEnd_ || me_.IsDead)
        {
            return;
        }

        bool hasRecentlySeenPlayer = senses_.GetPlayerLatestKnownPositionAge() < 2.0f;

        if (hasRecentlySeenPlayer && pendingShots_ == 0)
        {
            pendingShots_ = 2;
        }

        if (pendingShots_ > 0)
        {
            if (time > coolDownEnd_)
            {
                var myCenter          = movable_.GetPosition() + Vector3.up * 0.5f;
                var playerCenter      = senses_.GetPlayerLatestKnownPosition(PlayerPositionType.Center);
                var directionToPlayer = (playerCenter - myCenter).normalized;
                var bulletStartPos    = myCenter + directionToPlayer * 0.2f;
                var bulletDirection   = (playerCenter - bulletStartPos).normalized;

                float angleOffset     = (Random.value - 0.5f) * 15;
                var   offsetDirection = Quaternion.AngleAxis(angleOffset, Vector3.forward) * bulletDirection;
                Fire(bulletStartPos, offsetDirection);

                coolDownEnd_ = time + 0.4f;
                if (--pendingShots_ == 0)
                {
                    reloadEnd_ = time + 3.0f + Random.value;
                }
            }
        }
    }