public int GetMoves(Couronne courrone) { switch (courrone) { case Couronne.Max: return(MaxMovesCount); break; case Couronne.MidMax: return(MidMaxMovesCount); break; case Couronne.MidMin: return(MidMinMovesCount); break; default: return(0); break; } }
public MoveClickEventArgs(MotorMove mv, Axe a, Sens s, Couronne c) { MotorMove = mv; Axe = a; Sens = s; Couronne = c; }
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); } }
/// <summary> /// /// </summary> /// <param name="state"></param> /// <param name="remainQuarters"></param> /// <param name="sens">1 ou -1</param> /// <param name="axe"></param> //private static void AddWithAnticollision(GlobalState state,int[] remainQuarters, int sens, Axe axe) //{ // var couronnesToMove = new List<Couronne>(); // var couronnesToFix = new List<Couronne>(); // if (Math.Sign(remainQuarters[0]) == sens) // { // couronnesToMove.Add(Couronne.MidMin); // remainQuarters[0] -= sens ; // } // else couronnesToFix.Add(Couronne.MidMin); // if (Math.Sign(remainQuarters[1]) == sens) // { // couronnesToMove.Add(Couronne.MidMax); // remainQuarters[1] -= sens; // } // else couronnesToFix.Add(Couronne.MidMax); // if (Math.Sign(remainQuarters[2]) == sens) // { // couronnesToMove.Add(Couronne.Max); // remainQuarters[2]-= sens; // } // else couronnesToFix.Add(Couronne.Max); // if (couronnesToMove.Count == 0) return; // Add(new SetAccelerationInstruction(state.HardwareConfigGlobal.DisengagedAcceleration)); // Add(new SetSpeedInstruction(state.HardwareConfigGlobal.DisengagedSpeed)); // // mise en position des couronnes parallèles // foreach (var c in couronnesToFix) // { // AddMoveToKnowPosition(axe, c, sens > 0 ? KnownPosition.MinStop : KnownPosition.MaxStop); // } // // mise en position des couronnes motrices // foreach (var c in couronnesToMove) // { // AddMoveToKnowPosition(axe, c, sens > 0 ? KnownPosition.MaxStop : KnownPosition.MinStop); // } // //Déplacement des autres couronnes perpendiculaires // foreach (var motor in state.Motors.Motors) // { // if (motor.Axe == axe) continue; // /* // var negCollision = couronnesToMove.Any((c) => motor.NegativeCollision.HasCollision(axe, c)); // var posCollision = couronnesToMove.Any((c) => motor.PositiveCollision.HasCollision(axe, c)); // KnownPosition pos; // if (negCollision && posCollision) pos = KnownPosition.Middle; // else if (negCollision) pos = KnownPosition.MaxStop; // else if (posCollision) pos = KnownPosition.MinStop; // else // { // // si pas de collision, ne pas toucher au moteur sauf s'il est en position middle non engreiné // if (_designContext.GetPosition(motor.Courronne, motor.Axe) == KnownPosition.Middle) pos = KnownPosition.MinStop; // else continue; // } // AddMoveToKnowPosition(motor.Axe, motor.Courronne, pos); // */ // AddMoveToKnowPosition(motor.Axe, motor.Courronne, KnownPosition.Middle); // } // Add(new WaitTargetReachedInstruction()); // Add(new SetAccelerationInstruction(state.HardwareConfigGlobal.EngagedAcceleration)); // Add(new SetSpeedInstruction(state.HardwareConfigGlobal.EngagedSpeed)); // // faire un quart de tour // foreach(var c in couronnesToMove) // { // AddMoveToKnowPosition(axe, c, sens > 0 ? KnownPosition.PositiveQuarterFromMaxStop : KnownPosition.NegativeQuarterFromMinStop); // } // Add(new WaitTargetReachedInstruction()); //} private static void AddMoveToKnowPosition(Axe axe, Couronne couronne, KnownPosition pos) { Add(new MoveToKnownPositionInstruction(axe, couronne, pos)); /* * if (_designContext.GetPosition(couronne, axe) != pos) * { * Add(new MoveToKnownPositionInstruction(axe, couronne, pos)); * * // un quart de tour ne modifie pas la position actuelle, ne mettre à jour que si changement * if (pos != KnownPosition.NegativeQuarter && pos != KnownPosition.PositiveQuarter) * { * _designContext.SetPosition(couronne, axe, pos); * } * } */ }
public void Add(Couronne c, Sens s) { switch (c) { case Couronne.Max: Increment(ref MaxMovesCount, s); break; case Couronne.MidMax: Increment(ref MidMaxMovesCount, s); break; case Couronne.MidMin: Increment(ref MidMinMovesCount, s); break; } }
public Move(Axe a, Couronne c, Sens s) { _axe = a; _couronne = c; _sens = s; _vector = Vector3.Zero; switch (a) { case Axe.X: _vector.X = (int)c; break; case Axe.Y: _vector.Y = (int)c; break; case Axe.Z: _vector.Z = (int)c; break; } }
private void SetCollision(Axe a, Couronne c, bool value) { int cId; switch (c) { case Couronne.MidMin: cId = 0; break; case Couronne.MidMax: cId = 1; break; case Couronne.Max: cId = 2; break; default: return; } items[(int)a, cId] = value; }
public bool HasCollision(Axe a, Couronne c) { int cId; switch (c) { case Couronne.MidMin: cId = 0; break; case Couronne.MidMax: cId = 1; break; case Couronne.Max: cId = 2; break; default: return(false); } return(items[(int)a, cId]); }
static void Main(string[] args) { int reponse; do { Console.Clear(); //Console.BackgroundColor = ConsoleColor.Green; Console.ForegroundColor = ConsoleColor.Red; Console.SetCursorPosition(15, 2); Console.WriteLine("1 - Calcul de la surface d'un Carre"); Console.SetCursorPosition(15, 3); Console.WriteLine("2 - Calcul de la surface d'un Cercle"); Console.SetCursorPosition(15, 4); Console.WriteLine("3 - Calcul de la surface d'un Triangle"); Console.SetCursorPosition(15, 5); Console.WriteLine("4 - Calcul de la Surface d'un Rectangle"); Console.SetCursorPosition(15, 6); Console.WriteLine("5 - Calcul de la surface d'un Losange"); Console.SetCursorPosition(15, 7); Console.WriteLine("6 - Calcul de la surface d'un Trapeze"); Console.SetCursorPosition(15, 8); Console.WriteLine("7 - Calcul de la surface d'un Parallelogramme"); Console.SetCursorPosition(15, 9); Console.WriteLine("8 - Calcul de la surface d'un Pentagone Regulier"); Console.SetCursorPosition(15, 10); Console.WriteLine("9 - Calcul de la surface d'une Couronne(Anneau)"); Console.SetCursorPosition(15, 11); Console.WriteLine("10 - Calcul de la surface d'un Demi - Cercle"); Console.SetCursorPosition(15, 12); Console.WriteLine("11 - Calcul de la surface d'une Ellipse"); Console.SetCursorPosition(15, 13); Console.WriteLine("12 - Calcul de la surface d'un Hexagone Regulier"); Console.SetCursorPosition(15, 14); Console.WriteLine("0 - Quitter"); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Entrez votre Choix"); reponse = Convert.ToInt32(Console.ReadLine()); switch (reponse) { // Calcul de la surface d'un carre case 1: Console.ForegroundColor = ConsoleColor.Red; Console.SetCursorPosition(15, 19); Console.WriteLine("LA SURFACE D'UN CARRE"); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Donnez la longueur du Cote"); float c = float.Parse(Console.ReadLine()); Carre ca = new Carre(c); float aireCarre = ca.Aire(); Console.WriteLine("La Surface d'un carre de {0} Cm de cote est : {1} Cm2", c, aireCarre); Console.ReadLine(); break; // Calcul de la surface d'un Cercle case 2: Console.ForegroundColor = ConsoleColor.White; Console.SetCursorPosition(15, 19); Console.WriteLine("LA SURFACE D'UN CERCLE"); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Donnez la longueur du Rayon"); float r = float.Parse(Console.ReadLine()); Cercle ce = new Cercle(r); float aireCercle = ce.Aire(); Console.WriteLine("La surface d'un cercle de {0} Cm de rayon est : {1} Cm2", r, aireCercle); Console.ReadLine(); break; // Calcul de la surface d'un Triangle case 3: Console.ForegroundColor = ConsoleColor.Green; Console.SetCursorPosition(15, 19); Console.WriteLine("LA SURFACE D'UN TRIANGLE"); Console.ForegroundColor = ConsoleColor.Gray; //Figure(); Console.WriteLine("Donnez la longueur de la base du triangle"); float B = float.Parse(Console.ReadLine()); Console.WriteLine("Donnez la longueur de la hauteur de triangle"); float h = float.Parse(Console.ReadLine()); Triangle tr = new Triangle(B, h); float aireTriangle = tr.Aire(); Console.WriteLine("La surface d'un Triangle de {0} Cm de base et {1} Cm de hauteur est : {2} Cm2", B, h, aireTriangle); Console.ReadLine(); break; // Calcul de la Surface d'un rectangle case 4: Console.ForegroundColor = ConsoleColor.Magenta; Console.SetCursorPosition(15, 19); Console.WriteLine("LA SURFACE D'UN RECTANGLE"); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Donnez la longueur du rectangle"); float L = float.Parse(Console.ReadLine()); Console.WriteLine("Donnez la largeur du rectangle"); float l = float.Parse(Console.ReadLine()); Rectangle re = new Rectangle(L, l); float aireRectangle = re.Aire(); Console.WriteLine("La surface d'un rectangle de {0} Cm de Long et {1} Cm de large est : {2} Cm2", L, l, aireRectangle); Console.ReadLine(); break; // Calcul de la surface d'un Losange case 5: Console.ForegroundColor = ConsoleColor.Blue; Console.SetCursorPosition(15, 19); Console.WriteLine("LA SURFACE D'UN LOSANGE"); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Donnez la taille de la grande diagonale"); float gd = float.Parse(Console.ReadLine()); Console.WriteLine("Donnez la taille de la petite diagonale"); float pd = float.Parse(Console.ReadLine()); Losange lo = new Losange(gd, pd); float aireLosange = lo.Aire(); Console.WriteLine("La surface d'un Losange de {0} Cm de grande diagonal et {1} Cm de petite diagonale est : {2} Cm2", gd, pd, aireLosange); Console.ReadLine(); break; // Calcul de la surface d'un Trapeze case 6: Console.ForegroundColor = ConsoleColor.Magenta; Console.SetCursorPosition(15, 19); Console.WriteLine("LA SURFACE D'UN TRAPEZE"); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Donnez la taille de la grande base"); float gb = float.Parse(Console.ReadLine()); Console.WriteLine("Donnez la taille de la petite base"); float pb = float.Parse(Console.ReadLine()); Console.WriteLine("Donnez la taille de la hauteur"); float ha = float.Parse(Console.ReadLine()); Trapeze Tr = new Trapeze(gb, pb, ha); float aireTrapeze = Tr.Aire(); Console.WriteLine("La surface d'un Trapeze de {0} Cm de grande base, {1} Cm de petite base et {2} de hauteur est : {3} Cm2", gb, pb, ha, aireTrapeze); Console.ReadLine(); break; // Calcul de la surface d'un Parallelogramme case 7: Console.ForegroundColor = ConsoleColor.Yellow; Console.SetCursorPosition(15, 19); Console.WriteLine("LA SURFACE D'UN PARALLELOGRAMME"); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Donnez la longueur de la grande base du parallelogramme"); float lb = float.Parse(Console.ReadLine()); Console.WriteLine("Donnez la taille de la hauteur du parallelogramme"); float ht = float.Parse(Console.ReadLine()); Parallelogramme Pa = new Parallelogramme(lb, ht); float aireParallelogramme = Pa.Aire(); Console.WriteLine("La surface d'un Parallelogramme de {0} Cm de longueur de la base et de {1} Cm de hauteur est : {2} Cm2", lb, ht, aireParallelogramme); Console.ReadLine(); break; // Calcul de la surface d'un Pentagone Regulier case 8: Console.ForegroundColor = ConsoleColor.DarkRed; Console.SetCursorPosition(15, 19); Console.WriteLine("LA SURFACE D'UN PENTAGONE REGULIER"); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Donnez la Longueur du triangle"); float LT = float.Parse(Console.ReadLine()); Console.WriteLine("Donnez la longueur de la hauteur"); float HT = float.Parse(Console.ReadLine()); Pentagone Pe = new Pentagone(LT, HT); float airePentagone = Pe.Aire(); Console.WriteLine("La surface d'un Pentagone de {0} cm de la Longueur du triangle et de {1} Cm de hauteur est : {2} Cm2", LT, HT, airePentagone); Console.ReadLine(); break; // Calcul de la surface d'une Couronne(Anneau) case 9: Console.ForegroundColor = ConsoleColor.DarkMagenta; Console.SetCursorPosition(15, 19); Console.WriteLine("LA SURFACE D'UNE COURONNE"); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Donnez la taille du grand Rayon"); float gR = float.Parse(Console.ReadLine()); Console.WriteLine("Donnez la taille du petit Rayon"); float pR = float.Parse(Console.ReadLine()); Couronne Cou = new Couronne(gR, pR); float aireCouronne = Cou.Aire(); Console.WriteLine("La surface d'une Couronne de {0} Cm de grand rayon et de {1} Cm de petit rayon est {2} Cm2", gR, pR, aireCouronne); Console.ReadLine(); break; // Calcul de la surface d'un Demi - Cercle case 10: Console.ForegroundColor = ConsoleColor.DarkGreen; Console.SetCursorPosition(15, 19); Console.WriteLine("LA SURFACE D'UN DEMI-CERCLE"); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Donnez la taille du rayon du Demi - cercle"); float R = float.Parse(Console.ReadLine()); Demicercle DC = new Demicercle(R); float aireDemicercle = DC.Aire(); Console.WriteLine("La surface d'un Demi Cercle de rayon {0} Cm est : {1} Cm2", R, aireDemicercle); Console.ReadLine(); break; // Calcul de la surface d'une Ellipse case 11: Console.ForegroundColor = ConsoleColor.Cyan; Console.SetCursorPosition(15, 19); Console.WriteLine("LA SURFACE D'UNE ELLIPSE"); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Donnez la taille de la moitier du grand axe"); float mga = float.Parse(Console.ReadLine()); Console.WriteLine("Donnez la taille de la moitier du grand axe"); float mpa = float.Parse(Console.ReadLine()); Ellipse El = new Ellipse(mga, mpa); float aireEllipse = El.Aire(); Console.WriteLine("La surface d'une Ellipse de {0} Cm de grand axe et de {1} Cm de petit axe est : {2} Cm2", mga, mpa, aireEllipse); Console.ReadLine(); break; // Calcul de la surface d'un Hexagone Regulier case 12: Console.ForegroundColor = ConsoleColor.DarkYellow; Console.SetCursorPosition(15, 19); Console.WriteLine("LA SURFACE D'UN HEXAGONE"); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Donnez la longueur du Coté de l'Hexagone"); float Ct = float.Parse(Console.ReadLine()); Hexagone He = new Hexagone(Ct); float aireHexagone = He.Aire(); Console.WriteLine("La surface d'un Hexagone de {0} Cm de cote est : {1} m2", Ct, aireHexagone); Console.ReadLine(); break; default: break; } } while (reponse != 0); }
public int?GetTargetPosition(Couronne c, Axe a) { return(_lst.First((x) => x.Couronne == c && x.Axe == a).TargetPosition); }
public void SetTargetPosition(Couronne c, Axe a, int value) { _lst.First((x) => x.Couronne == c && x.Axe == a).TargetPosition = value; }
private static void AddWithAnticollision(GlobalState state, int quarters, Couronne couronne, Axe axe) { if (quarters == 0) { return; } var couronnesToFix = new Couronne[] { Couronne.MidMin, Couronne.MidMax, Couronne.Max }.Except(new Couronne[] { couronne }).ToArray(); var sens = Math.Sign(quarters); Add(new SetAccelerationInstruction(state.HardwareConfigGlobal.DisengagedAcceleration)); Add(new SetSpeedInstruction(state.HardwareConfigGlobal.DisengagedSpeed)); // mise en position des couronnes parallèles foreach (var c in couronnesToFix) { /* * if (couronne == Couronne.Max) * { * AddMoveToKnowPosition(axe, c, sens < 0 ? KnownPosition.MinStop : KnownPosition.MaxStop); * } * else * { */ if (axe == Axe.Z && couronne == Couronne.Max) { AddMoveToKnowPosition(axe, c, KnownPosition.MinStop); } else if (axe == Axe.Y && couronne == Couronne.Max) { AddMoveToKnowPosition(axe, c, KnownPosition.MaxStop); } else { AddMoveToKnowPosition(axe, c, sens > 0 ? KnownPosition.MinStop : KnownPosition.MaxStop); } // } } if (axe == Axe.Z && couronne == Couronne.Max) { AddMoveToKnowPosition(axe, couronne, KnownPosition.MaxStop); } else if (axe == Axe.Y && couronne == Couronne.Max) { AddMoveToKnowPosition(axe, couronne, KnownPosition.MinStop); } else { // moteur en position AddMoveToKnowPosition(axe, couronne, sens > 0 ? KnownPosition.MaxStop : KnownPosition.MinStop); } //Déplacement des autres couronnes perpendiculaires foreach (var motor in state.Motors.Motors) { if (motor.Axe == axe) { continue; } //var negCollision = motor.NegativeCollision.HasCollision(axe, couronne); //var posCollision = motor.PositiveCollision.HasCollision(axe, couronne); //KnownPosition pos; //if (negCollision && posCollision) pos = KnownPosition.Middle; //else if (negCollision) pos = KnownPosition.MaxStopIntermediaire; //else if (posCollision) pos = KnownPosition.MinStopIntermediaire; //else //{ // // si pas de collision, ne pas toucher au moteur sauf s'il est en position middle non engreiné // if (_designContext.GetPosition(motor.Courronne, motor.Axe) == KnownPosition.Middle) pos = KnownPosition.MinStopIntermediaire; // else continue; //} //AddMoveToKnowPosition(motor.Axe, motor.Courronne, pos); AddMoveToKnowPosition(motor.Axe, motor.Courronne, KnownPosition.Middle); } Add(new WaitTargetReachedInstruction()); Add(new SetAccelerationInstruction(state.HardwareConfigGlobal.EngagedAcceleration)); Add(new SetSpeedInstruction(state.HardwareConfigGlobal.EngagedSpeed)); /* * if(couronne == Couronne.Max) * { * AddMoveToKnowPosition(axe, Couronne.MidMin, sens > 0 ? KnownPosition.PositiveSmallAmount : KnownPosition.NegativeSmallAmount); * AddMoveToKnowPosition(axe, Couronne.MidMax, sens > 0 ? KnownPosition.PositiveSmallAmount : KnownPosition.NegativeSmallAmount); * Add(new WaitTargetReachedInstruction()); * Add(new SetAccelerationInstruction(state.HardwareConfigGlobal.DisengagedAcceleration)); * Add(new SetSpeedInstruction(state.HardwareConfigGlobal.DisengagedSpeed)); * AddMoveToKnowPosition(axe, Couronne.MidMin, sens < 0 ? KnownPosition.PositiveSmallAmount : KnownPosition.NegativeSmallAmount); * AddMoveToKnowPosition(axe, Couronne.MidMax, sens < 0 ? KnownPosition.PositiveSmallAmount : KnownPosition.NegativeSmallAmount); * Add(new WaitTargetReachedInstruction()); * AddMoveToKnowPosition(axe, Couronne.MidMin, sens > 0 ? KnownPosition.MinStop : KnownPosition.MaxStop); * AddMoveToKnowPosition(axe, Couronne.MidMax, sens > 0 ? KnownPosition.MinStop : KnownPosition.MaxStop); * Add(new WaitTargetReachedInstruction()); * Add(new SetAccelerationInstruction(state.HardwareConfigGlobal.EngagedAcceleration)); * Add(new SetSpeedInstruction(state.HardwareConfigGlobal.EngagedSpeed)); * } */ if (axe == Axe.Z && couronne == Couronne.Max && quarters == -1) { AddMoveToKnowPosition(axe, couronne, KnownPosition.UTurnPositive); AddMoveToKnowPosition(axe, couronne, KnownPosition.PositiveQuarter); } else if (axe == Axe.Y && couronne == Couronne.Max && quarters == 1) { AddMoveToKnowPosition(axe, couronne, KnownPosition.UTurnNegative); AddMoveToKnowPosition(axe, couronne, KnownPosition.NegativeQuarter); } else if (axe == Axe.Y && couronne == Couronne.Max && quarters == 2) { AddMoveToKnowPosition(axe, couronne, KnownPosition.UTurnNegative); } else { // faire les quarts de tour AddMoveToKnowPosition(axe, couronne, quarters == -1 ? KnownPosition.NegativeQuarter : (quarters == 1 ? KnownPosition.PositiveQuarter : KnownPosition.UTurnPositive)); } Add(new WaitTargetReachedInstruction()); }
public KnownPosition GetPosition(Couronne c, Axe a) { return(_lst.First((x) => x.Couronne == c && x.Axe == a).Position); }
public void SetPosition(Couronne c, Axe a, KnownPosition value) { _lst.First((x) => x.Couronne == c && x.Axe == a).Position = value; }
public MoveToKnownPositionInstruction(Axe axe, Couronne couronne, KnownPosition pos) { this.Couronne = couronne; this.Axe = axe; this.KnownPosition = pos; }
public MotorMove(Axe a, Couronne c, Sens s) { this.Axe = a; Add(c, s); }
public static void MoveToKnownPosition(Axe Axe, Couronne Couronne, KnownPosition KnownPosition, ResolutionSessionRuntimeContext ctx = null) { int steps; using (var state = GlobalState.GetState()) { var Motor = state.Motors.Motors.FirstOrDefault((x) => x.Axe == Axe && x.Courronne == Couronne); if (Motor == null) { throw new Exception("Unable to find motor definition for crown " + Couronne + " axe " + Axe); } var stepPerQuarter = state.HardwareConfigGlobal.StepsPerCubeQuarter; var modPos = Motor.Position % stepPerQuarter; if (modPos < 0) { modPos += stepPerQuarter; } switch (KnownPosition) { case KnownPosition.NegativeQuarter: steps = -stepPerQuarter; break; case KnownPosition.PositiveQuarter: steps = stepPerQuarter; break; case KnownPosition.NegativeQuarterFromMinStop: steps = -stepPerQuarter + Motor.StepsToPositivePosition / 2; break; case KnownPosition.PositiveQuarterFromMaxStop: steps = stepPerQuarter - Motor.StepsToPositivePosition / 2; break; case KnownPosition.UTurnFromMaxStop: steps = 2 * stepPerQuarter - Motor.StepsToPositivePosition / 2;; break; case KnownPosition.UTurnPositive: steps = 2 * stepPerQuarter; break; case KnownPosition.UTurnNegative: steps = -2 * stepPerQuarter; break; case KnownPosition.MaxStop: steps = Motor.StepsToPositivePosition - modPos; break; case KnownPosition.MinStop: steps = -modPos; break; case KnownPosition.Middle: steps = Motor.StepsToPositivePosition / 2 - modPos; break; case KnownPosition.PositiveSmallAmount: steps = stepPerQuarter / 6; break; case KnownPosition.NegativeSmallAmount: steps = -stepPerQuarter / 6; break; case KnownPosition.MaxStopIntermediaire: steps = Motor.StepsToPositivePosition - modPos - stepPerQuarter / 10; break; case KnownPosition.MinStopIntermediaire: steps = -modPos + stepPerQuarter / 10; break; default: throw new Exception("Unknow position : " + KnownPosition); } steps += Motor.Position; if (ctx != null) { ctx.SetTargetPosition(Motor.Courronne, Motor.Axe, steps); } if (state.Simulated) { return; } Runner.BeginMoveAbsolute(Motor, steps); } }