public void UpdateOrbiterPosition()
 {
     TM = OrbitManager.GetComponent <TimeManipulator>();
     OM = OrbitManager.GetComponent <OrbitManagement>();
     //TM.JulianDateSliderValue = (int)JulianDateSlider.value;
     TM.JulianDate = OM.RawJulianTime[(int)JulianDateSlider.value];
     TM.UpdateOrbiterPosition();
 }
Ejemplo n.º 2
0
    // currently invoked by Update() if numbers crunched
    // *** two other cases!
    // advances JulianDate by timestep (if toggled)
    public void OrbitUpdate()
    {
        if (GlobalRealTimeToggle.isOn) //using realtime
        {
            //Debug.Log("Updating Orbit with Real Time Values");
            foreach (GameObject OrbitManager in OrbitManagers)
            {
                TimeManipulator TM = OrbitManager.GetComponent <TimeManipulator>();
                TM.UseRealTime = true;
                TM.UpdateOrbiterPosition();
            }
        }
        if (!GlobalRealTimeToggle.isOn) //not using realtime
        {
            if (UseTimeStepToggle.isOn) //using Timestep
            {
                // set NewJulian date to current JulianDate + scaled timestep increment
                NewJulianDate = JulianDate + (timeSteps[(int)TimeStepSlider.value] / (1 / updateFrequency));

                // update JulianDateSlider
                // global flag fudged in so that GlobalJulianTime doesn't set NewJulianDate or play sounds
                timeStepMode = true;
                GlobalJulianDateSlider.value = IndexFromJD(AllTimes.ToArray(), NewJulianDate);
                timeStepMode = false;

                // Distribute JulianDate here
                if (JulianDate != NewJulianDate)
                {
                    //Debug.Log("Updating Orbit with Dataset Values + timestep");
                    JulianDate = NewJulianDate;
                    foreach (GameObject OrbitManager in OrbitManagers)
                    {
                        TimeManipulator TM = OrbitManager.GetComponent <TimeManipulator>();
                        TM.UseRealTime = false;
                        TM.JulianDate  = JulianDate;
                        TM.UpdateOrbiterPosition();
                    }
                }
            }
            if (!UseTimeStepToggle.isOn) //not using timestep or realtime
            // slider used instead
            {
                NewJulianDate = AllTimes[(int)GlobalJulianDateSlider.value];
                if (JulianDate != NewJulianDate)
                {
                    //Debug.Log("Updating Orbit with Dataset Values");
                    JulianDate = NewJulianDate;
                    foreach (GameObject OrbitManager in OrbitManagers)
                    {
                        TimeManipulator TM = OrbitManager.GetComponent <TimeManipulator>();
                        TM.UseRealTime = false;
                        TM.JulianDate  = JulianDate;
                        TM.UpdateOrbiterPosition();
                    }
                }
            }
        }
    }
Ejemplo n.º 3
0
 public void ForcedPositionUpdate()
 {
     foreach (GameObject OrbitManager in OrbitManagers)
     {
         // null check prevents crash when JSON browser opened
         if (OrbitManager != null)
         {
             TimeManipulator TM = OrbitManager.GetComponent <TimeManipulator>();
             TM.UpdateOrbiterPosition();
         }
     }
 }
Ejemplo n.º 4
0
 public void Realtimetoggled()
 {
     if (!GlobalRealTimeToggle.isOn)
     {
         NewJulianDate = AllTimes[(int)GlobalJulianDateSlider.value];
         JulianDate    = NewJulianDate;
         foreach (GameObject OrbitManager in OrbitManagers)
         {
             TimeManipulator TM = OrbitManager.GetComponent <TimeManipulator>();
             TM.UseRealTime = false;
             TM.JulianDate  = JulianDate;
             TM.UpdateOrbiterPosition();
         }
     }
 }
    public void Update()
    {
        if (localpath != "filepathgoeshere" && !DataLoaded && !LoadingData)
        // LoadingData is not set, because current coroutine doesn't finish at this point
        {
            LoadingData = true;
            LoadDataCanvas.SetActive(false);
            StartCoroutine("LoadData");
            Debug.Log("filepath = " + localpath);
        }

        if (CurrentScale != ScaleValue)
        {
            // does anything need to happen with attitude or models??
            // ^^ probably not, because radii update and local scales applied in Update()
            // Regenerating orbit data with new scale applied
            List <GameObject> OrbitManagers = new List <GameObject>();
            OrbitManagers.AddRange(GameObject.FindGameObjectsWithTag("OrbitalManager"));
            foreach (GameObject OrbitManager in OrbitManagers)
            {
                for (int i = 0; i < orbitalDataUnity.Orbits.Count; i++)
                {
                    if (orbitalDataUnity.Orbits[i].Name == OrbitManager.name)
                    {
                        OrbitManagement OM = OrbitManager.GetComponent <OrbitManagement>();
                        OM.RawPositions.Clear();
                        OM.RawPositions = new List <Vector3>();
                        //extract positions list from RawEphData
                        foreach (RawEphData data in orbitalDataUnity.Orbits[i].Eph)
                        {
                            //convert rawEphData position doubles into floats
                            float xpos = (float)data.xPos;
                            float ypos = (float)data.yPos;
                            float zpos = (float)data.zPos;
                            // convert floats divided by descaler value into Vector3 positions
                            Vector3 positions = new Vector3(xpos / ScaleValue, ypos / ScaleValue, zpos / ScaleValue);
                            //pass list of raw positions to orbit management script
                            OM.RawPositions.Add(positions);
                        }

                        float radii = new float();
                        if (orbitalDataUnity.Info.Units == "km")
                        {
                            radii = (float)orbitalDataUnity.Orbits[i].Radius / ScaleValue;
                            if (radii < 0.0025f)
                            {
                                OM.Radius = 0.0025f;
                            }
                            else
                            {
                                OM.Radius = radii;
                            }
                        }
                        if (orbitalDataUnity.Info.Units == "au")
                        {
                            radii = (float)orbitalDataUnity.Orbits[i].Radius;
                            if (radii < 0.0125)
                            {
                                OM.Radius = 0.0125f;
                            }
                            else
                            {
                                OM.Radius = radii;
                            }
                        }
                        //Debug.Log(radii);
                    }
                }
                //Debug.Log(OrbitManager.gameObject.name);
            }
            CurrentScale = ScaleValue;

            // update positions to reflect new scale
            // propagate flags down to OM instances to indicate scale change
            foreach (GameObject OrbitManager in OrbitManagers)
            {
                TimeManipulator TM = OrbitManager.GetComponent <TimeManipulator>();
                OrbitManagement OM = OrbitManager.GetComponent <OrbitManagement>();
                OM.scaleChanged = true;
                TM.UpdateOrbiterPosition();
            }
        }
    }