// 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]; }
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(); }
public void GlobalShapeToleranceSet() { foreach (GameObject OrbitManager in OrbitManagers) //update shape tolerance on each orbit manager { OrbitManagement OM = OrbitManager.GetComponent <OrbitManagement>(); OM.newtolerance = GlobalShapeToleranceSlider.value; } }
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; } }
public void UseRotation() { foreach (GameObject OrbitManager in OrbitManagers) { OrbitManagement OM = OrbitManager.GetComponent <OrbitManagement>(); OM.UseRotation = UseRotationToggle.isOn; OM.ObjectGenerator(); } }
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; }
//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(); } }
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; }