using System; using System.Collections.Generic; using Nibriboard.RippleSpace; using SBRL.Utilities; namespace Nibriboard.Client { /// /// Manages the construction of lines that the clients are drawing bit by bit. /// public class LineIncubator { /// /// The current lines that haven't been completed yet. /// private Dictionary currentLines = new Dictionary(); /// /// The number of lines that this line incubator has completed. /// public int LinesCompleted { get; private set; } = 0; /// /// The number of lines that are still incubating and haven't been completed yet. /// public int IncompletedLines { get { return currentLines.Count; } } public LineIncubator() { } /// /// Figures out whether an incomplete line with the given id exists or not. /// /// The line id to check for. public bool LineExists(string lineId) { if(currentLines.ContainsKey(lineId)) return true; return false; } /// /// Adds a series of points to the incomplete line with the specified id. /// /// The line id to add the points to. /// The points to add to the lines. public void AddBit(string lineId, List points) { // Create a new line if one doesn't exist already if(!currentLines.ContainsKey(lineId)) currentLines.Add(lineId, new DrawnLine(lineId)); // Add these points to the line currentLines[lineId].Points.AddRange(points); } /// /// Mark a line as complete and remove it from the incubator. /// /// The id of the line to complete. /// The completed line. public DrawnLine CompleteLine(string lineId) { if(!currentLines.ContainsKey(lineId)) throw new KeyNotFoundException("Error: A line with that id wasn't found in this LineIncubator."); Log.WriteLine("[LineIncubator] Completing line #{0}", lineId); DrawnLine completedLine = currentLines[lineId]; currentLines.Remove(lineId); return completedLine; } } }