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); }
private IEnumerator ExecuteTaskEnumerator(int taskLayer, Vector2 taskPoint) { if (activeTask != null) { yield return(activeTask.Cancel()); } activeTask = null; // Если клик по активному персонажу, то просто останавливаем выполнение if (!checkIfCharacterOnCellRequest.MakeRequest(taskPoint, new Vector2(transform.position.x, transform.position.y))) { activeTask = ActivateTask(taskLayer, taskPoint); if (activeTask != null) { yield return(activeTask.Execute()); } } }