Esempio n. 1
0
    private bool TakeTurn()
    {
        if (m_CurrentMovementDirection == EMovementDirection.EMD_NONE || m_IsInputBlocked)
        {
            return(false);
        }

        return(m_ActorReference.Move(InputUtilities.GetMovementVectorFromDirection(m_CurrentMovementDirection)));
    }
Esempio n. 2
0
    private bool TakeTurn()
    {
        if (m_HeroReference != null)
        {
            Vector2[]      PossibleMovements = { Vector2.left, Vector2.up, Vector2.right, Vector2.down };
            List <Vector2> LegalMovements    = new List <Vector2>();

            foreach (Vector2 movement in PossibleMovements)
            {
                if (m_Actor.IsMovementLegal(movement))
                {
                    LegalMovements.Add(movement);
                }
            }

            if (LegalMovements.Count == 0)
            {
                Debug.Log("Enemy has no legal movements...");
                return(true);
            }

            Vector2 ChosenMovement = Vector2.zero;
            Vector2 HeroPosition   = m_HeroReference.GetComponent <DynamicActor>().CurrentPosition;

            foreach (Vector2 movement in LegalMovements)
            {
                // making AI less dumb, but not too smart
                if (m_Actor.CurrentPosition + movement == HeroPosition)
                {
                    // adding a 67% chance of miss just because!
                    if (Random.value < 0.33f)
                    {
                        ChosenMovement = movement;
                    }
                    break;
                }

                int DistanceChosenMovement  = MathUtilities.ManhattanDistance(m_Actor.CurrentPosition + ChosenMovement, HeroPosition);
                int DistanceCurrentMovement = MathUtilities.ManhattanDistance(m_Actor.CurrentPosition + movement, HeroPosition);

                if (
                    DistanceCurrentMovement <
                    DistanceChosenMovement
                    )
                {
                    ChosenMovement = movement;
                }
            }

            m_Actor.Move(ChosenMovement);
        }

        return(true);
    }