コード例 #1
0
ファイル: GameManager.cs プロジェクト: Hengle/Clicker
        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);
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: UIElement_Tab_Craft.cs プロジェクト: Hengle/Clicker
        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();
            }
        }
コード例 #4
0
        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();
            }
        }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
ファイル: ItemsFactory.cs プロジェクト: Hengle/Clicker
        /// <summary>
        /// Добавить тики указанному предмету
        /// </summary>
        /// <param name="type">Тип предмета, которому нужно добавить тики</param>
        public void AddTickToItem(ItemTypes type)
        {
            //Создать словарь если еще не существует
            if (m_ProcessedItems == null)
            {
                m_ProcessedItems = new Dictionary <ItemTypes, ItemCreationData>();
            }

            //Если предмета еще нет в списке обрабатываемых - добавить
            if (!m_ProcessedItems.ContainsKey(type))
            {
                ItemCreationData itemCreateData = new ItemCreationData(type, DataTableItems.GetItemDataByType(type).TicksToCreate);
                m_ProcessedItems.Add(type, itemCreateData);
            }

            //Добавить тики к предмету
            ItemCreationData curItemCreationData = m_ProcessedItems[type];
            var resultData = curItemCreationData.AddTickToItem(m_TICK_STEP);

            //Если предмет был создан
            if (resultData.isCreated)
            {
                //Обнулить текущее количество тиков (даже есть текущий шаг тиков превышает количество тиков для создания - за раз можно создать только один предмет)
                curItemCreationData.ResetTicks();

                //Вызов события добавления предмета
                OnItemCrafted?.Invoke(type);
            }
            else
            {
                //Вызов события добавления тиков
                OnTickToItemAdded?.Invoke(type, resultData.progress);
            }

            //Debug.Log(m_ProcessedItems[type].ToString());
        }