/// <summary> /// Do not call! VesselTarget.ConstructPart uses this, would use `friend VesselTarget` if this was C++! /// </summary> internal PartValue(SharedObjects shared, global::Part part, PartValue parent, DecouplerValue decoupler) { Shared = shared; Part = part; Parent = parent; Decoupler = decoupler; RegisterInitializer(PartInitializeSuffixes); Children = new ListValue <PartValue>(); }
/// <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); }
/// <summary> /// Do not call! VesselTarget.ConstructPart uses this, would use `friend VesselTarget` if this was C++! /// </summary> internal DecouplerValue(SharedObjects shared, global::Part part, PartValue parent, DecouplerValue decoupler) : base(shared, part, parent, decoupler) { }
/// <summary> /// Do not call! VesselTarget.ConstructPart uses this, would use `friend VesselTarget` if this was C++! /// </summary> internal SensorValue(SharedObjects shared, global::Part part, PartValue parent, DecouplerValue decoupler, ModuleEnviroSensor sensor) : base(shared, part, parent, decoupler) { this.sensor = sensor; RegisterInitializer(SensorInitializeSuffixes); }
/// <summary> /// Do not call! VesselTarget.ConstructPart uses this, would use `friend VesselTarget` if this was C++! /// </summary> internal DockingPortValue(SharedObjects shared, global::Part part, PartValue parent, DecouplerValue decoupler, ModuleDockingNode module) : base(shared, part, parent, decoupler) { this.module = module; RegisterInitializer(DockingInitializeSuffixes); }
/// <summary> /// Do not call! VesselTarget.ConstructPart uses this, would use `friend VesselTarget` if this was C++! /// </summary> internal RCSValue(SharedObjects shared, global::Part part, PartValue parent, DecouplerValue decoupler, ModuleRCS module) : base(shared, part, parent, decoupler) { this.module = module; RegisterInitializer(RCSInitializeSuffixes); }