Exemplo n.º 1
0
        private void findGimbal()
        {
            // if the part definition includes a ModuleGimbal, create GimbalFields and set HasGimbal to true
            var gimbalModule = Part.Modules.GetModules <ModuleGimbal>().FirstOrDefault();

            if (gimbalModule != null)
            {
                HasGimbal = true;
                gimbal    = new GimbalFields(gimbalModule, Shared);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Do not call! VesselTarget.ConstructPart uses this, would use `friend VesselTarget` if this was C++!
        /// </summary>
        internal EngineValue(SharedObjects shared, global::Part part, PartValue parent, DecouplerValue decoupler)
            : base(shared, part, parent, decoupler)
        {
            RawEngineList = new List <ModuleEngines>();
            foreach (var module in part.Modules)
            {
                var mme = module as MultiModeEngine;
                var e   = module as ModuleEngines;
                if (mme != null)
                {
                    if (Multi == null)
                    {
                        Multi = mme;
                    }
                    else
                    {
                        SafeHouse.Logger.LogWarning("Multiple MultiModeEngine on {0}: {1}", part.name, part.partInfo.title);
                    }
                }
                else if (e != null)
                {
                    RawEngineList.Add(e);
                }
            }
            if (RawEngineList.Count < 1)
            {
                throw new KOSException("Attempted to build an Engine from part with no ModuleEngines on {0}: {1}", part.name, part.partInfo.title);
            }
            if (RawEngineList.Count < 2)
            {
                if (Multi != null)
                {
                    SafeHouse.Logger.LogWarning("MultiModeEngine without second engine on {0}: {1}", part.name, part.partInfo.title);
                }
            }
            else
            {
                if (Multi != null)
                {
                    if (Multi.primaryEngineID == RawEngineList[1].engineID)
                    {
                        RawEngineList.Reverse();
                    }
                    else if (Multi.primaryEngineID != RawEngineList[0].engineID)
                    {
                        SafeHouse.Logger.LogWarning("Primary engine ID={0} does not match multi.e1={1} on {2}: {3}",
                                                    RawEngineList[0].engineID, Multi.primaryEngineID, part.name, part.partInfo.title);
                    }
                    if (Multi.secondaryEngineID != RawEngineList[1].engineID)
                    {
                        SafeHouse.Logger.LogWarning("Secondary engine ID={0} does not match multi.e2={1} on {2}: {3}",
                                                    RawEngineList[1].engineID, Multi.secondaryEngineID, part.name, part.partInfo.title);
                    }
                }
            }

            // if the part definition includes a ModuleGimbal, create GimbalFields and set HasGimbal to true
            var gimbalModule = Part.Modules.GetModules <ModuleGimbal>().FirstOrDefault();

            if (gimbalModule != null)
            {
                Gimbal = new GimbalFields(gimbalModule, Shared);
            }

            RegisterInitializer(InitializeSuffixes);
        }