private bool TakeTurn() { if (m_CurrentMovementDirection == EMovementDirection.EMD_NONE || m_IsInputBlocked) { return(false); } return(m_ActorReference.Move(InputUtilities.GetMovementVectorFromDirection(m_CurrentMovementDirection))); }
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); }