//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Friday, March 16, 2018 //-------------------------------------------------------- using UnityEngine; using System.Collections; using UnityEngine.UI; using System; using TableConfig; using System.Collections.Generic; //任务面板的支线任务 namespace Snxxz.UI { public class SideMission : MonoBehaviour { [SerializeField] ScrollerController _TaskRamusList; //右侧面板 [SerializeField] Text _Text_TaskName;//任务名 [SerializeField] RichText _Text_TaskDescribe;//任务描述 [SerializeField] RichText _Text_TaskTarget;//任务目标 [SerializeField] Transform _Grid;//任务奖励生成的节点 [SerializeField] Button _Btn_Forward;//支线前往按钮 [SerializeField] Text _Text_Forward;//按钮文字 PlayerTaskDatas m_TaskModel; PlayerTaskDatas taskmodel { get { return m_TaskModel ?? (m_TaskModel = ModelCenter.Instance.GetModel()); } } ItemTipsModel _itemTipsModel; ItemTipsModel itemTipsModel { get { return _itemTipsModel ?? (_itemTipsModel = ModelCenter.Instance.GetModel()); } } PlayerPackModel _playerPack; PlayerPackModel playerPack { get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel()); } } PlayerMainDate m_MainModel; PlayerMainDate mainModel { get { return m_MainModel ?? (m_MainModel = ModelCenter.Instance.GetModel()); } } private List rewardList = new List(); private int TaskIdNow = 0; private void Awake() { } private void Start() { _Btn_Forward.onClick.AddListener(ForwardButton); } private void OnEnable() { TaskIdNow = 0; _TaskRamusList.OnRefreshCell += OnRefreshGridCell; playerPack.RefreshItemCountAct += RefreshItemCountAct; playerPack.ItemCntReduceAct += ItemCntReduceAct; OnCreateGridLineCell(_TaskRamusList); } private void OnDisable() { _TaskRamusList.OnRefreshCell -= OnRefreshGridCell; playerPack.RefreshItemCountAct -= RefreshItemCountAct; playerPack.ItemCntReduceAct -= ItemCntReduceAct; } private void ItemCntReduceAct(PackType arg1, int arg2, int arg3) { if (arg1 == PackType.rptItem && arg3 == mainModel.ItemID) { foreach (var key in taskmodel.SideQuestsDic.Keys) { if (mainModel.TaskId_Skill1.Contains(key)) { _TaskRamusList.m_Scorller.RefreshActiveCellViews();//刷新当前可见 } } } } private void RefreshItemCountAct(PackType arg1, int arg2, int arg3) { if (arg1 == PackType.rptItem && arg3 == mainModel.ItemID) { foreach (var key in taskmodel.SideQuestsDic.Keys) { if (mainModel.TaskId_Skill1.Contains(key)) { _TaskRamusList.m_Scorller.RefreshActiveCellViews();//刷新当前可见 } } } } private void ForwardButton() { if (mainModel.TaskId_Skill1.Contains(TaskIdNow)) { int itemNumber = playerPack.GetItemCountByID(PackType.rptItem, mainModel.ItemID);//获取特殊物品 if (itemNumber >= mainModel.ItemNumber) { taskmodel.CompletionOfTask(TaskIdNow); WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.SkillFunc2); } else { int Gold = (int)UIHelper.GetMoneyCnt(1);//仙玉 int GoldPaper = (int)UIHelper.GetMoneyCnt(2);//绑玉 string strNull = string.Empty; int needNumber = (mainModel.ItemNumber - itemNumber) * mainModel.UnitPrice;//所需金额 if (GoldPaper >= needNumber) { strNull = string.Format(Language.Get("PassiveSkillTask3"), needNumber); } else { strNull = string.Format(Language.Get("PassiveSkillTask4"), needNumber, GoldPaper, needNumber- GoldPaper); } ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), strNull, (bool isOk) => { if (isOk) { if (Gold + GoldPaper >= needNumber) { taskmodel.CompletionOfTask(TaskIdNow); WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.SkillFunc2); } else { if (VersionConfig.Get().isBanShu) { SysNotifyMgr.Instance.ShowTip("GoldErr"); return; } WindowCenter.Instance.Open(); } } }); } return; } if ((int)taskmodel.GetTaskStatus(TaskIdNow) == 3) { taskmodel.CompletionOfTask(TaskIdNow); if (mainModel.TaskId_Skill.Contains(TaskIdNow)) { WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.SkillFunc2); } } else { _Text_TaskTarget.ExcuteHref(); } WindowCenter.Instance.CloseImmediately(); WindowCenter.Instance.Open(); } void OnCreateGridLineCell(ScrollerController gridCtrl)//任务预制体创建 { gridCtrl.Refresh(); foreach (var key in taskmodel.SideQuestsDic.Keys) { if (TaskIdNow == 0) { TaskIdNow = key; } gridCtrl.AddCell(ScrollerDataType.Header, key); } gridCtrl.Restart(); } private void OnRefreshGridCell(ScrollerDataType type, CellView cell) { int TaskId = cell.index; SideMissionTitleBtton sideMissionTitleBtton = cell.GetComponent(); if (taskmodel.SideQuestsDic.ContainsKey(TaskId)) { if (TaskId == TaskIdNow) { sideMissionTitleBtton.PitchOnImage.SetActive(true); Information(TaskId); } else { sideMissionTitleBtton.PitchOnImage.SetActive(false); } var taskname = taskmodel.SideQuestsDic[TaskId].Name; if (Config.Instance.Get(taskname) == null) { DebugEx.LogError("TASKINFO任务表格没有获取到该任务名称" + taskname); return; } sideMissionTitleBtton.TitleName.text = Config.Instance.Get(taskname).show_writing;//任务名 if (!taskmodel.SideQuestsDic.ContainsKey(TaskId)) { return; } sideMissionTitleBtton.Text_RamusState.text = GegionalTaskStatus(taskmodel.SideQuestsDic[TaskId].MissionState); sideMissionTitleBtton.SideMissionTitleBtton1.RemoveAllListeners(); sideMissionTitleBtton.SideMissionTitleBtton1.AddListener(() => { if (TaskId != TaskIdNow) { TaskIdNow = TaskId; _TaskRamusList.m_Scorller.RefreshActiveCellViews();//刷新当前可见 } }); } } void Information(int taskID) { if (!taskmodel.SideQuestsDic.ContainsKey(taskID)) { return; } _Text_TaskName.text = Config.Instance.Get(taskmodel.SideQuestsDic[taskID].Name).show_writing;//任务名 _Text_TaskDescribe.text = Config.Instance.Get(taskmodel.SideQuestsDic[taskID].Desclist).show_writing;//任务描述 string strINfor = taskmodel.SideQuestsDic[taskID].InforList; string str = string.Empty; if (mainModel.TaskId_Skill1.Contains(taskID)) { int itemNumber = playerPack.GetItemCountByID(PackType.rptItem, mainModel.ItemID);//获取特殊物品 if (itemNumber >= mainModel.ItemNumber) { string Str_A = string.Format(Language.Get("PassiveSkillTask1"), mainModel.ItemID, mainModel.ItemNumber); str = Str_A; } else { string Str_A = string.Format(Language.Get("PassiveSkillTask1"), mainModel.ItemID, itemNumber); str = Str_A; } } else { str = Config.Instance.Get(strINfor).show_writing; } str = WordAnalysis.Color_Start_Regex.Replace(str, string.Empty); str = WordAnalysis.Color_End_Regex.Replace(str, string.Empty); _Text_TaskTarget.text = str;//任务目标 if ((int)taskmodel.GetTaskStatus(TaskIdNow) == 3 || mainModel.TaskId_Skill1.Contains(taskID))//能够进行立即完成的支线任务 { _Text_Forward.text = string.Format(Language.Get("FinishAtOnce_Z")); } else { _Text_Forward.text = TaskStatus(taskmodel.SideQuestsDic[taskID].MissionState); } if (taskmodel._DicTaskInformation.ContainsKey(taskID)) { _Text_TaskTarget.SetReplaceInfo(taskmodel._DicTaskInformation[taskID]); } if (taskmodel.SideQuestsDic[taskID].RewardList == null) { if (_Grid.childCount != 0) { for (int i = 0; i < _Grid.childCount; i++) { DestroyObject(_Grid.GetChild(i).gameObject); } } DebugEx.Log("没有任务奖励"); return; } string _RewardStr = Config.Instance.Get(taskmodel.SideQuestsDic[taskID].RewardList).show_writing; RewardAnalysis.Inst.GetReward(_RewardStr, ref rewardList); RewardInformationDisplay(rewardList); } void RewardInformationDisplay(List rewardList)//奖励信息 { if (_Grid.childCount != 0) { for (int i = 0; i < _Grid.childCount; i++) { DestroyObject(_Grid.GetChild(i).gameObject); } } if (rewardList.Count == 0) return; for (int i = 0; i < rewardList.Count; i++) { GameObject go = GameObject.Instantiate(UILoader.LoadPrefab("ItemCell")); ItemCell itemcell = go.GetComponent(); go.transform.SetParent(_Grid); go.transform.localScale = Vector3.one; Vector3 pos = go.transform.localPosition; go.transform.localPosition = pos.SetZ(0); ItemCellModel cellModel = new ItemCellModel(rewardList[i].itemCfg.ID, true, (ulong)rewardList[i].num); itemcell.Init(cellModel); itemcell.cellBtn.RemoveAllListeners(); int tab = i; itemcell.cellBtn.AddListener(() => { ItemAttrData attrData = new ItemAttrData(rewardList[tab].itemCfg.ID, true, (ulong)rewardList[tab].num); itemTipsModel.SetItemTipsModel(attrData); }); } } string TaskStatus(int _index)//获取支线任务状态 { _Btn_Forward.gameObject.SetActive(true); switch (_index) { case 0: _Btn_Forward.gameObject.SetActive(false); return Language.Get("Z1075"); case 1: return Language.Get("Z1074"); case 2: return Language.Get("Z1076"); } return string.Empty; } string GegionalTaskStatus(int _index)//任务状态 { switch (_index) { case 0: return Language.Get("Z1072"); case 1: return Language.Get("Z1071"); case 2: return Language.Get("Z1073"); } return string.Empty; } } }