예제 #1
0
        //Process incoming signal
        private void ProcessSignal(Signal.Config signal, Vector3 pos)
        {
            if (!recording || pause || !signal.Record)
            {
                return;
            }

            if (DontRecordInBuild)
            {
                return;
            }

            if (signal.LookUpObject == null)
            {
                Debug.LogError(string.Format("Look up object of the signal {0} not found!", signal.Name));
                return;
            }

            if (runtimeSignals.ContainsKey(signal.LookUpObject.name))
            {
                Signal.Runtime targetSignal = runtimeSignals[signal.LookUpObject.name].FirstOrDefault(x => x.name == signal.Name);
                if (targetSignal == null)
                {
                    targetSignal = new Signal.Runtime(signal.Name, signal.LookUpObject.name, signal.CountThreshold, signal.GizmoColor, signal.GizmoSize, signal.GizmoType);
                    runtimeSignals[signal.LookUpObject.name].Add(targetSignal);
                }

                float       minDist    = 10000;
                Signal.Data targetData = null;
                foreach (Signal.Data data in targetSignal.Data)
                {
                    float dist = Vector3.Distance(pos, data.pos);
                    if (dist < minDist)
                    {
                        minDist    = dist;
                        targetData = data;
                    }
                }

                if (minDist <= signal.DistanceThreshold)
                {
                    targetData.count++;
                }
                else
                {
                    targetSignal.Add(new Signal.Data(pos, 1, Time.timeSinceLevelLoad));
                }
            }
            else
            {
                runtimeSignals.Add(signal.LookUpObject.name, new List <Signal.Runtime>()
                {
                    { new Signal.Runtime(signal.Name, signal.LookUpObject.name, signal.CountThreshold, signal.GizmoColor, signal.GizmoSize, signal.GizmoType) }
                });
            }
        }
        //Read signals file
        private void ReadSignals()
        {
            editorSignals = new Dictionary <string, List <Signal.Runtime> >();

            if (signalsFile == null || string.IsNullOrEmpty(signalsFile.text))
            {
                return;
            }

            string[] lines = signalsFile.text.Split('\n');

            if (lines.Length < 2)
            {
                return;
            }

            Signal.Runtime currentSignal = null;
            bool           commentary    = false;

            comment = "";
            foreach (string line in lines)
            {
                ReadComment(line, ref commentary, ref comment);

                if (currentSignal == null)
                {
                    if (line.Contains("SIGNAL"))
                    {
                        string[] signalInfo  = Regex.Match(line, nameRegex).ToString().Trim('"').Split(':');
                        string[] displayInfo = Regex.Match(line, parenthesesRegex).ToString().Trim('(', ')').Split(',');
                        ColorUtility.TryParseHtmlString(displayInfo[0], out Color color);
                        currentSignal = new Signal.Runtime(signalInfo[1], signalInfo[0], 0, color, Utils.ReadFloat(displayInfo[1]), (GizmoTypes)int.Parse(displayInfo[2]));
                    }
                }
                else
                {
                    string[] sides = line.Split(':');

                    if (sides.Length > 0 && line.Length > 3)
                    {
                        string[] posString  = sides[0].Split(',');
                        Vector3  pos        = new Vector3(Utils.ReadFloat(posString[0]), Utils.ReadFloat(posString[1]), Utils.ReadFloat(posString[2]));
                        string[] dataString = sides[1].Split(',');
                        float    time       = Utils.ReadFloat(dataString[0]);
                        int      count      = int.Parse(dataString[1]);

                        if (editorSignals.ContainsKey(currentSignal.objectName))
                        {
                            Signal.Runtime signal = editorSignals[currentSignal.objectName].FirstOrDefault(x => x.name == currentSignal.name);
                            if (signal == null)
                            {
                                signal = currentSignal;
                                editorSignals[currentSignal.objectName].Add(currentSignal);
                            }
                            signal.Add(new Signal.Data(pos, count, time));
                        }
                        else
                        {
                            currentSignal.Add(new Signal.Data(pos, count, time));
                            editorSignals.Add(currentSignal.objectName, new List <Signal.Runtime>()
                            {
                                { currentSignal }
                            });
                        }
                    }
                    else
                    {
                        currentSignal = null;
                    }
                }
            }
        }