private void MakeFrontMove(IEdgeFacelet otherEdgeFacelet)
 {
     RotateLayer(Front, otherEdgeFacelet.Normal, Down);
      RotateLayer(Down, Clockwise);
      RotateLayer(Right, Clockwise);
      RotateLayer(Front, CounterClockwise);
 }
 private int GetOrderBasedOnSide(IEdgeFacelet faceletToSolve, IEdgeFacelet otherEdgeFacelet)
 {
     if (faceletToSolve.IsSameNormal(Front))
     return 0;
      if (faceletToSolve.IsSameNormal(Back))
     return 1;
      if (faceletToSolve.IsSameNormal(Right))
     return 5;
      if (faceletToSolve.IsSameNormal(Left))
     return 4;
      if (faceletToSolve.IsSameNormal(Up))
     return 3;
      if (faceletToSolve.IsSameNormal(Down))
     return 2;
      return 0;
 }
 public override void Build(Cube cube)
 {
     CenterFacelet = cube.CenterFacelets.First(f => Normal.IsSame(f.Normal));
      OtherEdgeFacelet = cube.EdgeFacelets.Single(f => !ReferenceEquals(this, f) && f.CubieCenter.IsSame(CubieCenter));
 }
 private void SolveBasedOnSide(IEdgeFacelet faceletToSolve, IEdgeFacelet otherEdgeFacelet)
 {
     if (faceletToSolve.IsSameNormal(Front))
     MakeFrontMove(otherEdgeFacelet);
      else if (faceletToSolve.IsSameNormal(Back))
     MakeBackMove(otherEdgeFacelet);
      else if (faceletToSolve.IsSameNormal(Right))
     MakeRightMove(otherEdgeFacelet);
      else if (faceletToSolve.IsSameNormal(Left))
     MakeLeftMove(otherEdgeFacelet);
      else if (faceletToSolve.IsSameNormal(Up))
     MakeUpMove(otherEdgeFacelet);
      else if (faceletToSolve.IsSameNormal(Down))
     MakeDownMove(otherEdgeFacelet);
 }
 private void MakeUpMove(IEdgeFacelet otherEdgeFacelet)
 {
     RotateLayer(otherEdgeFacelet.Normal, Twice);
      RotateLayer(Down, Twice);
      RotateLayer(Front, Twice);
 }
 private void MakeLeftMove(IEdgeFacelet otherEdgeFacelet)
 {
     RotateLayer(Left, otherEdgeFacelet.Normal, Front);
      RotateLayer(Front, Clockwise);
 }
 private void SolveFacelet(IEdgeFacelet faceletToSolve)
 {
     var otherEdgeFacelet = faceletToSolve.OtherEdgeFacelet;
      SetFrontDirection(otherEdgeFacelet.CenterFacelet, _topCenterFacelet);
      SolveBasedOnSide(faceletToSolve, otherEdgeFacelet);
 }
 private int GetFaceletOrder(IEdgeFacelet faceletToSolve)
 {
     var otherEdgeFacelet = faceletToSolve.OtherEdgeFacelet;
      SetFrontDirection(otherEdgeFacelet.CenterFacelet, _topCenterFacelet);
      return GetOrderBasedOnSide(faceletToSolve, otherEdgeFacelet);
 }
 private void MakeUpMove(IEdgeFacelet otherEdgeFacelet)
 {
     RotateLayer(otherEdgeFacelet.Normal, Twice);
      MakeDownMove(otherEdgeFacelet);
 }