public void MoveMotor(RotorControlData rotorControl) { if (rotorControl != null) { var rotor = rotorControl.RotorObject; var targetAngleD = rotorControl.TargetAngle; if (rotor != null) { float angleD = radiansToDegre(rotor.Angle); if (angleD - targetAngleD < -margin) { rotor.SetValueFloat("Velocity", gain); Echo("+1"); } else if (angleD - targetAngleD > margin) { rotor.SetValueFloat("Velocity", gain * -1f); Echo("-1"); } else { rotor.SetValueFloat("Velocity", 0f); //lose rotor control rotorControl.Finished = true; Echo("0"); } } } }
public void ParseArgument(string argument) { //Argument decode string[] args = argument.Split(' '); if (args.Length == 2) { var rotorName = args[0].Trim(); var rotorTargetAngle = args[1]; string output = $"rotorName: {rotorName}, rotorTargetAngle: {rotorTargetAngle}"; Echo(output); var _rotor = GridTerminalSystem.GetBlockWithName(rotorName) as IMyMotorStator; if (_rotor == null) { Echo("error no rotor from arg."); } else { float rotorTargetAngleF; bool isNumeric = Single.TryParse(rotorTargetAngle, out rotorTargetAngleF); if (!isNumeric) { Echo("rotorTargetAngle is not numeric."); } else { RotorControlData rotorControl = new RotorControlData() { RotorNameFromArg = rotorName, RotorObject = _rotor, TargetAngle = rotorTargetAngleF, Finished = false }; var existing = rotorsControl.Where(x => x.RotorNameFromArg == rotorName).SingleOrDefault(); if (existing != null) { rotorsControl.Remove(existing); } rotorsControl.Add(rotorControl); } } } }