// Update is called once per frame void Update() { if (Input.GetKeyDown("l")) { training = !training; if (training) { backend.transform.Find("ColorKey").gameObject.SetActive(false); } else { backend.transform.Find("ColorKey").gameObject.SetActive(true); } } if (Input.GetKeyDown(KeyCode.Backspace)) { List <KeyValuePair <int, string> > toDelete = new List <KeyValuePair <int, string> >(); foreach (var label in managedObjects.Keys) { foreach (int id in managedObjects[label].Keys) { toDelete.Add(new KeyValuePair <int, string>(id, label)); } } foreach (var pair in toDelete) { deleteObject(pair.Key, pair.Value); } } if (VisionResponseTask.Task.IsCompleted) { Graph system = Graph.Parser.ParseFrom(VisionResponseTask.Task.Result); synchronizeGraph(system); //this is how you reset? VisionResponseTask = new TaskCompletionSource <byte[]>(); } if (SimulationResponseTask.Task.IsCompleted && !calibrating) { SystemKinetics kinetics = SystemKinetics.Parser.ParseFrom(SimulationResponseTask.Task.Result); synchronizeSimulation(kinetics); SimulationResponseTask = new TaskCompletionSource <byte[]>(); } if (ScreenshotResponseTask.Task.IsCompleted) { // resolution is message string[] words = ScreenshotResponseTask.Task.Result.Split('-'); if (camera != null) { camera.ScreenshotResolution = new int[] { int.Parse(words[0]), int.Parse(words[1]) }; camera.TakeScreenshot += sendScreenshot; } else { ScreenshotResponseTask = new TaskCompletionSource <string>(); } } }
private void synchronizeSimulation(SystemKinetics kinetics) { int rxrcount = 1;//start at 1 because "source" has special ID 0 int count; float sum; float system_time = (float)kinetics.Time / (float)3.25; //divide by 3.25 to go from FPS to accelerated seconds timeValue = GameObject.Find("Backend/ColorKey/TimeValue"); timeValue.GetComponent <Text>().text = System.String.Format("{0:0.00} s", system_time); foreach (var rxr in kinetics.Kinetics) { var currentObjs = managedObjects["reactor"]; GameObject existing; currentObjs.TryGetValue(rxr.Id, out existing); if (existing) { rend = existing.GetComponent <MeshRenderer>(); rend.material.shader = Shader.Find("Custom/WedgeCircle"); count = 0; sum = 0; foreach (var molefrac in rxr.MoleFraction) { count++; sum += molefrac; //test } if (sum > 0) { rend.material.SetInt("_NumWedges", value: count); for (int i = 0; i < count; i++) { rend.material.SetFloat("_Fraction" + (i + 1).ToString(), value: (rxr.MoleFraction[i])); } } else { rend.material.SetInt("_NumWedges", value: 5); for (int i = 0; i < count; i++) { rend.material.SetFloat("_Fraction" + (i + 1).ToString(), value: ((float)0)); } rend.material.SetFloat("_Fraction5", value: ((float)1)); } } else { Debug.Log("Got a reactor that doesn't exist! rxrcount = " + rxrcount + ", rxr ID = " + rxr.Id); } rxrcount++; } }