Esempio n. 1
0
        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);
        }
Esempio n. 4
0
        /// <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);
 }
Esempio n. 7
0
        /// <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;
            }
        }
Esempio n. 12
0
 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);
Esempio n. 15
0
        /// <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();
        }
Esempio n. 16
0
 protected override bool isModules(ModuleDeployablePart p)
 {
     return(p is ModuleDeployableAntenna);
 }
Esempio n. 17
0
 public ModuleDeployablePartAdapter(VesselAdapter vesselAdapter, ModuleDeployablePart moduleDeployablePart)
     : base(vesselAdapter, moduleDeployablePart) => this.moduleDeployablePart = moduleDeployablePart;