Пример #1
0
    void Update()
    {
        if (!_doUpdate)
        {
            return;
        }

        if (_wasJumping && !_enemy.IsJumping)
        {
            OnLanded();
        }
        _wasJumping = _enemy.IsJumping;

        if (IsPreoccupied)
        {
            return;
        }

        if (_isIdling)
        {
            if (Time.time - _idleStartTime >= _idleDuration)
            {
                _isIdling           = false;
                _justFinishedIdling = true;
            }
        }
        else if (MoveDirection_Tile.IsZero())
        {
            DetermineNextAction();
        }
    }
Пример #2
0
    IndexDirection2 GetDesiredMoveDirection(DiscreteAction action)
    {
        IndexDirection2 desiredMoveDir = IndexDirection2.zero;
        IndexDirection2 toPlayer       = IndexDirection2.zero;

        _enemyMove.speed = _baseSpeed;

        if (_enemy.ShouldFollowBait())
        {
            desiredMoveDir = GetDirectionToBait();
        }
        else if (chasePlayerIfInSight && IsPlayerInSight(MAX_DISTANCE_PLAYER_CAN_BE_SEEN, out toPlayer))
        {
            _enemyMove.speed = _baseSpeed * chaseSpeedMultiplier;

            desiredMoveDir = toPlayer;
        }
        else
        {
            if (MoveDirection_Tile.IsZero())
            {
                desiredMoveDir = GetRandomTileDirection();
            }
            else
            {
                if (action == DiscreteAction.ChangeDirection)
                {
                    List <IndexDirection2> excludeDirections = new List <IndexDirection2>();
                    excludeDirections.Add(MoveDirection_Tile);
                    if (avoidsReversingDirections)
                    {
                        excludeDirections.Add(MoveDirection_Tile.Reversed);
                    }

                    desiredMoveDir = GetRandomTileDirectionExcluding(excludeDirections);
                }
                else if (action == DiscreteAction.Jump)
                {
                    desiredMoveDir = GetRandomTileDirection();
                }
                else
                {
                    desiredMoveDir = MoveDirection_Tile;
                }
            }
        }

        if (!WorldInfo.Instance.IsInDungeon)
        {
            desiredMoveDir = EnforceBoundary(desiredMoveDir);
        }

        return(desiredMoveDir);
    }
Пример #3
0
    void SetNextMoveDirection()
    {
        Vector3 p = transform.position;

        IndexDirection2 newMoveDir = IndexDirection2.zero;

        if (MoveDirection_Tile.IsDown())
        {
            if (p.z <= Boundary.yMin)
            {
                newMoveDir = IndexDirection2.up;
            }
        }
        else if (MoveDirection_Tile.IsUp())
        {
            if (p.z >= Boundary.yMax)
            {
                newMoveDir = (Extensions.FlipCoin()) ? IndexDirection2.left : IndexDirection2.right;
            }
        }
        else
        {
            if (Extensions.FlipCoin(chanceToMoveDown))
            {
                newMoveDir = IndexDirection2.down;
            }
            else
            {
                if (MoveDirection_Tile.IsRight())
                {
                    if (p.x >= Boundary.xMax)
                    {
                        newMoveDir = IndexDirection2.left;
                    }
                }
                else if (MoveDirection_Tile.IsLeft())
                {
                    if (p.x <= Boundary.xMin)
                    {
                        newMoveDir = IndexDirection2.right;
                    }
                }
            }
        }

        if (newMoveDir.IsZero())
        {
            newMoveDir = MoveDirection_Tile;
        }

        MoveDirection_Tile = newMoveDir;
    }