/// <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);
    }
Пример #2
0
    /// <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);
            }
        }
    }