using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using DG.Tweening; namespace MMO { public class MMOTaskList : MMOListView { private Action> mDelWatchRV; [SerializeField] MMODailyTask mDailyTask; [SerializeField] GameObject mGobInviteTask; [SerializeField] GameObject mGobInviteProgress; [SerializeField] GameObject mGobEmptyTip; [SerializeField] Scrollbar mScbProgress; [SerializeField] Text mTxtProgress; public override int Count => mList == null? 0 : mList.Count; private List mList; public void Init(Action> pDelWatchRV) { mDelWatchRV = pDelWatchRV; bool tShowInvite = MMOInnerSDKManager.Instance.GetConfigBool(MMOConstConfig.Instance.InvitableParam); mGobInviteTask.SetActive(tShowInvite); mGobInviteProgress.SetActive(tShowInvite); if (tShowInvite) { RefreshProgress(); MMORespondLogin tLoginData = MMOAPIRequestManager.Instance.GetData(); if (tLoginData != null && !string.IsNullOrEmpty(tLoginData.MyInviteCode)) { MMOAPIRequestManager.Instance.SendRequest(new MMORequestInviteProgress(tLoginData.MyInviteCode), (pRespond) => { MMOAPIRequestManager.Instance.SetData(pRespond); RefreshProgress(); }); } } } public void OpenDaily() { mDailyTask.OpenDaily(); } protected override void BeforeLoad() { base.BeforeLoad(); mList = MMOUserData.Instance.TaskRecordList.FindAll(pItem => pItem.TaskType > 0); } protected override void ConfigCell(MMOTaskCell pCell) { pCell.DelRedeem = Redeem; pCell.DelWatchRV = WatchRV; pCell.ConfigTask(mList[pCell.Index]); } private void RefreshProgress() { MMORespondInviteProgress tProgressData = MMOAPIRequestManager.Instance.GetData(); bool tHasProgress = false; int tTotalCount = 0; if (tProgressData != null && tProgressData.UserList != null && tProgressData.UserList.Length > 0) { tHasProgress = true; string tProgressStr = ""; string tUserMask = ""; tTotalCount = tProgressData.UserList.Length; for (int i = 0; i < tTotalCount; i++) { tUserMask = MMOUtils.GetMaskedID(tProgressData.UserList[i].PlayerID); if (tProgressData.UserList[i].Level == 0) { tProgressStr += string.Format("User {0} has accepted the invitation", tUserMask); } else { tProgressStr += string.Format("User {0} has cleared {1} levels", tUserMask, tProgressData.UserList[i].Level); } if (i < tTotalCount - 1) { tProgressStr += "\n"; } } mTxtProgress.text = tProgressStr; mTxtProgress.rectTransform.sizeDelta = new Vector2(mTxtProgress.rectTransform.sizeDelta.x, 41 * tTotalCount); } mGobEmptyTip.SetActive(!tHasProgress); if (tTotalCount > 6) { mScbProgress.value = 1f; Sequence tScrollSq = DOTween.Sequence(); tScrollSq.Append(DOTween.To(() => mScbProgress.value, (pVal) => mScbProgress.value = pVal, 0, (tTotalCount - 6) * 1.5f).SetLoops(-1, LoopType.Restart).SetEase(Ease.Linear)); tScrollSq.AppendInterval(3); tScrollSq.Play().SetLoops(-1, LoopType.Restart); } else { mScbProgress.value = 1f; } } private void Redeem(int pIndex) { MMOTaskRecord tRecord = mList[pIndex]; if (tRecord.IsFinished) { MMODataTask tTask = MMOTableTask.Instance.GetData(tRecord.TaskID); if (!string.IsNullOrEmpty(tTask.ActionValue)) { MMOInnerSDKManager.Instance.LogRobuxAction(tTask.ActionValue); } if (tRecord.TaskType == MMOTaskType.GetDiamond) { MMOUserData.Instance.Diamond -= tRecord.TargetNum; MMOModule.Instance.UIMgr.GetUI().DiamondBar.PopRes(-tRecord.TargetNum, MMOUserData.Instance.Diamond); } MMOUserData.Instance.FinishTask(tTask.TaskType); MMODataTask tNextTask = MMOTableTask.Instance.GetData(tTask.NextTaskID); if (tNextTask != null) { MMOUserData.Instance.ModifyTaskRecord(tRecord.RecordID, tTask.NextTaskID); if (tTask.GroupID == -1 || tTask.GroupID != tNextTask.GroupID) { if (tNextTask.TaskType == MMOTaskType.Final) { MMOModule.Instance.UIMgr.OpenUI(); } else { MMOUINewTask tUINewTask = MMOModule.Instance.UIMgr.OpenUI(); string tContent = tNextTask.TaskDesc; if (tNextTask.TaskType == MMOTaskType.RiseRank) { tContent = string.Format(tNextTask.TaskDesc, tNextTask.TargetNum - MMOUserData.Instance.GetTaskValue(tRecord.RecordKey)); } tUINewTask.ConfigInfo(tContent, tNextTask.TaskType); } } if (tNextTask.TaskType == MMOTaskType.Final && !string.IsNullOrEmpty(tNextTask.ActionValue)) { MMOInnerSDKManager.Instance.LogRobuxAction(tNextTask.ActionValue); } } else { MMOUserData.Instance.RemoveTaskRecord(tRecord.RecordID); } LoadData(); } else { MMOModule.Instance.ShowTip("Condition not completed"); } } private void WatchRV() { mDelWatchRV?.Invoke(MMOEventValue.RvGetTask ,null); } } }