void ItemCrafted_Handler(DataTableItems.ItemTypes type) { //Отнять предметы, необходимые для создания DataTableItems.Item itemData = DataTableItems.GetItemDataByType(type); bool hasIgnorableItemsOnCraft = DataTableItems.HasIgnorableItemsOnCraft(type); for (int i = 0; i < itemData.RequiredItems.Length; i++) { if ((hasIgnorableItemsOnCraft && !DataTableItems.ItemShouldBeIgnoredForType(type, itemData.RequiredItems[i].Type)) || !hasIgnorableItemsOnCraft) { //Удалить предмет из инвентаря (предмет, который необходим для создания другого предмета) DataManager.Instance.PlayerAccount.Inventory.RemoveItem(itemData.RequiredItems[i].Type, itemData.RequiredItems[i].Amount); //Обновить количество предметов в сумке DataManager.Instance.PlayerAccount.Inventory.BagsState.UpdateItemAmountInBag(itemData.RequiredItems[i].Type); } } //Добавить созданный предмет DataManager.Instance.PlayerAccount.Inventory.AddItem(type); //Обновить состояние сумки если такой же предмет находился в сумке if (DataManager.Instance.PlayerAccount.Inventory.BagsState.HasItemInBag(type)) { DataManager.Instance.PlayerAccount.Inventory.BagsState.AddItemToBag(type); } }
void RemoveAbsorbedItems(DataTableItems.Item itemData, DataTableItems.ItemTypes itemType) { for (int i = 0; i < itemData.RequiredItems.Length; i++) { DataManager.Instance.PlayerAccount.Inventory.RemoveItem(itemData.RequiredItems[i].Type, itemData.RequiredItems[i].Amount * DataManager.Instance.PlayerAccount.Inventory.GetItemAmount(itemType)); } OnPeriodChangedItemsAmount?.Invoke(); }
PeriodResultStates PeriodFinishedHandler(DataTableItems.ItemTypes itemType) { bool hasEnoughtItems = true; DataTableItems.Item itemData = DataTableItems.GetItemDataByType(itemType); //Проверить, есть ли достаточное количество предметов для следующего периода для всего населения for (int i = 0; i < itemData.RequiredItems.Length; i++) { if (!DataManager.Instance.PlayerAccount.Inventory.HasAmountOfItem(itemData.RequiredItems[i].Type, itemData.RequiredItems[i].Amount * DataManager.Instance.PlayerAccount.Inventory.GetItemAmount(itemType))) { hasEnoughtItems = false; break; } } //Если есть достаточное количество предметов, необходимых для поддержания периода - отнять if (hasEnoughtItems) { //Снять ресурсы, которые необходимы для поддержки текущего количества населения RemoveAbsorbedItems(itemData, itemType); return(PeriodResultStates.Success); } else { //Уменьшить количество населения DataManager.Instance.PlayerAccount.Inventory.RemoveItem(itemType); //Если еще есть население if (DataManager.Instance.PlayerAccount.Inventory.HasItem(itemType)) { //Снять ресурсы, которые необходимы для поддержки текущего количества населения RemoveAbsorbedItems(itemData, itemType); //Пересчитать множитель m_PopulationPeriod[itemType].SetMultiplyer(GetMultiplayer(itemType)); return(PeriodResultStates.PopulationReduce); } else { m_PopulationPeriod[itemType].StopPeriod(); //Остановить период } } return(PeriodResultStates.PopulationLoose); }
public override void InitTab() { if (!m_IsInitialized) { Text_Title.text = FilterType.ToString(); m_Items = new Dictionary <DataTableItems.ItemTypes, UIElement_CraftItem>(); //Создать предметы for (int i = 0; i < (int)DataTableItems.ItemTypes.Max; i++) { //Получить тип предмета DataTableItems.ItemTypes type = (DataTableItems.ItemTypes)i; //Если предмет можно вывести в этой вкладке DataTableItems.Item itemData = DataTableItems.GetItemDataByType(type); if (itemData != null && itemData.MatchFilter(FilterType)) { //Создать объект UIElement_CraftItem item = Instantiate(GameManager.Instance.Manager_UI.WindowsManager.UIElement_CraftItemPrefab, ItemsParent); item.Init(type, DataManager.Instance.PlayerAccount.Inventory.GetItemAmount(type), GameManager.Instance.CraftItemFactory.GetProgressForItem(type), itemData.AllowAutocraft, itemData.RequiredItems); item.OnItemPress += Item_PressHanlder; item.OnAutoCraftToggled += ItemToggle_TryChangeValueHandle; //Добавить объект в словарь для последующего доступа if (!m_Items.ContainsKey(type)) { m_Items.Add(type, item); } //Если объект в очереди автодобывания if (GameManager.Instance.AutoCraftItemsController.ItemIsProcessing(type)) { item.Toggle_AutoCraft.SetValue(true); } } } base.InitTab(); } }
protected override void ItemCrafted_Handler(DataTableItems.ItemTypes craftedItemType) { base.ItemCrafted_Handler(craftedItemType); DataTableItems.Item itemData = DataTableItems.GetItemDataByType(craftedItemType); //Если созданный предмет удовлетворяет текущему фильтру - добавить население if (itemData.MatchFilter(ItemFilterTypes.Population)) { //Добавить население GameManager.Instance.Manager_Battle.PopulationManager.AddPopulation(craftedItemType); //Обновить локальную панель UpdatePopulationItems(); } else //Если был создан какой-то другой предмет - обновить текущее состояние вкладки { UpdateTabState(); } }
void ShowAbsorbedResources() { m_AbsorbingItems = new Dictionary <DataTableItems.ItemTypes, UIElement_CraftItem_AbsorbItem>(); DataTableItems.Item itemData = DataTableItems.GetItemDataByType(m_ItemType); for (int i = 0; i < itemData.RequiredItems.Length; i++) { //Создать предмет UIElement_CraftItem_AbsorbItem item = Instantiate(GameManager.Instance.Manager_UI.WindowsManager.UIElement_CraftAbsorbItemPrefab, AbsorbedResourcesParent); //Инициализировать как количество предметов, которые необходимы единице популяции item.Init(itemData.RequiredItems[i].Type, itemData.RequiredItems[i].Amount); //Вывести как значение для единицы популяции и умножить на количвество популяции item.UpdateForAmount(DataManager.Instance.PlayerAccount.Inventory.GetItemAmount(m_ItemType)); m_AbsorbingItems.Add(itemData.RequiredItems[i].Type, item); } }