private void CreateRoom(Room_Settings room)
    {
        //Create the room
        GameObject newRoom = new GameObject();

        newRoom.name = room.roomName;

        //Create the level, this holds the tilemap stuffs
        GameObject level = new GameObject();

        level.name = "Ground";
        level.transform.SetParent(newRoom.transform);

        //Grid so that the properly come to gether
        newRoom.AddComponent <Grid>();

        //The level itself.
        Tilemap tilemap = level.AddComponent <Tilemap>();

        level.AddComponent <TilemapRenderer>();
        level.AddComponent <TilemapCollider2D>();

        //Draw the room.
        ParseRoom(tilemap, room, newRoom);

        //Add it to our dict.
        rooms.Add(newRoom);
    }
    private void ParseRoom(Tilemap tilemap, Room_Settings room, GameObject instance)
    {
        Debug.Log("Parsing Room: " + instance.name);

        //Load image
        Texture2D image = room.image;

        Room newRoom = instance.AddComponent <Room>();

        newRoom.size = new Vector2(image.width, image.height);

        //Iterate through it's pixels
        //Normally this would be expensive, but rooms are small so it should be quick-
        for (int x = 0; x < image.width; x++)
        {
            for (int y = 0; y < image.height; y++)
            {
                Color pixel = image.GetPixel(x, y);

                //Skip all transparent pixels, this should save a lot on loadtime.
                if (pixel.a == 0)
                {
                    continue;
                }

                for (int i = 0; i < room.colorCodes.tileCodes.Length; i++)
                {
                    if (pixel == room.colorCodes.tileCodes[i].key)
                    {
                        //Setting Tile
                        tilemap.SetTile(new Vector3Int(x, y, 0), room.colorCodes.tileCodes[i].tile);
                    }
                }

                for (int i = 0; i < room.colorCodes.objectCodes.Length; i++)
                {
                    if (pixel == room.colorCodes.objectCodes[i].key)
                    {
                        //Instantiate Object
                        GameObject newObject = Instantiate(room.colorCodes.objectCodes[i].obj, new Vector3(x, y, 0), room.colorCodes.objectCodes[i].obj.transform.rotation);

                        newObject.transform.SetParent(instance.transform);
                    }
                }

                for (int i = 0; i < room.colorCodes.nodeCodes.Length; i++)
                {
                    if (pixel == room.colorCodes.nodeCodes[i].key)
                    {
                        //Instantiate Node
                        GameObject newNode = Instantiate(room.colorCodes.nodeCodes[i].node, new Vector3(x, y, 0), room.colorCodes.nodeCodes[i].node.transform.rotation);

                        newNode.transform.SetParent(instance.transform);
                    }
                }
            }
        }

        Debug.Log("Parse Complete.");
    }
 //For other scripts to reference
 public void LoadRoom(Room_Settings room)
 {
     CreateRoom(room);
 }