TaskShortInfoWidget CreateTaskWidget(int index, ITask task)
    {
        PoolSettingsSO taskInfoWidgetPoolSet = task.GetShortInfoPoolSet();
        var            taskShortInfoWidget   = taskInfoWidgetPoolSet.GetNewObject(_tasksSelector) as TaskShortInfoWidget;

        taskShortInfoWidget.Initialize(index, task);
        taskShortInfoWidget.OnClickSubscribe(ShowTask);

        taskShortInfoWidget.gameObject.name = taskInfoWidgetPoolSet.prefab.name + "_" + index;
        taskShortInfoWidget.gameObject.SetActive(true); // Todo: run widget show animation
        return(taskShortInfoWidget);
    }
    public void ShowTask(ITask task)
    {
        HideTask();

        if (_taskInfos.TryGetValue(task, out TaskShortInfoWidget shortWidget))
        {
            _selectedIndex = shortWidget.index;
        }

        PoolSettingsSO taskWidgetPoolSet = task.GetTaskWidgetPoolSet();

        _taskWidget = taskWidgetPoolSet.GetNewObject(_taskWidgetContainer) as BasicTaskWidget;
        _taskWidget.TaskUpdate(task);

        _taskWidget.gameObject.SetActive(true); // Todo: run widget show animation
    }
    public void ShowMenu(ITask task)
    {
        if (_taskWidget != null)
        {
            _taskWidget.ReturnToPool();
        }

        _task = task;

        PoolSettingsSO taskWidgetPoolSet = task.GetTaskWidgetPoolSet();

        _taskWidget = taskWidgetPoolSet.GetNewObject(_taskWidgetContainer) as BasicTaskWidget;
        _taskWidget.TaskUpdate(task);

        TaskManager.instance.OnTaskChangedSubscribe(OnTaskChanged);

        gameObject.SetActive(true);             // Todo: run window show animation
        _taskWidget.gameObject.SetActive(true); // Todo: run widget show animation
    }
 TaskShortInfoWidget UpdateTaskWidget(ITask task)
 {
     if (_taskInfos.TryGetValue(task, out TaskShortInfoWidget taskShortInfoWidget))
     {
         // Reinitialize widget in same place if it's objects key changed
         PoolSettingsSO taskInfoWidgetPoolSet = task.GetShortInfoPoolSet();
         if (taskInfoWidgetPoolSet.key != taskShortInfoWidget.GetPoolSet().key)
         {
             int childIndex = taskShortInfoWidget.transform.GetSiblingIndex();
             taskShortInfoWidget.ReturnToPool();
             taskShortInfoWidget = CreateTaskWidget(childIndex, task);
             taskShortInfoWidget.transform.SetSiblingIndex(childIndex);
             _taskInfos[task] = taskShortInfoWidget;
         }
         taskShortInfoWidget.InfoUpdate(task);
     }
     else
     {
         taskShortInfoWidget = CreateTaskWidget(_taskInfos.Count, task);
         _taskInfos.Add(task, taskShortInfoWidget);
     }
     return(taskShortInfoWidget);
 }