Example #1
0
 public void HideTool(ToolCode toolCode)
 {
     if (toolCode != ToolCode.None)
     {
         ChangeToolMode(toolCode, false);
     }
 }
Example #2
0
    public void ChangeToolMode(ToolCode toolCode, bool toolMode)
    {
        if (toolCode == ToolCode.Default)
        {
            toolCode = defaultTool;
        }
        ToolEquipData toolData = toolsEquipData.Find(toolEquipData => toolEquipData.toolCode == toolCode);

        if (toolData != null)
        {
            // Смену каждого инструмента можно реализовать двумя способами. Через смену всего спрайта или через инициализацию
            // дополнительного gameObject с инструментом. Изначально я делал отдельные спрайты персонажа для каждого инструмента. Для
            // моих спрайтов автоматических риггинг работает некорректно, а вручную это занимает время. Т.е. введение новых инструментов
            // становится довольно муторно. Но с таким способом можно лучше регулировать "глубину" инструмента - например, чтобы он был за головой, но перед телом.
            // Метод с геймобъектом быстрее, но там не получится сделать разное отношение глубин для разных частей тела - только для всего тела целиком.
            // Поэтому я оставил оба способа, потому что где-то без замены спрайта не обойтись (как, например, с лопатой), а где-то хватит и геймобъекта (мешок)
            if (toolData.isToUseSpriteSwitch)
            {
                spriteResolver.SetCategoryAndLabel(spriteResolver.GetCategory(), toolMode ? toolData.spriteResolveLabel : "Main");
            }
            else
            {
                toolData.ChangeMode(toolMode);
            }
        }
    }
    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);
    }
Example #4
0
 public void ApplyTool(ToolCode toolCode)
 {
     // При применении какого-то инструмента убираем остальные предметы. Несколько предметов одновременно пока не отрабатывал
     foreach (ToolEquipData toolEquipData in toolsEquipData)
     {
         if (toolCode != toolEquipData.toolCode && !toolEquipData.isToUseSpriteSwitch)
         {
             toolEquipData.Destroy();
         }
     }
     if (toolCode != ToolCode.None)
     {
         ChangeToolMode(toolCode, true);
     }
 }
 /// <param name="toolCode">کد ابزار تسویه</param>
 public Builder SetToolCode(ToolCode toolCode)
 {
     this.toolCode = toolCode;
     return(this);
 }
Example #6
0
 public void SetDefaultTool(ToolCode toolCode)
 {
     defaultTool = toolCode;
 }