示例#1
0
    public void UpdateUI()
    {
        if (!UI || !UI.gameObject)
        {
            return;
        }
        UI.money.text = Backpack.Money.ToString() + GameManager.CoinName;
        Color color = UI.weight.color;
        float mul   = Backpack.weight.Current / Backpack.WeightOver;

        if (mul > 1 && mul <= 1.5f)
        {
            color = overColor;
        }
        else if (mul > 1.5f)
        {
            color = maxColor;
        }
        UI.weight.text = ZetanUtility.ColorText(Backpack.weight.Current.ToString("F2") + "/" + Backpack.WeightOver.ToString("F2") + "WL", color);
        color          = UI.size.color;
        if (Backpack.size.Rest < 5 && Backpack.size.Rest > 0)
        {
            color = overColor;
        }
        else if (Backpack.size.Rest < 1)
        {
            color = maxColor;
        }
        UI.size.text = ZetanUtility.ColorText(Backpack.size.ToString(), color);
        SetPage(currentPage);
        QuestManager.Instance.UpdateUI();
        BuildingManager.Instance.UpdateUI();
        MakingManager.Instance.UpdateUI();
    }
示例#2
0
 public static string GetColorName(ItemBase item)
 {
     if (MiscSettings.Instance && item.Quality > 0)
     {
         return(ZetanUtility.ColorText(item.Name, QualityToColor(item.Quality)));
     }
     else
     {
         return(item.Name);
     }
 }
示例#3
0
    public void ShowDescription(SeedItem seed)
    {
        if (!seed)
        {
            HideDescription();
            return;
        }

        descriptionWindow.alpha = 1;
        nameText.text           = seed.Crop.Name;
        int amount = BackpackManager.Instance.GetAmount(seed);

        icon.SetItem(seed, amount > 0 ? amount.ToString() : null);
        StringBuilder str = new StringBuilder("占用田地空间:");

        str.Append(seed.Crop.Size);
        str.Append("\n");
        str.Append(CropInformation.CropSeasonString(seed.Crop.PlantSeason));
        str.Append("\n");
        str.Append("生长阶段:");
        str.Append("\n");
        for (int i = 0; i < seed.Crop.Stages.Count; i++)
        {
            CropStage stage = seed.Crop.Stages[i];
            str.Append(ZetanUtility.ColorText(CropStage.CropStageName(stage.Stage), Color.yellow));
            str.Append("持续");
            str.Append(ZetanUtility.ColorText(stage.LastingDays.ToString(), Color.green));
            str.Append("天");
            if (stage.HarvestAble)
            {
                if (stage.RepeatTimes > 0)
                {
                    str.Append(",可收割");
                    str.Append(ZetanUtility.ColorText(stage.RepeatTimes.ToString(), Color.green));
                    str.Append("次");
                }
                else if (stage.RepeatTimes < 0)
                {
                    str.Append(",可无限收割");
                }
            }
            if (i != seed.Crop.Stages.Count - 1)
            {
                str.Append("\n");
            }
        }
        description.text = str.ToString();
    }
示例#4
0
 /// <summary>
 /// 丢弃道具
 /// </summary>
 /// <param name="info">道具信息</param>
 public void DiscardItem(ItemInfo info)
 {
     if (Backpack == null || info == null || !info.item)
     {
         return;
     }
     if (!Backpack.Items.Contains(info))
     {
         MessageManager.Instance.New($"该物品已不在{GameManager.BackpackName}中");
         return;
     }
     if (!info.item.DiscardAble)
     {
         MessageManager.Instance.New("该物品不可丢弃");
         return;
     }
     if (info.Amount < 2 && info.Amount > 0)
     {
         ConfirmManager.Instance.New(string.Format("确定丢弃1个 [{0}] 吗?",
                                                   ZetanUtility.ColorText(info.ItemName, GameManager.QualityToColor(info.item.Quality))), delegate
         {
             if (LoseItem(info, 1))
             {
                 MessageManager.Instance.New($"丢掉了1个 [{info.ItemName}]");
             }
         });
     }
     else
     {
         AmountManager.Instance.New(delegate
         {
             ConfirmManager.Instance.New(string.Format("确定丢弃{0}个 [{1}] 吗?", (int)AmountManager.Instance.Amount,
                                                       ZetanUtility.ColorText(info.ItemName, GameManager.QualityToColor(info.item.Quality))), delegate
             {
                 if (LoseItem(info, (int)AmountManager.Instance.Amount))
                 {
                     MessageManager.Instance.New(string.Format("丢掉了{0}个 [{1}]", (int)AmountManager.Instance.Amount, info.ItemName));
                 }
             });
         }, info.Amount);
     }
 }
示例#5
0
    public void MakeCurrent()
    {
        if (!CurrentTool || !currentItem)
        {
            return;
        }
        if (IsMaking)
        {
            MessageManager.Instance.New("正在制作中");
            return;
        }
        int amountCanMake = BackpackManager.Instance.GetAmountCanMake(currentItem.Materials);

        if (amountCanMake < 1)
        {
            MessageManager.Instance.New("材料不足");
            return;
        }
        if (!currentItem.DIYAble)
        {
            if (amountCanMake > 0 && amountCanMake < 2)
            {
                ConfirmManager.Instance.New(string.Format("确定制作1次 [{0}] 吗?", currentItem.name), delegate
                {
                    IsMaking = true;
                    PauseDisplay(true);
                    ProgressBar.Instance.New(CurrentTool.MakingTime, delegate
                    {
                        IsMaking = false;
                        PauseDisplay(false);
                        int amoutBef = BackpackManager.Instance.GetItemAmount(currentItem.ID);
                        if (MakeItem(currentItem))
                        {
                            MessageManager.Instance.New(string.Format("制作了 {0} 个 [{1}]", BackpackManager.Instance.GetItemAmount(currentItem.ID) - amoutBef,
                                                                      ZetanUtility.ColorText(currentItem.name, GameManager.QualityToColor(currentItem.Quality))));
                        }
                    },
                                             delegate
                    {
                        IsMaking = false;
                        PauseDisplay(false);
                    }, "制作中", true);
                });
            }
            else
            {
                AmountManager.Instance.SetPosition(ZetanUtility.ScreenCenter, Vector2.zero);
                AmountManager.Instance.New(delegate
                {
                    ConfirmManager.Instance.New(string.Format("确定制作{0}次 [{1}] 吗?", (int)AmountManager.Instance.Amount, currentItem.name), delegate
                    {
                        int amount = (int)AmountManager.Instance.Amount;
                        IsMaking   = true;
                        PauseDisplay(true);
                        ProgressBar.Instance.New(CurrentTool.MakingTime, amount - 1,
                                                 delegate
                        {
                            IsMaking = false;
                            PauseDisplay(false);
                        },
                                                 delegate
                        {
                            int amoutBef = BackpackManager.Instance.GetItemAmount(currentItem.ID);
                            if (MakeItem(currentItem))
                            {
                                MessageManager.Instance.New(string.Format("制作了 {0} 个 [{1}]", BackpackManager.Instance.GetItemAmount(currentItem.ID) - amoutBef,
                                                                          ZetanUtility.ColorText(currentItem.name, GameManager.QualityToColor(currentItem.Quality))));
                            }
                            else
                            {
                                IsMaking = false;
                                PauseDisplay(false);
                                ProgressBar.Instance.Cancel();
                            }
                        },
                                                 delegate
                        {
                            IsMaking = false;
                            PauseDisplay(false);
                        }, "制作中", true);
                    });
                }, amountCanMake, "制作次数");
            }
        }
        else
        {
            ItemSelectionManager.Instance.StartSelection(ItemSelectionType.Making, "放入一份材料", MakeCurrent,
                                                         delegate
            {
                BackpackManager.Instance.DarkUnmakeable(false);
            });
            BackpackManager.Instance.DarkUnmakeable(true);
        }
    }
示例#6
0
 /// <summary>
 /// 制作道具,用于根据已知配方自己放入材料来制作道具的玩法
 /// </summary>
 /// <param name="item">目标道具</param>
 /// <param name="materials">放入的材料</param>
 private bool MakeItem(ItemBase item, IEnumerable <ItemInfo> materials)
 {
     if (!item || materials == null || materials.Count() < 1)
     {
         MessageManager.Instance.New("无效的制作");
         return(false);
     }
     if (CheckMaterialsMatch(item.Materials, materials))
     {
         ItemInfo production = new ItemInfo(item, Random.Range(item.MinYield, item.MaxYield + 1));
         Dictionary <ItemInfo, int> itemsToLose = new Dictionary <ItemInfo, int>();
         foreach (var material in item.Materials)
         {
             if (material.MakingType == MakingType.SingleItem)
             {
                 ItemInfo find = materials.FirstOrDefault(x => x.ItemID == material.ItemID);
                 if (!find || find.Amount != material.Amount)
                 {
                     MessageManager.Instance.New("材料不正确(请确保只放入了一份)");
                     return(false);//所提供的材料中没有这种材料或数量不符合,则无法制作
                 }
                 //否则加入消耗列表
                 if (find.item.StackAble)                                                             //可叠加,则find是克隆出来的新实例
                 {
                     itemsToLose.Add(BackpackManager.Instance.GetItemInfo(find.ItemID), find.Amount); //需从背包中找到相应道具
                 }
                 else
                 {
                     itemsToLose.Add(find, find.Amount);
                 }
             }
             else
             {
                 var finds = materials.Where(x => x.item.MaterialType == material.MaterialType);//找到种类相同的道具
                 if (finds.Count() > 0)
                 {
                     if (finds.Select(x => x.Amount).Sum() != material.Amount)
                     {
                         MessageManager.Instance.New("材料不正确(请确保只放入了一份)");
                         return(false);//若材料总数不符合,则无法制作
                     }
                     foreach (var find in finds)
                     {
                         if (!BackpackManager.Instance.TryLoseItem_Boolean(find.item, find.Amount))
                         {
                             MessageManager.Instance.New("材料不足,无法继续制作");
                             return(false);//若任意一个相应数量的材料无法失去,则会导致总数量不符合,所以无法制作
                         }
                         else
                         {
                             //否则加入消耗列表
                             if (find.item.StackAble)                                                             //可叠加,则find是克隆出来的新实例
                             {
                                 itemsToLose.Add(BackpackManager.Instance.GetItemInfo(find.ItemID), find.Amount); //需从背包中找到相应道具
                             }
                             else
                             {
                                 itemsToLose.Add(find, find.Amount);
                             }
                         }
                     }
                 }
                 else
                 {
                     MessageManager.Instance.New("材料不足,无法继续制作");
                     return(false);//材料不足
                 }
             }
         }
         List <ItemInfo> itemsToLoseTemp = new List <ItemInfo>();
         foreach (var kvp in itemsToLose)
         {
             itemsToLoseTemp.Add(new ItemInfo(kvp.Key.item, kvp.Value));
         }
         if (BackpackManager.Instance.TryGetItem_Boolean(production, itemsToLoseTemp.ToArray()))
         {
             BackpackManager.Instance.GetItem(production);
             foreach (var kvp in itemsToLose)//精确到背包中的道具个例
             {
                 BackpackManager.Instance.LoseItem(kvp.Key, kvp.Value);
             }
             MessageManager.Instance.New(string.Format("生产了 {0} 个[{1}]", production.Amount, ZetanUtility.ColorText(production.ItemName, GameManager.QualityToColor(production.item.Quality))));
             if (!HadLearned(item))
             {
                 Learn(item);
             }
             return(true);
         }
         else
         {
             return(false);
         }
     }
     else
     {
         MessageManager.Instance.New("材料不正确(请确保只放入了一份)");
         return(false);
     }
 }
示例#7
0
    public static string HandlingKeyWords(string input, bool color = false, params Array[] configs)
    {
        StringBuilder output         = new StringBuilder();
        StringBuilder keyWordsGetter = new StringBuilder();
        bool          startGetting   = false;

        for (int i = 0; i < input.Length; i++)
        {
            if (i + 1 < input.Length && input[i] == '{' && input[i + 1] != '{')
            {
                startGetting = true;
                i++;
            }
            else if (startGetting && input[i] == '}' && (i + 1 >= input.Length || input[i + 1] != '}'))
            {
                startGetting = false;
                output.Append(HandlingName(keyWordsGetter.ToString()));
                keyWordsGetter.Clear();
            }
            else if (!startGetting)
            {
                output.Append(input[i]);
            }
            if (startGetting)
            {
                keyWordsGetter.Append(input[i]);
            }
        }

        return(output.ToString());

        string HandlingName(string keyWords)
        {
            if (keyWords.StartsWith("[NPC]"))
            {
                keyWords = keyWords.Replace("[NPC]", string.Empty);
                TalkerInformation[] talkers = null;
                if (configs != null)
                {
                    foreach (var array in configs)
                    {
                        if (array.GetType().IsArray)
                        {
                            if (array.GetType().GetElementType() == typeof(TalkerInformation))
                            {
                                talkers = array as TalkerInformation[];
                            }
                        }
                    }
                }
                if (talkers == null)
                {
                    talkers = Resources.LoadAll <TalkerInformation>("Configuration");
                }
                var talker = Array.Find(talkers, x => x.ID == keyWords);
                if (talker)
                {
                    keyWords = talker.Name;
                }
                if (MiscSettings.Instance && MiscSettings.Instance.KeywordColors.Count > 0)
                {
                    return(color ? ZetanUtility.ColorText(keyWords, MiscSettings.Instance.KeywordColors[0]) : keyWords);
                }
                return(color ? ZetanUtility.ColorText(keyWords, Color.green) : keyWords);
            }
            else if (keyWords.StartsWith("[ITEM]"))
            {
                keyWords = keyWords.Replace("[ITEM]", string.Empty);
                ItemBase[] items = null;
                if (configs != null)
                {
                    foreach (var array in configs)
                    {
                        if (array.GetType().IsArray)
                        {
                            if (array.GetType().GetElementType() == typeof(ItemBase))
                            {
                                items = array as ItemBase[];
                            }
                        }
                    }
                }
                if (items == null)
                {
                    items = Resources.LoadAll <ItemBase>("Configuration");
                }
                var item = Array.Find(items, x => x.ID == keyWords);
                if (item)
                {
                    keyWords = item.Name;
                }
                if (MiscSettings.Instance && MiscSettings.Instance.KeywordColors.Count > 1)
                {
                    return(color ? ZetanUtility.ColorText(keyWords, MiscSettings.Instance.KeywordColors[1]) : keyWords);
                }
                return(color ? ZetanUtility.ColorText(keyWords, Color.yellow) : keyWords);
            }
            else if (keyWords.StartsWith("[ENMY]"))
            {
                keyWords = keyWords.Replace("[ENMY]", string.Empty);
                EnemyInformation[] enemies = null;
                if (configs != null)
                {
                    foreach (var array in configs)
                    {
                        if (array.GetType().IsArray)
                        {
                            if (array.GetType().GetElementType() == typeof(EnemyInformation))
                            {
                                enemies = array as EnemyInformation[];
                            }
                        }
                    }
                }
                if (enemies == null)
                {
                    enemies = Resources.LoadAll <EnemyInformation>("Configuration");
                }
                var enemy = Array.Find(enemies, x => x.ID == keyWords);
                if (enemy)
                {
                    keyWords = enemy.Name;
                }
                if (MiscSettings.Instance && MiscSettings.Instance.KeywordColors.Count > 2)
                {
                    return(color ? ZetanUtility.ColorText(keyWords, MiscSettings.Instance.KeywordColors[2]) : keyWords);
                }
                return(color ? ZetanUtility.ColorText(keyWords, Color.red) : keyWords);
            }
            return(keyWords);
        }
    }
示例#8
0
    private string HandlingWords(string words)
    {
        StringBuilder newWords   = new StringBuilder();
        StringBuilder keyWordsSB = new StringBuilder();
        bool startKey            = false;

        for (int i = 0; i < words.Length; i++)
        {
            if (words[i] == '{' && i + 1 < words.Length)
            {
                startKey = true;
                i++;
            }
            else if (words[i] == '}')
            {
                startKey = false;
                newWords.Append(HandlingName(keyWordsSB.ToString()));
                keyWordsSB.Clear();
            }
            else if (!startKey)
            {
                newWords.Append(words[i]);
            }
            if (startKey)
            {
                keyWordsSB.Append(words[i]);
            }
        }

        return(newWords.ToString());

        string HandlingName(string keyWords)
        {
            if (keyWords.StartsWith("[NPC]"))//为了性能,建议多此一举
            {
                keyWords = keyWords.Replace("[NPC]", string.Empty);
                GameManager.TalkerInfos.TryGetValue(keyWords, out var talker);
                if (talker)
                {
                    keyWords = talker.name;
                }
                return(ZetanUtility.ColorText(keyWords, Color.green));
            }
            else if (keyWords.StartsWith("[ITEM]"))
            {
                keyWords = keyWords.Replace("[ITEM]", string.Empty);
                GameManager.Items.TryGetValue(keyWords, out var item);
                if (item)
                {
                    keyWords = item.name;
                }
                return(ZetanUtility.ColorText(keyWords, Color.yellow));
            }
            else if (keyWords.StartsWith("[ENMY]"))
            {
                keyWords = keyWords.Replace("[ENMY]", string.Empty);
                GameManager.EnemyInfos.TryGetValue(keyWords, out var enemy);
                if (enemy)
                {
                    keyWords = enemy.name;
                }
                return(ZetanUtility.ColorText(keyWords, Color.red));
            }
            return(keyWords);
        }
    }