Ejemplo n.º 1
0
        private void Update()
        {
            if (HighLogic.LoadedSceneIsFlight)
            {
                EventsCheck();
                string s = "Deactivated";
                if (fullyDeployed && resourceOn)
                {
                    s = "Searching...";
                    Vessel           target    = FlightGlobals.fetch.VesselTarget as Vessel;
                    FlightCoMTracker targetObj = FlightGlobals.fetch.VesselTarget as FlightCoMTracker;

                    if (target != null)
                    {
                        targetModule = target.FindPartModulesImplementing <DMAsteroidScanner>().FirstOrDefault();
                    }
                    else if (targetObj != null)
                    {
                        var targets = targetObj.GetOrbitDriver().vessel.FindPartModulesImplementing <DMAsteroidScanner>();
                        if (targets.Count > 0)
                        {
                            if (targets.Count > 1)
                            {
                                foreach (DMAsteroidScanner t in targets)
                                {
                                    if (t == this)
                                    {
                                        continue;
                                    }

                                    float d = (t.part.transform.position - dishBase.position).sqrMagnitude;
                                    if (d > 4f)
                                    {
                                        targetModule = t;
                                        break;
                                    }
                                    else
                                    {
                                        targetModule    = null;
                                        targetDistance  = 0f;
                                        receiverInRange = asteroidInSight = false;
                                    }
                                }
                            }
                            else if (targets[0] != this)
                            {
                                targetModule = targets[0];
                            }
                        }
                        else
                        {
                            targetModule    = null;
                            targetDistance  = 0f;
                            receiverInRange = asteroidInSight = false;
                        }
                    }
                    else
                    {
                        var targets = vessel.FindPartModulesImplementing <DMAsteroidScanner>();
                        if (targets.Count > 1)
                        {
                            foreach (DMAsteroidScanner t in targets)
                            {
                                if (t == this)
                                {
                                    continue;
                                }

                                float d = (t.part.transform.position - dishBase.position).sqrMagnitude;
                                if (d > 4f)
                                {
                                    targetModule = t;
                                    break;
                                }
                                else
                                {
                                    targetDistance  = 0f;
                                    targetModule    = null;
                                    receiverInRange = asteroidInSight = false;
                                }
                            }
                        }
                        else
                        {
                            targetDistance  = 0f;
                            targetModule    = null;
                            receiverInRange = asteroidInSight = false;
                        }
                    }

                    if (targetModule != null)
                    {
                        s = "Receiver Located";
                        targetDistance = (targetModule.part.transform.position - dishBase.position).sqrMagnitude;
                        if (targetDistance < (2000 * 2000) && targetDistance > 4)
                        {
                            s = "Receiver In Range";
                            receiverInRange = true;
                            if (simpleRayHit())
                            {
                                s = "Experiment Ready";
                                asteroidInSight = true;
                            }
                            else
                            {
                                asteroidInSight = false;
                            }
                        }
                        else
                        {
                            receiverInRange = asteroidInSight = false;
                            targetDistance  = 0f;
                        }
                    }
                    else
                    {
                        receiverInRange = asteroidInSight = false;
                        targetDistance  = 0f;
                    }

                    if (receiverInRange && targetModule != null)
                    {
                        lookAtTarget();
                    }
                    else
                    {
                        searchForTarget();
                    }
                    rotating = true;
                }
                else if (fullyDeployed && !resourceOn && resourceCost > 0f)
                {
                    s = "No Power";
                    targetDistance  = 0f;
                    targetModule    = null;
                    receiverInRange = asteroidInSight = false;
                }
                else if (rotating)
                {
                    spinDownDish();
                    targetDistance  = 0f;
                    targetModule    = null;
                    receiverInRange = asteroidInSight = false;
                }
                else
                {
                    targetDistance  = 0f;
                    targetModule    = null;
                    receiverInRange = asteroidInSight = false;
                }

                lightSwitch(receiverInRange && asteroidInSight, !IsDeployed);

                status = s;
            }
        }
        private void Update()
        {
            if (HighLogic.LoadedSceneIsFlight)
            {
                EventsCheck();
                string s = "Deactivated";
                if (fullyDeployed && resourceOn)
                {
                    s = "Searching...";
                    Vessel target = FlightGlobals.fetch.VesselTarget as Vessel;
                    FlightCoMTracker targetObj = FlightGlobals.fetch.VesselTarget as FlightCoMTracker;

                    if (target != null)
                    {
                        targetModule = target.FindPartModulesImplementing<DMAsteroidScanner>().FirstOrDefault();
                    }
                    else if (targetObj != null)
                    {
                        var targets = targetObj.GetOrbitDriver().vessel.FindPartModulesImplementing<DMAsteroidScanner>();
                        if (targets.Count > 0)
                        {
                            if (targets.Count > 1)
                            {
                                foreach (DMAsteroidScanner t in targets)
                                {
                                    if (t == this)
                                        continue;

                                    float d = (t.part.transform.position - dishBase.position).magnitude;
                                    if (d > 2f)
                                    {
                                        targetModule = t;
                                        break;
                                    }
                                    else
                                    {
                                        targetModule = null;
                                        targetDistance = 0f;
                                        receiverInRange = asteroidInSight = false;
                                    }
                                }
                            }
                            else if (targets[0] != this)
                                targetModule = targets[0];
                        }
                        else
                        {
                            targetModule = null;
                            targetDistance = 0f;
                            receiverInRange = asteroidInSight = false;
                        }
                    }
                    else
                    {
                        var targets = vessel.FindPartModulesImplementing<DMAsteroidScanner>();
                        if (targets.Count > 1)
                        {
                            foreach (DMAsteroidScanner t in targets)
                            {
                                if (t == this)
                                    continue;

                                float d = (t.part.transform.position - dishBase.position).magnitude;
                                if (d > 2f)
                                {
                                    targetModule = t;
                                    break;
                                }
                                else
                                {
                                    targetDistance = 0f;
                                    targetModule = null;
                                    receiverInRange = asteroidInSight = false;
                                }
                            }
                        }
                        else
                        {
                            targetDistance = 0f;
                            targetModule = null;
                            receiverInRange = asteroidInSight = false;
                        }
                    }

                    if (targetModule != null)
                    {
                        s = "Receiver Located";
                        targetDistance = (targetModule.part.transform.position - dishBase.position).magnitude;
                        if (targetDistance < 2000 && targetDistance > 2)
                        {
                            s = "Receiver In Range";
                            receiverInRange = true;
                            if (simpleRayHit())
                            {
                                s = "Experiment Ready";
                                asteroidInSight = true;
                            }
                            else
                                asteroidInSight = false;
                        }
                        else
                        {
                            receiverInRange = asteroidInSight = false;
                            targetDistance = 0f;
                        }
                    }
                    else
                    {
                        receiverInRange = asteroidInSight = false;
                        targetDistance = 0f;
                    }

                    if (receiverInRange && targetModule != null)
                        lookAtTarget();
                    else
                        searchForTarget();
                    rotating = true;
                }
                else if (fullyDeployed && !resourceOn && resourceCost > 0f)
                {
                    s = "No Power";
                    targetDistance = 0f;
                    targetModule = null;
                    receiverInRange = asteroidInSight = false;
                }
                else if (rotating)
                {
                    spinDownDish();
                    targetDistance = 0f;
                    targetModule = null;
                    receiverInRange = asteroidInSight = false;
                }
                else
                {
                    targetDistance = 0f;
                    targetModule = null;
                    receiverInRange = asteroidInSight = false;
                }

                lightSwitch(receiverInRange && asteroidInSight, !IsDeployed);

                status = s;
            }
        }