Пример #1
0
        // 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>();
                }
            }
        }
Пример #2
0
        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++;
            }
        }