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(); }
public static string GetColorName(ItemBase item) { if (MiscSettings.Instance && item.Quality > 0) { return(ZetanUtility.ColorText(item.Name, QualityToColor(item.Quality))); } else { return(item.Name); } }
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(); }
/// <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); } }
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); } }
/// <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); } }
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); } }
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); } }