Example #1
0
        public override void OnUpdate()
        {
            base.OnUpdate();

            timer       += (float)(Planetarium.GetUniversalTime() - storedTime);
            isFunctional = checkSetup();

            UpdateVarsEntries();

            ////If the aperture has opened/closed, recalculate stuff
            //if (opticsModule != null)
            //{
            //    if (opticsModule.isFunctional != storedOpticsState)
            //    {
            //        checkSetup();
            //    }
            //}

            if (isFunctional && isActive)
            {
                if (opticsModule != null)
                {
                    if (opticsModule.isSmallOptics)
                    {
                        discoveryRate = 0.5f * maxDiscoveryRate;
                    }
                    else
                    {
                        discoveryRate = maxDiscoveryRate;
                    }
                }
            }
            else
            {
                discoveryRate = 0f;
            }

            if (isFunctional && isActive && storedData.Count() == 0)
            {
                //Events["observation"].active = true;
                Events["eventReviewScience"].active = false;
                Events["eventDumpData"].active      = false;
            }
            else
            {
                //Events["observation"].active = false;
                Events["eventReviewScience"].active = true;
                Events["eventDumpData"].active      = true;
            }

            //If the sun is visible and the telescope is pointed at it, bad things should happen!
            if (opticsModule != null && opticsModule.isFunctional)
            {
                if (CactEyeVars.CheckOccult(FlightGlobals.Bodies[0]) == "")
                {
                    Vector3d heading = (FlightGlobals.Bodies[0].position - FlightGlobals.ship_position).normalized;
                    if (Vector3d.Dot(opticsModule.part.transform.up, heading) > 0.90)
                    {
                        CactEyeGUI.DisplayText("WARNING: Telescope pointing dangerously close to the sun!");
                    }
                    if (Vector3d.Dot(opticsModule.part.transform.up, heading) > 0.95)
                    {
                        ScreenMessages.PostScreenMessage("Telescope pointed directly at sun, optics damaged and processor fried!", 6, ScreenMessageStyle.UPPER_CENTER);
                        opticsModule.BreakScope();
                        CactEyeGUI.pMList.Remove(this);
                        part.explode(); //officially the best function ever
                    }
                }
            }

            if (!fullRecovery)
            {
                if ((vessel.situation == Vessel.Situations.LANDED || vessel.situation == Vessel.Situations.SPLASHED) && storedData.Count > 0)
                {
                    ScreenMessages.PostScreenMessage("Only data from high tech processors taken with full optics is recoverable!", 6, ScreenMessageStyle.UPPER_CENTER);
                    ScreenMessages.PostScreenMessage("Telescope data lost!", 6, ScreenMessageStyle.UPPER_CENTER);
                    eventDumpData();
                }
            }

            storedTime = Planetarium.GetUniversalTime();
        }