Ejemplo n.º 1
0
    public override IEnumerator OnEnd()
    {
        yield return(base.OnEnd());

        ToolCode prevToolCode = toolsManager.DefaultTool;

        // Даем мешок с добычей
        toolsManager.SetDefaultTool(nextTaskDefaultTool);

        // Определяем правый нижний участок базы - куда будем нести добычу
        basePositionRequest.MakeRequest(new ParamsObject(baseTile), out List <Vector2> basePositions);

        Vector2 baseGates = basePositions.Aggregate(basePositions[0], (picked, next) =>
        {
            return(next.x > picked.x || next.y < picked.y ? next : picked);
        });

        CharacterTask returnToBaseTask = actionData.taskManager.ActivateTask(Utils.MaskToLayer(baseLayer), baseGates);

        // Ждем пока доставит добычу на базу
        yield return(returnToBaseTask.Execute());

        // Добавляем деньги
        moneyVariable.Plus(maxIterations * actionData.SkillValue);

        // Убираем мешок, возвращаем предыдущий иструмент
        toolsManager.SetDefaultTool(prevToolCode);

        cellLayoutRequest.MakeRequest(new ParamsObject(actionData.endPosition), out LayerMask newTaskLayer);

        // После возвращения на базу выполняем новое задание с той же точкой (если ресурсы еще не разработаны -
        // доразработает, если уже - то дойдет)
        actionData.taskManager.ExecuteTask(newTaskLayer, actionData.endPosition);
    }