public override void OnStart(StartState state) { base.OnStart(state); if (HighLogic.LoadedSceneIsFlight) { if (string.IsNullOrEmpty(serializedNode)) { this.LogError("Serialized node is null or empty!"); return; } ConfigNode node = ConfigNode.Parse(serializedNode).nodes[0]; LoadTransforms(node); deployable = this.GetComponent <ModuleDeployablePart>(); if (deployable == null) { Debug.LogError("No ModuleDeployablePart found on part"); return; } savedState = deployable.deployState; SetVisibility(savedState != ModuleDeployablePart.DeployState.BROKEN); } }
// controls the PearModule public static void SetPearModule(Part _part2, PearPowerController _pPC) { PearModule pM = _part2.GetComponent <PearModule>(); ModuleDeployablePart mDP = _part2.GetComponent <ModuleDeployablePart>(); PearPowerController pPC = _pPC; if (pPC.isPowerOn && mDP.deployState == ModuleDeployablePart.DeployState.RETRACTED || mDP.deployState == ModuleDeployablePart.DeployState.RETRACTING) { pM.Events["ExtendAll"].active = true; pM.Events["RetractAll"].active = false; } else if (pPC.isPowerOn && mDP.deployState == ModuleDeployablePart.DeployState.EXTENDED || mDP.deployState == ModuleDeployablePart.DeployState.EXTENDING) { pM.Events["ExtendAll"].active = false; pM.Events["RetractAll"].active = true; } else if (!pPC.isPowerOn || mDP.deployState == ModuleDeployablePart.DeployState.BROKEN) { pM.Events["ExtendAll"].active = false; pM.Events["RetractAll"].active = false; } }
private bool InitializeSpring() { //Debug.Log($"[KSP Secondary Motion - Spring Physics] Initializing Spring"); target = part.FindModelTransform(targetName); if (!target) { Debug.Log($"[KSP Secondary Motion - Spring Physics] Can't Find Transform *{targetName}*"); return(false); } root = part.FindModelTransform(rootName); if (!root) { Debug.Log($"[KSP Secondary Motion - Spring Physics] Can't Find Transform *{rootName}*"); return(false); } target.rotation = transform.rotation; springObj = new GameObject("Spring").transform; springObj.transform.position = target.transform.position; springObj.transform.rotation = target.transform.rotation; springRB = springObj.gameObject.AddComponent <Rigidbody>(); springRB.mass = tipMass; springRB.drag = 0f; springRB.angularDrag = 0f; springRB.useGravity = false; springRB.constraints = (RigidbodyConstraints)((int)RigidbodyConstraints.FreezeRotationX + (int)RigidbodyConstraints.FreezeRotationY + (int)RigidbodyConstraints.FreezeRotationZ); foreach (PartModule m in part.Modules) { switch (m.moduleName) { case "ModuleDeployableSolarPanel": case "ModuleDeployableAntenna": case "ModuleDeployableRadiator": case "ModuleDeployablePart": Debug.Log($"[KSP Secondary Motion - Spring Physics] Found {m.moduleName}"); deployablePart = (ModuleDeployablePart)m; goto END_OF_FOREACH; //case "ModuleAnimateGeneric": // Debug.Log($"[KSP Secondary Motion - Spring Physics] Found {m.moduleName}"); // animateGeneric = (ModuleAnimateGeneric)m; // goto END_OF_FOREACH; default: break; } } END_OF_FOREACH: //How to break loop from switch //plz don't kill me return(true); }
/// <summary> /// Called when the module is starting up. /// </summary> /// <param name="state"></param> public override void OnStart(StartState state) { base.OnStart(state); deployable = FindDeployable(); if (deployable == null) { Logging.Error("No ModuleDeployablePart found for " + Logging.ToString(part) + ", ignoring"); } lastState = new State(this); currentState = new State(this); SetState(); }
private static bool GetLineOfSight(ModuleDeployablePart solarPanel, StarLight star, Vector3d trackDir) { var trackingBody = solarPanel.trackingBody; solarPanel.trackingTransformLocal = star.star.transform; solarPanel.trackingTransformScaled = star.star.scaledBody.transform; var blockingObject = ""; var trackingLos = solarPanel.CalculateTrackingLOS(trackDir, ref blockingObject); solarPanel.trackingTransformLocal = trackingBody.transform; solarPanel.trackingTransformScaled = trackingBody.scaledBody.transform; return(trackingLos); }
public bool AllRetracted() { for (int i = 0; i < vessel.parts.Count; i++) { Part p = vessel.parts[i]; for (int j = 0; j < p.Modules.Count; j++) { ModuleDeployablePart mdp = p.Modules[j] as ModuleDeployablePart; if (mdp != null && isModules(mdp) && isDeployable(mdp) && mdp.deployState != ModuleDeployablePart.DeployState.RETRACTED) { return(false); } } } return(true); }
/// <summary> /// Try to find the ModuleDeployablePart for the current part. /// </summary> /// <returns></returns> private ModuleDeployablePart FindDeployable() { if (part == null) { return(null); } for (int i = 0; i < part.Modules.Count; ++i) { ModuleDeployablePart candidate = part.Modules[i] as ModuleDeployablePart; if (candidate != null) { return(candidate); } } return(null); }
public bool AllRetracted() { for (int i = 0; i < vessel.parts.Count; i++) { Part p = vessel.parts[i]; var deployable = getModules(p); for (int j = 0; j < deployable.Count; j++) { ModuleDeployablePart sa = deployable[j]; if (isDeployable(sa) && sa.deployState != ModuleDeployablePart.DeployState.RETRACTED) { return(false); } } } return(true); }
protected bool ExtendingOrRetracting() { for (int i = 0; i < vessel.parts.Count; i++) { Part p = vessel.parts[i]; for (int j = 0; j < p.Modules.Count; j++) { ModuleDeployablePart mdp = p.Modules[j] as ModuleDeployablePart; if (mdp != null && isModules(mdp) && isDeployable(mdp) && (mdp.deployState == ModuleDeployablePart.DeployState.EXTENDING || mdp.deployState == ModuleDeployablePart.DeployState.RETRACTING)) { return(true); } } } return(false); }
public void RetractAll() { List <Part> vp = vessel.parts; for (int i = 0; i < vp.Count; i++) { Part p = vp[i]; if (p.ShieldedFromAirstream) { return; } for (int j = 0; j < p.Modules.Count; j++) { ModuleDeployablePart mdp = p.Modules[j] as ModuleDeployablePart; if (mdp != null && isModules(mdp) && isDeployable(mdp)) { mdp.Retract(); } } } }
public void Initialize() { // find transforms pivot = part.FindModelTransform(pivotName); if (pivot == null) { Debug.LogError($"[KSP Secondary Motion - Quadratic Bezier Interpolation] Cannot find transform {pivotName}"); return; } tip = part.FindModelTransform(tipName); if (tip == null) { Debug.LogError($"[KSP Secondary Motion - Quadratic Bezier Interpolation] Cannot find transform {tipName}"); return; } // get segments if (InterpolationSegmentData.segmentsDataBase.TryGetValue(part.name, out List <InterpolationSegmentData.Segment> segmentsData)) { segments = segmentsData.Select(seg => part.FindModelTransform(seg.name)).ToArray(); //Debug.Log($"[KSP Secondary Motion - Quadratic Bezier Interpolation] Interpolation Segment Data found"); } else { Debug.LogError($"[KSP Secondary Motion - Quadratic Bezier Interpolation] Interpolation Segment Data for {part.name} not found!"); return; } float distance = Vector3.Distance(pivot.position, tip.position); //Vector3 direction = (tip.position - pivot.position).normalized; control = transform.Find("Bezier Control"); if (control == null) { control = new GameObject("Bezier Control").transform; } control.parent = transform; control.position = transform.position + pivot.parent.up * distance / 2f; control.localRotation = Quaternion.identity; foreach (PartModule m in part.Modules) { switch (m.moduleName) { case "ModuleDeployableSolarPanel": case "ModuleDeployableAntenna": case "ModuleDeployableRadiator": case "ModuleDeployablePart": Debug.Log($"[KSP Secondary Motion - Quadratic Bezier Interpolation] Found {m.moduleName} on Part {part.name}"); deployablePart = (ModuleDeployablePart)m; return; default: break; } } string input = lookAtUp.ToLower().Trim(); switch (input) { case "xpos": up = Direction.Xpos; break; case "xneg": up = Direction.Xneg; break; case "ypos": up = Direction.Ypos; break; case "yneg": up = Direction.Yneg; break; case "zpos": up = Direction.Zpos; break; case "zneg": up = Direction.Zneg; break; } }
protected override bool isModules(ModuleDeployablePart p) { return(p is ModuleDeployableSolarPanel); }
protected bool isDeployable(ModuleDeployablePart sa) { return(sa.Events["Extend"].active || sa.Events["Retract"].active); }
protected abstract bool isModules(ModuleDeployablePart p);
/// <summary> /// Initialize the radar system. /// </summary> public void Start() { if (resourceAmount > 0.0f && !string.IsNullOrEmpty(resourceName)) { try { PartResourceDefinition def = PartResourceLibrary.Instance.resourceDefinitions[resourceName]; resourceId = def.id; } catch (Exception) { Utility.LogError(this, "Unable to find a resource ID for \"{0}\". Disabling resource consumption.", resourceName); resourceAmount = 0.0f; } } else { resourceAmount = 0.0f; } if (!HighLogic.LoadedSceneIsFlight) { return; } scanAngle = Mathf.Clamp(scanAngle, 0.01f, 180.0f); maxRangeMeters = maxRange * 1000.0; maxRangeMetersSquared = maxRangeMeters * maxRangeMeters; if (!string.IsNullOrEmpty(radarTransform)) { scanTransformIsDockingNode = false; try { Transform[] transforms = part.FindModelTransforms(radarTransform); scanTransform = transforms[0]; } catch (Exception e) { Utility.ComplainLoudly("MASRadar cannot find the radar transform"); Utility.LogError(this, "Unable to find the named transform {0}", radarTransform); Utility.LogError(this, "Exception: {0}", e); scanTransform = part.transform; } } else { scanTransform = part.transform; scanTransformIsDockingNode = false; try { ModuleDockingNode dockingNode = part.FindModuleImplementing <ModuleDockingNode>(); if (dockingNode != null) { dock = dockingNode; scanTransform = dockingNode.nodeTransform; nodeType = dockingNode.nodeType; scanTransformIsDockingNode = true; } } catch (Exception e) { Utility.LogError(this, "Setting dockingNode transform."); Utility.LogError(this, "Exception: {0}", e); } } if (DeployFxModules >= 0) { try { PartModule pm = part.Modules[DeployFxModules]; if (pm != null) { if (pm is ModuleDeployablePart) { deployPart = pm as ModuleDeployablePart; } else if (pm is ModuleAnimateGeneric) { deployAnimator = pm as ModuleAnimateGeneric; } } } catch (Exception e) { Utility.LogError(this, "Grabbing deploy module."); Utility.LogError(this, "Exception: {0}", e); } } targetDockingPorts = targetDockingPorts && scanTransformIsDockingNode; UpdateRadarStatus(); }
protected override bool isModules(ModuleDeployablePart p) { return(p is ModuleDeployableAntenna); }
public ModuleDeployablePartAdapter(VesselAdapter vesselAdapter, ModuleDeployablePart moduleDeployablePart) : base(vesselAdapter, moduleDeployablePart) => this.moduleDeployablePart = moduleDeployablePart;