/// <summary>
    /// All the processes that include starting playmode
    /// - Hide the Canvas
    /// - Setup main character + camera
    /// - Setting up collisions
    /// - Instantiation of entities
    /// </summary>
    public void StartPlayMode()
    {
        isPlaying = true;

        MainCanvas.alpha          = 0f;
        MainCanvas.interactable   = false;
        MainCanvas.blocksRaycasts = false;
        TilePropertiesItem.SetActive(false);;
        MainCanvas.interactable     = false;
        MainCanvas.blocksRaycasts   = false;
        m_tileMapGrid.showSelection = false;
        m_tileMapGrid.showGrid      = false;
        m_cam.gameObject.SetActive(false);


        if (GameObject.FindGameObjectWithTag("MainCamera") == null)
        {
            var camera = Instantiate(cameraPrefab);
            camera.GetComponent <Camera>().backgroundColor = m_tileMapGrid.backgroundColor;
        }
        if (GameObject.FindGameObjectWithTag("Player") == null)
        {
            if (lastMapTileSelected != null)
            {
                Instantiate(playerPrefab, lastMapTileSelected.ToVector2(), Quaternion.identity);
            }
            else
            {
                Instantiate(playerPrefab, Vector3.zero, Quaternion.identity);
            }
        }

        foreach (Deftly.Subject subject in FindObjectsOfType <Deftly.Subject>())
        {
            subject.GetComponent <Rigidbody2D>().isKinematic = false;
            subject.SetInputPermission(true, true, true);
        }

        m_tileMap.DestroyColliders();
        m_tileMap.CreateColliders();

        m_tileMap.CreateEntities();
    }