Exemple #1
0
        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;
        }
Exemple #2
0
 public Processor(IDirectionChanger directionChanger)
 {
     _directionChanger = directionChanger;
 }