/**
     * A dedicated function to create the game object and tile component from it's parts.
     * Note: There isn't a way to externally create components.
     * @param x refers to the grid location
     * @param y refers to the grid location
     * @param tileTemplate refers to the template who is the base for the given tile
     */
    public GameObject addTile(int x, int y, componentTile tileTemplate, Notifier notify)
    {
        GameObject tileObject = componentTile.generateObject(TILE_OBJECT_NAME + " (" + x + "," + y + ")", tileTemplate, notify);

        addMapObject(x, y, tileObject);

        return tileObject;
    }
    public static GameObject generateObject(string objectName, componentTile tileTemplate, Notifier notify)
    {
        GameObject gameObject = generateObject(objectName, tileTemplate.getSpriteName(), tileTemplate.getTypeTerrain(), tileTemplate.getParent(), tileTemplate.getNotifyBehaviors(), notify);

        BoxCollider2D boxCollider = tileTemplate.gameObject.GetComponent<BoxCollider2D>();
        if(boxCollider != null)
        {
            BoxCollider2D newBoxCollider = gameObject.AddComponent<BoxCollider2D>();
            newBoxCollider.isTrigger = boxCollider.isTrigger;
            newBoxCollider.size = boxCollider.size;
        }

        CircleCollider2D circleCollider = tileTemplate.gameObject.GetComponent<CircleCollider2D>();
        if(circleCollider != null)
        {
            CircleCollider2D newCircleCollider = gameObject.AddComponent<CircleCollider2D>();
            newCircleCollider.isTrigger = circleCollider.isTrigger;
            newCircleCollider.radius = circleCollider.radius;
        }

        return gameObject;
    }