/// <summary> /// Processes an input model ad turns it into a lit /// </summary> /// <param name="inputModel"></param> public static List <BrickVisual> ExtractBricksFromModel(Model inputModel) { // The list that this function defines List <BrickVisual> brickVisuals = new List <BrickVisual>(); List <UserContrib> userContribs = inputModel.userContributions; foreach (UserContrib user in userContribs) { // Each usercontrib has a username and list of bricks foreach (BrickInfo brickInfo in user.brickConfig) { // Check it that brick type, position and colour is in the list already // If so add this username to it, if not make a new entry in the list BrickVisual exisitingBrick = brickVisuals.Find(x => (x.type == brickInfo.shapeID) && (x.position[0] == brickInfo.position[0]) && (x.position[1] == brickInfo.position[1]) && (x.colour == brickInfo.colourID)); if (exisitingBrick != null) { // Add username to the existing brick exisitingBrick.users.Add(user._id); } else { BrickVisual newBrick = new BrickVisual(brickInfo.shapeID, brickInfo.position, brickInfo.colourID, new List <string> { user._id }); brickVisuals.Add(newBrick); } } } return(brickVisuals); }
/// <summary> /// Compares the plate bricks and visual bricks and updates the plate accordingly /// </summary> private void CompareLists() { List <Brick> bricksToRemove = new List <Brick>(); foreach (Brick plateBrick in bricksOnPlate) { // Try and find it in the latest bricks on plate BrickVisual brickInLatestVisuals = latestBrickVisuals.Find(x => (x.type == plateBrick.type) && (x.position[0] == plateBrick.position[0]) && (x.position[1] == plateBrick.position[1]) && (x.colour == plateBrick.colour)); // If brick found on plate in visual bricks if (brickInLatestVisuals != null) { // Check if the usernames lists are the same bool listEqual = VisuliserCalculations.CompareStringLists(brickInLatestVisuals.users, plateBrick.users); if (listEqual == false) { brickInLatestVisuals = null; } } // If its not there then remove the plate brick if (brickInLatestVisuals == null) { bricksToRemove.Add(plateBrick); } } foreach (Brick brick in bricksToRemove) { RemoveBrick(brick); } foreach (BrickVisual visualBrick in latestBrickVisuals) { // Try and find it in the latest bricks on plate Brick brickOnPlate = bricksOnPlate.Find(x => (x.type == visualBrick.type) && (x.position[0] == visualBrick.position[0]) && (x.position[1] == visualBrick.position[1]) && (x.colour == visualBrick.colour)); // If brick found on plate in visual bricks if (brickOnPlate != null) { // Check if the usernames lists are the same bool listEqual = VisuliserCalculations.CompareStringLists(brickOnPlate.users, visualBrick.users); if (listEqual == false) { brickOnPlate = null; } } // If its not there then add the brick to the plate if (brickOnPlate == null) { AddBrick(visualBrick.type, visualBrick.position, visualBrick.colour, visualBrick.users); } } }