private void OnClickItem(DialogueAnswersConfig.AnswerItem data = null) { m_bStartCountTime = false; m_dataSource.Clear(); Hide <Window_AnswerOption>(); moduleAnswerOption.ClickItem(data); }
public void ClickItem(DialogueAnswersConfig.AnswerItem data) { int itemId = data == null ? 0 : data.id; if (dicClickId.ContainsKey(CurDialogueAnswersData.ID)) { dicClickId[CurDialogueAnswersData.ID] = itemId; } else { dicClickId.Add(CurDialogueAnswersData.ID, itemId); } EnumAnswerType itemType = data == null ? EnumAnswerType.None : data.answerType; if (dicClickType.ContainsKey(CurDialogueAnswersData.ID)) { dicClickType[CurDialogueAnswersData.ID] = (int)itemType; } else { dicClickType.Add(CurDialogueAnswersData.ID, (int)itemType); } //只有可以检查的时候才会记录上一次选择的问题选项 if (CurDialogueAnswersData.needCheckCount == 1) { Logger.LogDetail("Dating:: 在配置表DialogueAnswersConfig id={0} 的配置中,会记录本次选择问题的选项,请知悉", CurDialogueAnswersData.ID); lastSelectAnswerId = data == null ? 0 : data.id; } //把选项发送给服务器 SendSelectAnswer(CurDialogueAnswersData.ID, data == null ? 0 : data.id); //如果图书馆选择检测错误答案,给服务器发送消息 if (data != null && data.answerType == EnumAnswerType.Library_Wrong) { SendLibWrongAnswer(); } //占卜屋占卜 if (data != null && data.answerType == EnumAnswerType.Divination_CrystalBall) { moduleNPCDating.GetDivinationResult(EnumDivinationType.CrystalDevine, OnChooseAnswerCallBack); } else if (data != null && data.answerType == EnumAnswerType.Divination_ImperialGuard) { moduleNPCDating.GetDivinationResult(EnumDivinationType.LotDevine, OnChooseAnswerCallBack); } else { OnChooseAnswerCallBack(); } }
private DialogueAnswersConfig.AnswerItem _GetItemByWeight(List <DialogueAnswersConfig.AnswerItem> items) { if (items.Count == 1) { return(items[0]); } //计算总权重 float sumWeight = 0; for (int i = 0; i < items.Count; i++) { if (items[i].rate == 0) { return(items[i]); } sumWeight += items[i].rate; } //产生随机数 float randomNumber = UnityEngine.Random.Range(0, sumWeight); float d1 = 0; float d2 = 0; DialogueAnswersConfig.AnswerItem item = null; for (int i = 0; i < items.Count; i++) { d2 += items[i].rate; if (i == 0) { d1 = 0; } else { d1 += items[i - 1].rate; } if (randomNumber >= d1 && randomNumber <= d2) { item = items[i]; break; } } return(item); }
private List <DialogueAnswersConfig.AnswerItem> GetFinalAnswerItemsList(List <DialogueAnswersConfig.AnswerItem> allListItems, DialogueAnswersConfig dac) { List <DialogueAnswersConfig.AnswerItem> listFinalAnswerItem = new List <DialogueAnswersConfig.AnswerItem>(); //需要计算权重的Item List <DialogueAnswersConfig.AnswerItem> listNeedCalWeightAnswerItem = new List <DialogueAnswersConfig.AnswerItem>(); for (int i = 0; i < allListItems.Count; i++) { if (allListItems[i].rate == 0) { listFinalAnswerItem.Add(allListItems[i]); } else { listNeedCalWeightAnswerItem.Add(allListItems[i]); } } //如果需要执行出现次数检查,如果上次有出现的选项,这次不再出现 if (dac.needCheckCount == 1) { Logger.LogDetail("Dating:: Answer表 id={0} 中needCheckCount = 1,这里会筛选掉上一次出现的问题选项,请留意", dac.ID); DialogueAnswersConfig.AnswerItem d = listNeedCalWeightAnswerItem.Find((item) => item.id == lastSelectAnswerId); if (d != null) { listNeedCalWeightAnswerItem.Remove(d); lastSelectAnswerId = 0; } } //通过权重筛选出符合数量的item集合 List <DialogueAnswersConfig.AnswerItem> weightItems = GetItemByWeight(listNeedCalWeightAnswerItem, dac); if (weightItems != null && weightItems.Count > 0) { listFinalAnswerItem.AddRange(weightItems); } return(listFinalAnswerItem); }
private List <DialogueAnswersConfig.AnswerItem> GetItemByWeight(List <DialogueAnswersConfig.AnswerItem> items, DialogueAnswersConfig dac) { if (items == null || items.Count <= 0) { return(null); } if (dac.randAnswerCount == 0) { Logger.LogError("Dating:: 在DialogueAnswersConfig id={0}的配置中,需要计算权重的问题数量为0,请检查配置", dac.ID); return(null); } if (dac.randAnswerCount > items.Count) { Logger.LogError("Dating:: 在DialogueAnswersConfig id={0}的配置中,需要计算权重的问题数量超过配置的问题数量,请检查配置", CurDialogueAnswersData.ID); return(null); } List <DialogueAnswersConfig.AnswerItem> sourceItems = items; List <DialogueAnswersConfig.AnswerItem> listItems = new List <DialogueAnswersConfig.AnswerItem>(); DialogueAnswersConfig.AnswerItem lastItem = null; int answerCount = 0;//用于计数 while (answerCount < dac.randAnswerCount) { DialogueAnswersConfig.AnswerItem item = _GetItemByWeight(sourceItems); if (lastItem != null && lastItem.id != item.id) { listItems.Add(item); sourceItems.Remove(item); answerCount++; } lastItem = item; } return(listItems); }
private void OnClickItem(RectTransform node, DialogueAnswersConfig.AnswerItem data) { OnClickItem(data); }
private void SetItemData(RectTransform node, DialogueAnswersConfig.AnswerItem data) { Text t = node.Find("Text").GetComponent <Text>(); Util.SetText(t, data.nameId); }