public void ChangeDirection(IDirectionChanger directionChanger) { Vector2 directionVector = (Vector2)transform.position - directionChanger.GetPosition(); float angle = Vector2.SignedAngle(directionVector, Vector2.up); float roundedAngle = Mathf.Round(angle / 90f) * 90f; //older solution for only one DirectionChanger // float directionalAngle = Vector2.SignedAngle(-direction, positionVector); // float orthogonalAngle = (directionalAngle > 0 ? 1 : -1) * 90f; float orthogonalAngle = (directionChanger.GetDirection() == Direction.Right ? 1 : -1) * 90f; if (Vector2.SignedAngle(direction, Vector2.up) % 180f == roundedAngle % 180f) { direction = Quaternion.AngleAxis(orthogonalAngle, Vector3.back) * direction; } else { direction = Quaternion.AngleAxis(roundedAngle, Vector3.back) * Vector2.up; } directionChanged = true; }
public Processor(IDirectionChanger directionChanger) { _directionChanger = directionChanger; }