private void Setup() { using (StreamReader inputReader = new StreamReader("Assets/Resources/input.txt")) { string line = inputReader.ReadLine(); string[] lineSplit = line.Split(','); recieverComp1.SetPosition(new Vector3(float.Parse(lineSplit[0], CultureInfo.InvariantCulture.NumberFormat), 0, float.Parse(lineSplit[1], CultureInfo.InvariantCulture.NumberFormat))); recieverComp2.SetPosition(new Vector3(float.Parse(lineSplit[2], CultureInfo.InvariantCulture.NumberFormat), 0, float.Parse(lineSplit[3], CultureInfo.InvariantCulture.NumberFormat))); recieverComp3.SetPosition(new Vector3(float.Parse(lineSplit[4], CultureInfo.InvariantCulture.NumberFormat), 0, float.Parse(lineSplit[5], CultureInfo.InvariantCulture.NumberFormat))); while ((line = inputReader.ReadLine()) != null) { lineSplit = line.Split(','); recieverComp1.AddTime(float.Parse(lineSplit[0], CultureInfo.InvariantCulture.NumberFormat)); recieverComp2.AddTime(float.Parse(lineSplit[1], CultureInfo.InvariantCulture.NumberFormat)); recieverComp3.AddTime(float.Parse(lineSplit[2], CultureInfo.InvariantCulture.NumberFormat)); } for (int i = 0; i < recieverComp1.GetTimesList().Count; i++) { sourceComp.AddPosition(FindSourcePosition(recieverComp1.GetPosX(), recieverComp1.GetPosY(), recieverComp1.GetDistanceToSource(i), recieverComp2.GetPosX(), recieverComp2.GetPosY(), recieverComp2.GetDistanceToSource(i), recieverComp3.GetPosX(), recieverComp3.GetPosY(), recieverComp3.GetDistanceToSource(i))); } inputReader.Close(); } }
/// <summary> /// The Text Change event Observer /// </summary> /// <param name="source"></param> /// <param name="args"></param> private void TextChangeObserver(object source, EventArgs args) { SourceText.TextChangeInfo info = (SourceText.TextChangeInfo)args; switch (info.Kind) { case SourceText.TextChanges.TextReplaced: //Insertion { int from = info.From; int length = info.Size; int index = GetLineIndex(from); SourceLine removeLine = this[index]; int removeFrom = removeLine != null ? removeLine.From : 0; int removeTo = removeLine != null ? removeLine.To : 0; int lastPos = removeFrom; try { List <SourceLine> added = new List <SourceLine>(); IEnumerable <char> s = info.Data == null?this.Source.GetTextAt(from, from + info.Size) : info.Data; bool hasLineFeed = false; int i = -1; foreach (char c in s) { //Check line feed to detect splitted lines i++; if (c == '\n') { int lineFeedPos = from + i + 1; added.Add(new SourceLine(Source.AddPosition(new Position(lastPos, 0)), Source.AddPosition(new Position(lineFeedPos)))); lastPos = lineFeedPos; hasLineFeed = true; } } if (hasLineFeed) { int nremoved = removeLine != null ? 1 : 0; if ((from + length == removeTo) && (lastPos != removeTo) && ((index + 1) < LineCount)) { SourceLine l = this[index + 1]; removeTo = l.To; nremoved++; } if (lastPos < removeTo) { added.Add(new SourceLine(Source.AddPosition(new Position(lastPos, 0)), Source.AddPosition(new Position(removeTo, 0)))); } SourceLine[] added_lines = added.ToArray(); Replace(index, nremoved, added_lines); } } catch (Exception e) { throw e; } } break; case SourceText.TextChanges.TextAboutDeleted: { int from = info.From; int firstLine = GetLineIndex(from); int lastLine = GetLineIndex(info.To); if (firstLine != lastLine) { int nremoved = (lastLine - firstLine) + 1;//Count of line removed int startPos = this[firstLine].From; int endPos = this[lastLine].To; SourceLine[] added_lines = new SourceLine[1]; added_lines[0] = new SourceLine(Source.AddPosition(new Position(startPos, 0)), Source.AddPosition(new Position(endPos, 0))); Replace(firstLine, nremoved, added_lines); } } break; default: break; } }