using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using sam; public class PointVariableSubsession : MonoBehaviour, IProductDataConsumer { public Text prodNameText; public Text minValText; public Text maxValText; public Text varNameText; public Text scaleText; public Text curValText; public Text latText; public Text lonText; public Text dateText; public string dateFormat; public Color dataPointColor; [HideInInspector] public int initiallySelectedVariableIndex = 0; [HideInInspector] public ProductData data; [HideInInspector] public ProductProfile profile; [HideInInspector] public int variableIndex; [HideInInspector] public ProductVariable prodvar; [HideInInspector] public float scaleFactor = 100; public float scaleExponent = 2.0f; public float maxScaleFactor = 1000.0f; [HideInInspector] public DateTime curTime; public ProductDataPoint selectedDP = null; public ProductData GetSelectedProduct() { return data; } public void SetInitiallySelectedVariableIndex(int i) { initiallySelectedVariableIndex = i; } public void SelectProduct(ProductData pd) { data = pd; profile = data.profile; variableIndex = -1; prodvar = null; prodNameText.text = data.referenceProductName; BroadcastMessage("OnProductSelected", data, SendMessageOptions.DontRequireReceiver); string minString = pd.profile.variables[0].name; int minIndex = 0; for (int i = 1; i < pd.variables.Count; i++) { if (pd.profile.variables[i].name.CompareTo(minString) < 0) { minString = pd.profile.variables[i].name; minIndex = i; } } SelectVariable(/*minIndex*/initiallySelectedVariableIndex); } public void SelectVariable(int varInd) { if (varInd == variableIndex) return; variableIndex = varInd; prodvar = profile.variables[variableIndex]; varNameText.text = prodvar.name; minValText.text = prodvar.ScaledMinValWithUnit(); maxValText.text = prodvar.ScaledMaxValWithUnit(); BroadcastMessage("OnVariableSelected", variableIndex, SendMessageOptions.DontRequireReceiver); } public void SetScaleFactor(float s) { scaleFactor = s; scaleText.text = s.ToString() + "x"; BroadcastMessage("OnScaleFactorChanged", scaleFactor, SendMessageOptions.DontRequireReceiver); } public void OnScaleSliderAction(float f) { SetScaleFactor(maxScaleFactor * Mathf.Pow(f, scaleExponent)); } public void SelectTimeStamp(DateTime t) { curTime = t; dateText.text = curTime.ToString(dateFormat); int i = SearchDataPoint(t); if (i < 0) { selectedDP = null; curValText.text = latText.text = lonText.text = ""; } else { selectedDP = data.dataPoints[i]; if (selectedDP.varValid[variableIndex]) curValText.text = selectedDP.variables[variableIndex].ToString() + " " + prodvar.unit; else curValText.text = ""; latText.text = "Lat: " + Utils.FormatLatitude(selectedDP.latitude); lonText.text = "Lon: " + Utils.FormatLongitude(selectedDP.longitude); } BroadcastMessage("OnTimeStampChanged", curTime, SendMessageOptions.DontRequireReceiver); } int SearchDataPoint(DateTime t) { ProductDataPoint dp = new ProductDataPoint {time = t}; return data.dataPoints.BinarySearch(dp, new CompareDataPoints()); } public class CompareDataPoints : IComparer { public int Compare(ProductDataPoint dp1, ProductDataPoint dp2) { return DateTime.Compare(dp1.time, dp2.time); } } public virtual Color GetDataPointColor(ProductDataPoint dp) { return dataPointColor; } }