Exemplo n.º 1
0
    // this function appears to consolidate RawTimes together
    // sets NewJulianDate to initial date
    private void AllTimesUpdate()
    {
        RawTimes = new List <double>();

        foreach (GameObject OrbitManager in OrbitManagers)
        {
            OrbitManagement OM = OrbitManager.GetComponent <OrbitManagement>();
            RawTimes.AddRange(OM.RawJulianTime);
        }

        RawTimes.Sort((a, b) => a.CompareTo(b));

        AllTimes = new List <double>();
        double previousValue = 0;

        foreach (double time in RawTimes)
        {
            if (time != previousValue)
            {
                AllTimes.Add(time);
                previousValue = time;
            }
        }
        GlobalJulianDateSlider.minValue = 0;
        GlobalJulianDateSlider.maxValue = AllTimes.Count - 1;
        GlobalJulianDateSlider.value    = 0;
        //Debug.Log("updated Alltimes");
        NumbersCrunched = true;
        NewJulianDate   = AllTimes[0];
    }
Exemplo n.º 2
0
 public void GlobalLineWidthSet()                       //Values for each can be set independatly.
 {
     foreach (GameObject OrbitManager in OrbitManagers) //update line width on each orbit manager
     {
         OrbitManagement OM = OrbitManager.GetComponent <OrbitManagement>();
         OM.newlinewidth = GlobalLineWidthSlider.value;
     }
 }
 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();
 }
Exemplo n.º 4
0
 public void GlobalShapeToleranceSet()
 {
     foreach (GameObject OrbitManager in OrbitManagers) //update shape tolerance on each orbit manager
     {
         OrbitManagement OM = OrbitManager.GetComponent <OrbitManagement>();
         OM.newtolerance = GlobalShapeToleranceSlider.value;
     }
 }
Exemplo n.º 5
0
 public void GlobalToggleTags() //global tag toggle, off by default.
 {
     foreach (GameObject OrbitManager in OrbitManagers)
     {
         OrbitManagement OM = OrbitManager.GetComponent <OrbitManagement>();
         OM.Orbiter.GetComponent <SatelliteInteract>().CancelInvoke("DelayedExit");
         OM.UITag = GlobalTagToggle.isOn;
     }
 }
Exemplo n.º 6
0
 public void UseRotation()
 {
     foreach (GameObject OrbitManager in OrbitManagers)
     {
         OrbitManagement OM = OrbitManager.GetComponent <OrbitManagement>();
         OM.UseRotation = UseRotationToggle.isOn;
         OM.ObjectGenerator();
     }
 }
Exemplo n.º 7
0
    void Update()
    {
        //UserOffset = HeightSlider.value;
        //string valuetext = HeightSlider.value.ToString();
        //HeightSliderValueText.text = valuetext + "m";
        CurrentScale = JDI.CurrentScale;
        // REMOVE THIS
        PreviousScale = CurrentScale;

        // this always returns false?
        if (PreviousScale != CurrentScale)
        {
            PreviousScale = CurrentScale;
            Debug.Log("Updating height");
            OrbitManagers = GameObject.FindGameObjectsWithTag("OrbitalManager");

            Height = Vector3.Distance(this.gameObject.transform.localPosition, Pedestal.transform.localPosition);

            //get current furthest orbital point Y value. biggestValue
            RawData = new List <Vector3>();
            foreach (GameObject OrbitManager in OrbitManagers)
            {
                OrbitManagement OM = OrbitManager.GetComponent <OrbitManagement>();
                RawData.AddRange(OM.RawPositions);
            }

            OrbitalYValues = new List <float>();
            for (int i = 0; i < RawData.Count; i++)
            {
                OrbitalYValues.Add(RawData[i].y);
            }

            MaxDist = Mathf.Max(OrbitalYValues.ToArray());
            if (MaxDist > 2.5f)
            {
                MaxDist = 2.5f;
            }
        }

        // if Menus open AND if Menus have NOT been taken with user
        // consider replacing with AND
        // insert conditions, including whether or not menus have been taken
        if ((MainSatelliteCanvas.activeSelf || MainMenuCanvas.activeSelf || LoadDataCanvas.activeSelf) && !MMUIM.takeMenuWithMe)
        {
            Offset = ActiveUIheight;
        }
        else
        {
            Offset = inactiveUIheight;
        }

        //if transform.y local pos (Height) != MaxDist + 0.5, set it to it.
        if (Height != MaxDist + Offset + UserOffset)
        {
            transform.localPosition = new Vector3(transform.localPosition.x, MaxDist + Offset + UserOffset, transform.localPosition.z);
        }
    }
 void Start()
 {
     OM     = GetComponent <OrbitManagement>();
     year   = DateTime.Now.Year;
     month  = DateTime.Now.Month;
     day    = DateTime.Now.Day;
     hour   = DateTime.Now.Hour;
     minute = DateTime.Now.Minute;
     second = DateTime.Now.Second;
 }
Exemplo n.º 9
0
 //Global Line toggle - defaulted to off, as should be set by Json file
 //Values for each Orbit Manager able to be changed independantly.
 public void GlobalToggleLineDraw()
 {
     foreach (GameObject OrbitManager in OrbitManagers)
     {
         //when toggled on, if OrbitManagers > 10 - should maybe reduce Line tolerance to preserve framerate.
         OrbitManagement OM = OrbitManager.GetComponent <OrbitManagement>();
         OM.Orbiter.GetComponent <SatelliteInteract>().CancelInvoke("DelayedExit");
         OM.Line = GlobalLineToggle.isOn;
         OM.ObjectGenerator();
     }
 }
Exemplo n.º 10
0
    private void Start()
    {
        LabelText.text = OrbitManager.gameObject.name;
        OM             = OrbitManager.GetComponent <OrbitManagement>();
        TM             = OrbitManager.GetComponent <TimeManipulator>();
        JsonManager    = GameObject.FindGameObjectWithTag("JsonManager");
        HeightAdjust HA = JsonManager.GetComponent <HeightAdjust>();

        Pedestal            = HA.Pedestal;
        MainSatelliteCanvas = HA.MainSatelliteCanvas;
        MainMenuCanvas      = HA.MainMenuCanvas;
        AudioManager        = GameObject.FindGameObjectWithTag("AudioManager");
        AM = AudioManager.GetComponent <MyAudioManager>();
    }
 public void OnToggle()
 {
     if (LineToggle.GetComponent <Toggle>().isOn)
     {
         OM      = OrbitManager.GetComponent <OrbitManagement>();
         OM.Line = true;
         OM.ObjectGenerator();
     }
     if (!LineToggle.GetComponent <Toggle>().isOn)
     {
         OM      = OrbitManager.GetComponent <OrbitManagement>();
         OM.Line = false;
         OM.ObjectGenerator();
     }
 }
    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();
            }
        }
    }
    public void GenerateSatellites()
    {
        //setup Scale values
        if (orbitalDataUnity.Info.Units == "km")
        {
            Debug.Log("Units = Kilometres");
            ScaleStartValue = KMStartValue;
            ScaleMinValue   = KMMinValue;
            ScaleMaxValue   = KMMaxValue;
        }
        if (orbitalDataUnity.Info.Units == "au")
        {
            Debug.Log("Units = Astronomical Units");
            ScaleStartValue = AUStartValue;
            ScaleMinValue   = AUMinValue;
            ScaleMaxValue   = AUMaxValue;
        }

        MainMenuScaleSlider.minValue = ScaleMinValue;
        MainMenuScaleSlider.maxValue = ScaleMaxValue;
        MainMenuScaleSlider.value    = ScaleStartValue;
        ScaleValue = ScaleStartValue;

        //setup orbits
        for (int i = 0; i < orbitalDataUnity.Orbits.Count; i++)
        {
            // Debug.Log("creating Orbit");
            //instantiate orbit manager prefab as child (which includes all the necessary game objects)
            GameObject orbitchild = Instantiate(OrbitManager, transform.position, Quaternion.identity) as GameObject;
            orbitchild.transform.parent = this.gameObject.transform;

            //Set Orbitmanager Game object name to Orbit name
            orbitchild.name = orbitalDataUnity.Orbits[i].Name;
            //cache OrbitManagement script from orbitchild gameobject
            OrbitManagement OM = orbitchild.GetComponent <OrbitManagement>();

            #region Displaytype
            //Draw Line and Satellite, or just satelitte.
            QuickType.Display displaytype = orbitalDataUnity.Orbits[i].Display;
            if (displaytype == QuickType.Display.LinePoint) //linepoint
            {
                OM.Line = true;
            }
            if (displaytype == QuickType.Display.Point)
            {
                OM.Line = false;
            }
            #endregion

            #region Radii
            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;
                }
            }

            #endregion

            #region Models and Textures
            isCb = false;
            // if name matches premade material, then use matching material as Orbiter
            switch (orbitalDataUnity.Orbits[i].Name)
            {
            case "Sun":
                OM.inheritedMaterial = Resources.Load <Material>("Materials/CelestialBodies/Sun");
                OM.drawScModel       = false; isCb = true;
                break;

            case "Mercury":
                OM.inheritedMaterial = Resources.Load <Material>("Materials/CelestialBodies/Mercury");
                OM.drawScModel       = false; isCb = true;
                break;

            case "Venus":
                OM.inheritedMaterial = Resources.Load <Material>("Materials/CelestialBodies/Venus");
                OM.drawScModel       = false; isCb = true;
                break;

            case "Earth":
                OM.inheritedMaterial = Resources.Load <Material>("Materials/CelestialBodies/Earth");
                OM.drawScModel       = false; isCb = true;
                break;

            case "Luna":
                OM.inheritedMaterial = Resources.Load <Material>("Materials/CelestialBodies/Luna");
                OM.drawScModel       = false; isCb = true;
                break;

            case "Mars":
                OM.inheritedMaterial = Resources.Load <Material>("Materials/CelestialBodies/Mars");
                OM.drawScModel       = false; isCb = true;
                break;

            case "Jupiter":
                OM.inheritedMaterial = Resources.Load <Material>("Materials/CelestialBodies/Jupiter");
                OM.drawScModel       = false; isCb = true;
                break;

            case "Saturn":
                OM.inheritedMaterial = Resources.Load <Material>("Materials/CelestialBodies/Saturn");
                OM.drawScModel       = false; isCb = true;
                break;

            case "Uranus":
                OM.inheritedMaterial = Resources.Load <Material>("Materials/CelestialBodies/Uranus");
                OM.drawScModel       = false; isCb = true;
                break;

            case "Neptune":
                OM.inheritedMaterial = Resources.Load <Material>("Materials/CelestialBodies/Neptune");
                OM.drawScModel       = false; isCb = true;
                break;

            case "Sat":
            case "DefaultSC":
                // GMAT default names, insert more here if necessary
                OM.inheritedMaterial = Resources.Load <Material>("Materials/Spacecraft/SatelliteMaterial");
                OM.drawScModel       = true;
                break;

            default:
                // if ((OM.Radius < 300f) || (flagAsScFromRadius == true))
                if (((float)orbitalDataUnity.Orbits[i].Radius < 300f) || (flagAsScFromRadius == true))
                // optional radius check
                // *** mind the data type
                {
                    OM.inheritedMaterial = Resources.Load <Material>("Materials/Spacecraft/SatelliteMaterial");
                    OM.drawScModel       = true;
                    break;
                }
                // must clear prior settings, otherwise they will propagate across
                // to the next orbit object this function manages
                OM.inheritedMaterial = null;
                OM.drawScModel       = false;
                break;
            }

            // user set spacecraft names matched up here
            if (scStrToHash.ContainsKey(orbitalDataUnity.Orbits[i].Name))
            {
                switch (scStrToHash[orbitalDataUnity.Orbits[i].Name])
                {
                case scHashes.SC1:
                    OM.inheritedMaterial = Resources.Load <Material>("Materials/Spacecraft/SatelliteMaterial");
                    OM.drawScModel       = true;
                    break;

                case scHashes.SC2:
                    OM.inheritedMaterial = Resources.Load <Material>("Materials/Spacecraft/SatelliteMaterial");
                    OM.drawScModel       = true;
                    break;

                case scHashes.SC3:
                    OM.inheritedMaterial = Resources.Load <Material>("Materials/Spacecraft/SatelliteMaterial");
                    OM.drawScModel       = true;
                    break;

                case scHashes.SC4:
                    OM.inheritedMaterial = Resources.Load <Material>("Materials/Spacecraft/SatelliteMaterial");
                    OM.drawScModel       = true;
                    break;

                default:
                    OM.inheritedMaterial = null;
                    OM.drawScModel       = false;
                    break;
                }
            }

            #endregion

            #region Eph
            //Generate new rawpositions list for each instantiated orbitmanager
            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);
            }
            #endregion

            #region Att
            // Generate new rawattitude list for each instantiated orbitmanager
            OM.RawRotationStates = new List <Quaternion>();

            // Extract from RawAttData
            if (orbitalDataUnity.Orbits[i].Att != null)
            // if there is data in Att
            {
                foreach (RawAttData data in orbitalDataUnity.Orbits[i].Att)
                {
                    Quaternion rotation;

                    //// convert RawAttData rotation doubles into floats
                    //// no mapping
                    //float X = (float)data.X;
                    //float Y = (float)data.Y;
                    //float Z = (float)data.Z;
                    //float W = (float)data.W;

                    // method for converting quaternions from right to left handed system
                    // https://gamedev.stackexchange.com/questions/157946/converting-a-quaternion-in-a-right-to-left-handed-coordinate-system
                    //float X = (float)data.Y;    // -(  right = -left  )
                    //float Y = -(float)data.Z;   // -(     up =  up     )
                    //float Z = -(float)data.X;   // -(forward =  forward)
                    //float W;


                    // method by inspection. Refer to report
                    float X = (float)data.X;
                    float Y = (float)data.Z;
                    float Z = (float)data.Y;
                    float W;

                    if (isCb)
                    {
                        W = -(float)data.W;
                    } // (axis fine, flip rotation dir)
                    else
                    {
                        W = (float)data.W;
                    } // (axis fine, keep rotation dir)



                    // implement scaling here, if needed
                    rotation = new Quaternion(X, Y, Z, W);

                    //pass list of raw positions to orbit management script
                    OM.RawRotationStates.Add(rotation);
                }
                isCb           = false;
                OM.hasAttitude = true;
            }
            else
            {
                OM.hasAttitude = false;
            }
            #endregion

            #region Time
            OM.RawJulianTime = new List <double>();
            OM.RawJulianTime.AddRange(orbitalDataUnity.Orbits[i].Time);

            // match length against stored previous array?
            #endregion

            #region Colour
            // use this method if JSON colour field in HEX, eg #0066DD00
            #region old method

            /*
             * Color white = new Color(1, 1, 1, 1);
             * Color black = new Color(0, 0, 0, 0);
             *
             * if (orbitalDataUnity.Orbits[i].Color != null)
             * {
             *  Color colour = new Color();
             *  ColorUtility.TryParseHtmlString(orbitalDataUnity.Orbits[i].Color, out colour);
             *  if (colour == white)
             *  {
             *      OM.LineColour = black;
             *  }
             *  else
             *  {
             *      OM.LineColour = colour;
             *  }
             * }
             * else // if null colour/none in JSON
             * {
             *  OM.LineColour = black;
             *  //Debug.Log("setting colour to black");
             * }
             */
            #endregion

            // use this method if JSON colour field in RGB triplets, eg RRR,GGG,BBB
            #region new method
            if (orbitalDataUnity.Orbits[i].Color != null)
            {
                Color    colour       = new Color(); // black as default
                string[] splitTriplet = orbitalDataUnity.Orbits[i].Color.Split(',');

                // ensure R,G,B components between 0 and 255
                bool colourValid = true;
                for (int j = 0; j < splitTriplet.Length; j++)
                {
                    if ((int.Parse(splitTriplet[j])) > 255 ||
                        (int.Parse(splitTriplet[j])) < 0)
                    {
                        colourValid = false;
                    }
                }
                if (colourValid)
                {
                    // alternatively, use pointers and strsep
                    // scaling from 0-255 to 0-1
                    colour.r = (float.Parse(splitTriplet[0])) / 255;
                    colour.g = (float.Parse(splitTriplet[1])) / 255;
                    colour.b = (float.Parse(splitTriplet[2])) / 255;
                    colour.a = 1f;

                    OM.LineColour = colour;
                }
                else
                {
                    // OM.LineColour stays black
                    Debug.LogWarning("RGB triplet component out of range. " +
                                     "Blacl colour carried forward");
                }
            }
            #endregion
            #endregion

            #region Array Length Check
            // this check will have to be skirted if data is thinned out or otherwise changed
            // by DataManager::WriteToJson in plugin
            // consider checking contents of Eph or Att, or setting flags in JSON
            if (!ArrayMismatchCheck(orbitalDataUnity.Orbits[i].Eph,
                                    orbitalDataUnity.Orbits[i].Att,
                                    orbitalDataUnity.Orbits[i].Time, OM.hasAttitude))
            {
                Debug.LogError("Ephemeris, Attitude or Time array size mismatch");
            }
            #endregion


            //create new list of orbital objects for each instance of OrbitManagement
            OM.orbitalobjects = new List <GameObject>();
        }

        Debug.Log("Satellites Generated");
        MainMenuUIManager MM;
        MM = Pedestal.GetComponent <MainMenuUIManager>();
        MM.OrbitsCreated        = true;
        MM.CoordinatesText.text = "Coordinates: " + orbitalDataUnity.Info.Coordinates;
        MM.UnitsText.text       = "Units: " + orbitalDataUnity.Info.Units;
        MM.NewScaleValue        = ScaleValue;
    }
 public void ChangeLineWidth()
 {
     OM = OrbitManager.GetComponent <OrbitManagement>();
     OM.newlinewidth = LineWidthSlider.value;
 }
 public void ChangeShape()
 {
     OM = OrbitManager.GetComponent <OrbitManagement>();
     OM.newtolerance = LineShapeSlider.value;
 }
 private void Start()
 {
     OM             = OrbitManager.GetComponent <OrbitManagement>();
     GOAudioManager = GameObject.FindGameObjectWithTag("AudioManager");
     AM             = GOAudioManager.GetComponent <MyAudioManager>();
 }
 public void ToggleTag()
 {
     OM       = OrbitManager.GetComponent <OrbitManagement>();
     OM.UITag = TagToggle.isOn;
 }