private IEnumerator Move(Direction direction) { var nextTile = getTile(direction); if (nextTile == null || nextTile.isOccupied) { yield break; } _sounds.PlayNote(); _input.PreventFurtherInput(); nextTile.isOccupied = true; _master.numberStepsTaken++; float angleRotated = 0; while (angleRotated < 90) { var angleDelta = Speed * Time.deltaTime; if (angleRotated + angleDelta > 90) { angleDelta = 90 - angleRotated; //Make sure we don't rotate over 90 } playerRenderer.transform.RotateAround(_keys[direction].RotateAxis(), _keys[direction].Move, angleDelta); angleRotated += angleDelta; yield return(null); } center.transform.position = playerRenderer.transform.position; _currentTile.isOccupied = false; _currentTile = nextTile; _input.SetReadyForInput(); }