public void GenerateRoom()
    {
        //instantiate here
        Room newRoom = new Room (transform.position, RandomSize(),RandomSize());

        //test
        room = new GameObject ("Room"+transform.position);
        room.transform.position = transform.position;

        //add
        if (irregularShapeOrNot == true) {

            irregularShapeType = RandomShape ();
            newRoom = irreguralize (newRoom, irregularShapeType);

        } else {

            newRoom = calculateTilePosition(newRoom);

        }

        //Generate floor
        foreach (Tile tile in newRoom.floorTiles) {
            GameObject temp = (GameObject)Instantiate (floorTile, new Vector3 (tile.x, 0, tile.z), Quaternion.identity);
            temp.transform.parent = room.transform;
            roomTiles.Add (temp);

        }
        //Generate wall
        foreach (Tile tile in newRoom.wallTiles) {
            GameObject temp = (GameObject)Instantiate(wallTile, new Vector3(tile.x,0,tile.z), Quaternion.Euler(0,tile.rotateAngle,0));
            temp.transform.parent = room.transform;
            roomTiles.Add(temp);
        }
        //Generate corner
        foreach (Tile tile in newRoom.cornerTiles) {
            GameObject temp = (GameObject)Instantiate(cornerTile, new Vector3(tile.x,0,tile.z), Quaternion.Euler(0,tile.rotateAngle,0));
            temp.transform.parent = room.transform;
            roomTiles.Add(temp);
        }

        return;
    }
    //using method to build irregularRoom
    public Room irreguralize(Room room, IrregularShape type)
    {
        if (type == IrregularShape.Tshape) {
            room = TshapeGenerator (room);
        } else if (type == IrregularShape.Lshape) {
            room =LshapeGenerator (room);
        }/* else if (type == IrregularShape.Cross) {
            room = CrossGenerator (room);
        } else if (type == IrregularShape.Eshape) {
            room = EshapeGenerator(room);
        }*/

        return room;
    }