//Closes open edges
    void RecheckPoints()
    {
        List <GridPoint> ValidCheckPoints = new List <GridPoint>();

        foreach (GridPoint gp in Grid)
        {
            if (gp.IsRoofType() || gp.Type == PointType.Filler)
            {
                ValidCheckPoints.Add(gp);
            }
        }

        List <GridPoint> PointsToRemove = new List <GridPoint>();

        foreach (GridPoint gp in ValidCheckPoints)
        {
            GridPoint Neighboor = gp.GetNeighbor(new Vector3(0, 1f, 0), Grid);
            if (Neighboor != null && Neighboor.IsRoofType())
            {
                if (Neighboor.Type == PointType.HalfRoof)
                {
                    gp.Type = PointType.HalfWall;
                    gp.Dir  = Neighboor.Dir;
                }
                else if (Neighboor.Type == PointType.Roof)
                {
                    gp.Type = PointType.Wall;
                    gp.Dir  = Neighboor.Dir;
                }
                else
                {
                    PointsToRemove.Add(gp);
                }
            }
            else
            {
                PointsToRemove.Add(gp);
            }
        }

        foreach (GridPoint gp in PointsToRemove)
        {
            ValidCheckPoints.Remove(gp);
        }

        foreach (GridPoint gp in ValidCheckPoints)
        {
            gp.CreateGridObject(this.transform, HouseCollection);
        }
    }
    void RecheckRoofCorners()
    {
        List <GridPoint> newPoints = new List <GridPoint>();

        List <GridPoint> newFullRoofPoints = new List <GridPoint>();
        List <GridPoint> newHalfRoofPoints = new List <GridPoint>();
        List <GridPoint> newSkipRoofPoints = new List <GridPoint>();

        foreach (GridPoint gp in Grid)
        {
            if (!gp.IsPointValid())
            {
                continue;
            }
            if (gp.IsRoofType())
            {
                continue;
            }

            GridPoint NeighboorPoint = gp.GetNeighbor(gp.Dir, Grid, true);
            if (NeighboorPoint != null)
            {
                if (NeighboorPoint.IsRoofType())
                {
                    GridPoint newGP = new GridPoint(PointType.Wall, gp.Location);
                    newPoints.Add(newGP);

                    if (gp.IsHalf())
                    {
                        newHalfRoofPoints.Add(gp);
                    }
                    else
                    {
                        newFullRoofPoints.Add(gp);
                        GridPoint HalfNeighboor = gp.GetNeighbor(gp.Dir * 0.5f, Grid, false);
                        if (HalfNeighboor != null)
                        {
                            newSkipRoofPoints.Add(HalfNeighboor);
                        }
                    }

                    for (int i = 0; i < DirectionArray.Length; i++)
                    {
                        GridPoint g = newGP.GetNeighbor(DirectionArray[i], Grid, false);
                        if (g != null)
                        {
                            if (g.IsPointValid() && !g.IsRoofType())
                            {
                                if (DirectionArray[i] * -1f != g.Dir)
                                {
                                    newGP.Dir      = DirectionArray[i];
                                    newGP.IsCorner = true;
                                    g.IsCorner     = true;

                                    GridPoint newEmptyRoofPoint = new GridPoint(PointType.None_SkipRoof, g.Location);
                                    newPoints.Add(newEmptyRoofPoint);
                                }
                            }
                        }
                    }
                }
            }
        }

        foreach (GridPoint gp in newFullRoofPoints)
        {
            gp.Type = PointType.Roof;
        }

        foreach (GridPoint gp in newHalfRoofPoints)
        {
            gp.Type = PointType.HalfRoof;
        }

        foreach (GridPoint gp in newSkipRoofPoints)
        {
            gp.Type = PointType.None_SkipRoof;
        }

        foreach (GridPoint gp in newPoints)
        {
            Grid.Add(gp);
        }
    }