//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; } } } }