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