using UnityEngine; using FairyGUI; using System; using System.Collections.Generic; using UI.ActivityAfternoonTea; using UI.Task; using Assets.Game.HotUpdate.Data; using ET; namespace GFGGame { public class ActivityVisitNpcView : BaseWindow { private UI_ActivityVisitNPCUI _ui; private int npcId; private int activityId; private bool redDot = false; private bool canGetReward; private string _currentWords; private bool isNextChat = false; private int indexChat; private GTextField _wordTextField; TypingFadeEffectPro _typingEffect; public override void Dispose() { if (_ui != null) { _ui.Dispose(); _ui = null; } _wordTextField = null; _typingEffect = null; base.Dispose(); } protected override void Init() { base.Init(); } protected override void OnInit() { base.OnInit(); packageName = UI_ActivityVisitNPCUI.PACKAGE_NAME; _ui = UI_ActivityVisitNPCUI.Create(); viewCom = _ui.target; isfullScreen = true; isReturnView = true; _ui.m_taskList.itemRenderer = RenderTaskList; _ui.m_btnBack.onClick.Add(OnClickBtnBack); _ui.m_nextChatBtn.onClick.Add(OnClickNextChat); _ui.m_taskIcon.target.onClick.Add(OnClickRewardTIps); } protected override void AddEventListener() { } protected override void RemoveEventListener() { EventAgent.RemoveEventListener(ConstMessage.NOTICE_BATCH_TASK_STATE_CHANGE, OnTasksChange); } protected override void OnShown() { base.OnShown(); npcId = (int)this.viewData; if (ActivityDataManager.Instance.GetCurOpenActiveByType(ActivityType.NewYearVisit) == 0) { _ui.target.touchable = false; Timers.inst.Add(0.5f, 1, UpdateActivity); } if (!TaskDataManager.Instance.TaskInfosDic.TryGetValue(ActivityVisitCfgArray.Instance.dataArray[npcId].taskIdArr[0], out TaskInfo item)) { TaskSProxy.GetTaskInfos(); if (!isShowing) { return; } if (ActivityDataManager.Instance.GetCurOpenActiveByType(ActivityType.NewYearVisit) != 0) { Timers.inst.Add(2.0f, 1, UpdateView); } } else { UpdateView(); } } protected override void OnHide() { EventAgent.RemoveEventListener(ConstMessage.NOTICE_BATCH_TASK_STATE_CHANGE, OnTasksChange); Timers.inst.Remove(UpdateView); base.OnHide(); } private void UpdateActivity(object param = null) { PromptController.Instance.ShowFloatTextPrompt("拜访活动已结束"); Timers.inst.Remove(UpdateActivity); GameController.GoBackToMainView(); return; } private void UpdateView(object param = null) { var taskCfgs = TaskDataManager.Instance.GetTaskCfgs(ActivityVisitCfgArray.Instance.dataArray[npcId].taskIdArr); _ui.m_taskList.data = taskCfgs; _ui.m_npcIcon.url = ResPathUtil.GetNpcPicSPath(ActivityVisitCfgArray.Instance.dataArray[npcId].picRes); _ui.m_loaBg.url = ResPathUtil.GetSceneBgPath(ActivityVisitCfgArray.Instance.dataArray[npcId].bgRes); _ui.m_taskList.numItems = ActivityVisitCfgArray.Instance.dataArray[npcId].taskIdArr.Length; redDot = true; for (int i = 0; i < taskCfgs.Count; i++) { var taskCfg = taskCfgs[i]; if (TaskDataManager.Instance.GetTaskStateById(taskCfg.id) == 0) { redDot = false; } } GetRewardState(); EventAgent.AddEventListener(ConstMessage.NOTICE_BATCH_TASK_STATE_CHANGE, OnTasksChange); _ui.m_DialogText.m_txtName.text = ActivityVisitCfgArray.Instance.dataArray[npcId].name; _ui.m_DialogText.m_txtContent.text = ""; _wordTextField = null; isNextChat = false; indexChat = 0; _ui.m_DialogText.m_In.Play(()=> { SetTypeWriting(); }); } private void OnClickBtnBack() { ViewManager.GoBackFrom(typeof(ActivityVisitNpcView).FullName); } private async void OnClickRewardTIps() { if (ActivityTeaDataManager.Instance.NpcInfoList[npcId].RewrdStatus == 1) { bool result = await ActivityTeaSProxy.ReqGetNPCVisitReward(activityId, npcId + 1); if (!result) return; bool res = await ActivityTeaSProxy.ReqGetNPCVisitInfo(activityId); if (!res) return; RedDotController.Instance.SetComRedDot(_ui.m_taskIcon.target, false); } else { ViewManager.Show(npcId); } } private void GetRewardState() { foreach (NpcVisitProto t in ActivityTeaDataManager.Instance.NpcInfoList) { if (t.NpcId == npcId + 1) { activityId = t.ActivityId; switch (t.RewrdStatus) { case 0: canGetReward = false; _ui.m_gotReward.visible = false; RedDotController.Instance.SetComRedDot(_ui.m_taskIcon.target, false); break; case 1: canGetReward = true; _ui.m_gotReward.visible = false; RedDotController.Instance.SetComRedDot(_ui.m_taskIcon.target, ActivityTeaDataManager.Instance.NpcInfoList[npcId].RewrdStatus == 1); break; case 2: canGetReward = false; _ui.m_gotReward.visible = true; RedDotController.Instance.SetComRedDot(_ui.m_taskIcon.target, false); break; default: break; } } } } private void RenderTaskList(int index, GObject obj) { UI_ActivityVIsitRewardItemUI item = UI_ActivityVIsitRewardItemUI.Proxy(obj); var tasks = (List)obj.parent.data; var taskCfg = tasks[index]; item.m_c1.selectedIndex = TaskDataManager.Instance.GetTaskStateById(taskCfg.id); RedDotController.Instance.SetComRedDot(item.m_GetRewardBt.target, TaskDataManager.Instance.GetTaskStateById(taskCfg.id) == 1?true:false); if (taskCfg.jumpId == "" && TaskDataManager.Instance.GetTaskStateById(taskCfg.id) == 0) { item.m_c2.selectedIndex = taskCfg.jumpId == "" ? 1 : 0; } else { item.m_c2.selectedIndex = 0; } item.m_txtDesc.text = TaskDataManager.Instance.GetTaskDesc(taskCfg.id); item.m_txtCount.text = $"{TaskDataManager.Instance.GetTaskProgressById(taskCfg.id)}/{taskCfg.GetTargetCount()}"; if (item.m_GetRewardBt.target.data == null) { item.m_GetRewardBt.target.onClick.Add(OnBtnGetClick); } item.m_GetRewardBt.target.data = taskCfg.id; if (item.m_ComeBt.target.data == null) { item.m_ComeBt.target.onClick.Add(OnBtnGoClick); } item.m_ComeBt.target.data = taskCfg; if (item.m_listTaskReward.data == null) { item.m_listTaskReward.itemRenderer = ListTaskRewardItemRender; } item.m_listTaskReward.data = TaskDataManager.Instance.GetReward(taskCfg); item.m_listTaskReward.numItems = TaskDataManager.Instance.GetReward(taskCfg).Length; UI_ActivityVIsitRewardItemUI.ProxyEnd(); } private async void OnBtnGetClick(EventContext context) { if (!(context.sender is GObject btnGet)) return; int id = (int)btnGet.data; var result = await TaskSProxy.GetTaskBonus(id); if (!result) return; bool res = await ActivityTeaSProxy.ReqGetNPCVisitInfo(activityId); if (!res) return; RedDotController.Instance.SetComRedDot(_ui.m_taskIcon.target, ActivityTeaDataManager.Instance.NpcInfoList[npcId].RewrdStatus == 1); _ui.m_taskList.numItems = ActivityVisitCfgArray.Instance.dataArray[npcId].taskIdArr.Length; } private void OnBtnGoClick(EventContext context) { if (!(context.sender is GObject btnGo)) return; var taskCfg = (TaskCfg)btnGo.data; if (!FunctionOpenDataManager.Instance.CheckIsFunOpenById(taskCfg.jumpId)) return; var param = new object[taskCfg.jumpParamArr.Length]; for (var i = 0; i < taskCfg.jumpParamArr.Length; i++) { param[i] = taskCfg.jumpParamArr[i]; } ViewManager.JumpToView(taskCfg.jumpId, param); } private void ListTaskRewardItemRender(int index, GObject obj) { var rewards = (int[][])obj.parent.data; UI_RewardItemUI item = UI_RewardItemUI.Proxy(obj); ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(rewards[index][0]); item.m_rewardIcon.url = ResPathUtil.GetIconPath(itemCfg); item.m_rewardNum.text = rewards[index][1].ToString(); if (item.target.data == null) { item.target.onClick.Add(OnClickVisitRewardItem); } item.target.data = itemCfg.id; UI_RewardItemUI.ProxyEnd(); } private void OnClickVisitRewardItem(EventContext context) { if (!(context.sender is GObject btnVisit)) return; int itemID = (int)btnVisit.data; GoodsItemTipsController.ShowItemTips(itemID); } private void OnTasksChange(EventContext context) { _ui.m_taskList.numItems = ActivityVisitCfgArray.Instance.dataArray[npcId].taskIdArr.Length; } private void SetTypeWriting() { int ind = Math.Min(indexChat, ActivityVisitCfgArray.Instance.dataArray[npcId].taskIdArr.Length - 1); _currentWords = ActivityVisitCfgArray.Instance.dataArray[npcId].chatArr[ind]; _wordTextField = _ui.m_DialogText.m_txtContent; _typingEffect = new TypingFadeEffectPro(_wordTextField); _typingEffect.typeFinishedAction = ShowCurrentWords; _wordTextField.text = _currentWords; _typingEffect.SetSpeed(1.0f); _typingEffect.Start(); } private void ShowCurrentWords() { StopTyping(); _typingEffect?.Cancel(); _wordTextField.text = _currentWords; isNextChat = true; indexChat++; } private void StopTyping() { _typingEffect.Cancel(); } private void OnClickNextChat() { if(isNextChat) { isNextChat = false; if(indexChat == ActivityVisitCfgArray.Instance.dataArray[npcId].chatArr.Length) { indexChat = 0; } SetTypeWriting(); } else { ShowCurrentWords(); isNextChat = true; } } } }