public void mossify_tile_at(gridCoordinate target_coord, Texture2D moss_sheet, 
                             List<KeyValuePair<Tile.Tile_Type, gridCoordinate>> moss_map)
 {
     if (target_coord.is_safe(current_floorsize))
     {
         Tile target_tile = floorTiles[target_coord.x][target_coord.y];
         if (target_tile.can_mossify())
             target_tile.mossify(moss_sheet, moss_map);
     }
 }
 public Tile.Tile_Type get_tile_type_at(gridCoordinate target_coord)
 {
     if (!target_coord.is_safe(current_floorsize))
         return Tile.Tile_Type.Void;
     else
         return floorTiles[target_coord.x][target_coord.y].get_my_tile_type();
 }
 public bool is_tile_passable(gridCoordinate target_coord)
 {
     if (!target_coord.is_safe(current_floorsize))
         return false;
     else
         return floorTiles[target_coord.x][target_coord.y].isPassable();
 }
        public void draw_sub_rectangle(ref List<List<Tile>> grid, gridCoordinate start_coord, gridCoordinate end_coord,
                                       Tile.Tile_Type c_tileType, Random rGen,
                                       Texture2D general_sheet, Texture2D dungeon_sheet,
                                       List<KeyValuePair<Tile.Tile_Type, gridCoordinate>> texture_map)
        {
            for(int x = start_coord.x; x < end_coord.x; x++)
                for (int y = start_coord.y; y < end_coord.y; y++)
                {
                    gridCoordinate target_tile = new gridCoordinate(x, y);
                    if (target_tile.is_safe(grid.Count))
                        grid[x][y].set_tile_type(c_tileType, general_sheet, dungeon_sheet, texture_map);
                }

            for (int i = 0; i < 10; i++)
            {
                int next_xSize = (int)((end_coord.x - start_coord.x) * (rGen.NextDouble() * .3 + .2));
                int next_ySize = (int)((end_coord.y - start_coord.y) * (rGen.NextDouble() * .3 + .2));

                int next_corner = rGen.Next(4);
                int x_offset = 0;
                int y_offset = 0;

                gridCoordinate upper_left_corner = new gridCoordinate(start_coord.x, start_coord.y);
                switch (next_corner)
                {
                    //Along top edge
                    case 0:
                        x_offset = (int)((end_coord.x - start_coord.x - next_xSize) * rGen.NextDouble());
                        upper_left_corner = new gridCoordinate(start_coord.x + x_offset, start_coord.y - next_ySize);
                        break;
                    //Along right edge
                    case 1:
                        y_offset = (int)((end_coord.y - start_coord.y - next_ySize) * rGen.NextDouble());
                        upper_left_corner = new gridCoordinate(end_coord.x, start_coord.y + y_offset);
                        break;
                    //Along bottom edge
                    case 2:
                        x_offset = (int)((end_coord.x - start_coord.x - next_xSize) * rGen.NextDouble());
                        upper_left_corner = new gridCoordinate(start_coord.x + x_offset, end_coord.y);
                        break;
                    //Along left edge
                    case 3:
                        y_offset = (int)((end_coord.y - start_coord.y - next_ySize) * rGen.NextDouble());
                        upper_left_corner = new gridCoordinate(start_coord.x - next_xSize, start_coord.y + y_offset);
                        break;
                }

                gridCoordinate lower_right_corner = new gridCoordinate(upper_left_corner.x + next_xSize, upper_left_corner.y + next_ySize);

                if (next_xSize >= 1 && next_ySize >= 1)
                    draw_sub_rectangle(ref grid, upper_left_corner, lower_right_corner, c_tileType, rGen, general_sheet, dungeon_sheet, texture_map);
            }
        }