public void HideTool(ToolCode toolCode) { if (toolCode != ToolCode.None) { ChangeToolMode(toolCode, false); } }
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); }
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); }
public void SetDefaultTool(ToolCode toolCode) { defaultTool = toolCode; }