public static void Add(MotorMove mv) { Add(new BeginGroupeInstruction(mv.ToString())); Add(new IHMCubeMoveInstruction(mv)); using (var state = GlobalState.GetState()) { var remainQuarters = new int[] { mv.MidMinMovesCount, mv.MidMaxMovesCount, mv.MaxMovesCount }; // cas particulier de l'axe Z Max qui pour fonctionner correctement doit être après un mouvement de son voisin qui remet de l'ordre //if(mv.Axe== Axe.Z && mv.MaxMovesCount != 0) //{ // // Ajouter un quart de tour de ZMidMax dans un sens, puis dans l'autre en finissant par le même sens que Z mAx pour limiter le nombre de mouvement // var sensZMax = Math.Sign(mv.MaxMovesCount); // AddWithAnticollision(state, new int[] { 0, -sensZMax, 0 }, -sensZMax, Axe.Z); // AddWithAnticollision(state, new int[] { 0, sensZMax, 0 }, sensZMax, Axe.Z); //} // Mouvement de multiple courronnes simultanée //if (mv.PotentialNegativeQuarters > mv.PotentialPositiveQuarters) //{ // commencer par tourner dans le sens négatif car c'est ce qu'il y a de plus à faire // // dans le cas d'un sens négatif, faire les demi tour dans l'autre sens // for (int i = 0; i < remainQuarters.Length; i++) // { // if (remainQuarters[i] == 2) remainQuarters[i] = -2; // } // AddWithAnticollision(state, remainQuarters, -1, mv.Axe); // AddWithAnticollision(state, remainQuarters, -1, mv.Axe);// il y a au plus 2 quarts de tour à faire pour chanque sens // AddWithAnticollision(state, remainQuarters, 1, mv.Axe); // AddWithAnticollision(state, remainQuarters, 1, mv.Axe); //} //else //{ // AddWithAnticollision(state, remainQuarters, 1, mv.Axe); // AddWithAnticollision(state, remainQuarters, 1, mv.Axe); // AddWithAnticollision(state, remainQuarters, -1, mv.Axe); // AddWithAnticollision(state, remainQuarters, -1, mv.Axe); //} // mouvement couronne par courrone AddWithAnticollision(state, mv.MidMinMovesCount, Couronne.MidMin, mv.Axe); AddWithAnticollision(state, mv.MidMaxMovesCount, Couronne.MidMax, mv.Axe); AddWithAnticollision(state, mv.MaxMovesCount, Couronne.Max, mv.Axe); //AddInitBlock(); } }
public void Add(Axe a, Couronne c, Sens s) { Add(new Move(a, c, s)); var motorMove = new MotorMove(a, c, s); if (MotorMoves.Count > 0 && MotorMoves.Last().Axe == a) { MotorMoves.Last().Add(c, s); } else { MotorMoves.Add(motorMove); } }
public IHMCubeMoveInstruction(MotorMove move) { this.Move = move; }