예제 #1
0
 // make all gimbals on vessel synchronous
 void synchronize_gimbals()
 {
     gimbal_spd_norm = float.PositiveInfinity;
     if (any_gimbals && any_gimbal_spds)
     {
         // find minimum normalized gimbaling speed
         for (int i = 0; i < engines.Count; i++)
         {
             IGimbal mg = engines[i].gimbal;
             if (mg != null)
             {
                 float norm_spd = mg.UseGimbalSpeed ?
                                  mg.GimbalSpeed : float.PositiveInfinity;
                 if (norm_spd < gimbal_spd_norm)
                 {
                     gimbal_spd_norm = norm_spd;
                 }
             }
         }
         // apply it
         for (int i = 0; i < engines.Count; i++)
         {
             IGimbal mg = engines[i].gimbal;
             if (mg != null)
             {
                 mg.Modify(gimbal_spd_norm);
             }
         }
     }
 }
예제 #2
0
        void get_engines()
        {
            var eng_list = vessel.FindPartModulesImplementing <ModuleEngines>();

            return_gimbals();
            engines.Clear();
            any_gimbals     = false;
            any_gimbal_spds = false;
            foreach (var eng in eng_list)
            {
                if (eng.isOperational || eng.finalThrust != 0.0f)
                {
                    IGimbal gimb = null;
                    foreach (Type moduleType in AtmosphereAutopilot.gimbal_module_wrapper_map.Keys)
                    {
                        PartModule gimbal_module = findModuleByName(eng.part, moduleType.Name);
                        if (gimbal_module != null)
                        {
                            gimb = (IGimbal)AtmosphereAutopilot.gimbal_module_wrapper_map[moduleType].
                                   Invoke(new [] { gimbal_module });
                            if (gimb.Active)
                            {
                                any_gimbals = true;
                                if (gimb.UseGimbalSpeed)
                                {
                                    any_gimbal_spds = true;
                                }
                            }
                            break;
                        }
                    }
                    engines.Add(new EngineMoment(eng, gimb));
                }
            }
            synchronize_gimbals();
        }
예제 #3
0
 public EngineMoment(ModuleEngines m, IGimbal g)
 {
     engine = m;
     gimbal = g;
 }