示例#1
0
        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");
                    }
                }
            }
        }
示例#2
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);
                    }
                }
            }
        }