yyl
2025-05-27 6df9b52e1d68d4bb145fcf6d0520c2fbfed6cef1
Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_scripts
1个文件已修改
10个文件已添加
517 ■■■■■ 已修改文件
Main/Mail/MailGlobalCell.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Mail/MailGlobalCell.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Mail/MailInfoAwardItemCell.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Mail/MailInfoAwardItemCell.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Mail/MailInfoWin.cs 154 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Mail/MailInfoWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Mail/MailPersonalCell.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Mail/MailPersonalCell.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Mail/MailWin.cs 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Mail/MailWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Manager/GameSystemManager/MailManager.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Mail/MailGlobalCell.cs
New file
@@ -0,0 +1,50 @@
using UnityEngine;
namespace vnxbqy.UI
{
    public class MailGlobalCell : CellView
    {
        [SerializeField] ButtonEx btnMail;
        [SerializeField] ImageEx imgState;
        [SerializeField] ImageEx imgRed;
        [SerializeField] TextEx txtTitle;
        [SerializeField] TextEx txtDate;
        MailManager model { get { return MailManager.Instance; } }
        string uuid = string.Empty;
        public void Display(int index, CellView cellView)
        {
            MailCategory mailCategory = (MailCategory)cellView.info.Value.infoInt1;
            var list = model.GetSortMailScrList(mailCategory);
            if (list == null || index < 0 || index >= list.Count)
                return;
            uuid = list[index];
            if (!model.TryGetMailData(uuid, out var mailData) || mailData == null)
                return;
            imgRed.SetActive(mailData.MailState == 1);
            txtTitle.text = mailData.Title;
            imgState.SetSprite(mailData.MailState == 2 || mailData.MailState == 3 ? "MailRead" : "MailNoRead");
            if (mailData.Items != null)
            {
                txtDate.text = model.FormatCreateMailTime(mailData.CreateDateTime);
            }
            else
            {
                int expiryDay = model.GetMailExpiryDays(mailData.CreateDateTime, mailData.LimitDays);
                txtDate.text = expiryDay > 0 ? Language.Get("Mail07", expiryDay) : model.FormatCreateMailTime(mailData.CreateDateTime);
            }
            btnMail.SetListener(OnClickButtonMail);
        }
        private void OnClickButtonMail()
        {
            model.nowUuid = uuid;
            if (!model.TryGetMailData(uuid, out var mailData) || mailData == null)
                return;
            if (mailData.MailState == 1)
            {
                model.ReadMail(uuid);
            }
            UIManager.Instance.OpenWindow<MailInfoWin>();
        }
    }
}
Main/Mail/MailGlobalCell.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: baaef1e2dac4e30499722be1d4c60bb4
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/Mail/MailInfoAwardItemCell.cs
New file
@@ -0,0 +1,26 @@
using UnityEngine;
namespace vnxbqy.UI
{
    public class MailInfoAwardItemCell : CellView
    {
        [SerializeField] ItemCell itemCell;
        [SerializeField] ImageEx imgHave;
        MailManager model { get { return MailManager.Instance; } }
        public void Display(int index, CellView cellView)
        {
            int mailState = cellView.info.Value.infoInt1;//0-未知;1-未读;2-已读;3-已领;
            if (!model.TryGetMailData(model.nowUuid, out MailData mailData) || mailData == null || mailData.Items == null)
                return;
            if (index < 0 || index >= mailData.Items.Count)
                return;
            MailItemData data = mailData.Items[index];
            itemCell.Init(new ItemCellModel((int)data.ItemID, true, (ulong)data.Count));
            itemCell.button.SetListener(() => ItemTipUtility.Show((int)data.ItemID));
            imgHave.SetActive(mailState == 3);
            MailCategory mailCategory = (MailCategory)cellView.info.Value.infoInt1;
            var list = model.GetSortMailScrList(mailCategory);
        }
    }
}
Main/Mail/MailInfoAwardItemCell.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 2b475cf66abe5c94fb8aa8664ef46141
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/Mail/MailInfoWin.cs
New file
@@ -0,0 +1,154 @@
using UnityEngine;
namespace vnxbqy.UI
{
    public class MailInfoWin : UIBase
    {
        [SerializeField] TextEx txtDate;
        [SerializeField] TextEx txtTitle;
        [SerializeField] Transform transNoAward;
        [SerializeField] RichText txtNoAwardInfo;
        [SerializeField] Transform transAward;
        [SerializeField] RichText txtAwardInfo;
        [SerializeField] ScrollerController scrAwardItem;
        [SerializeField] TextEx txtExpiryDate;
        [SerializeField] ButtonEx btnHave;
        [SerializeField] ButtonEx btnDelete;
        MailData nowMailData;
        bool isHasAward = false;
        MailManager model { get { return MailManager.Instance; } }
        protected override void InitComponent()
        {
            base.InitComponent();
            btnHave.SetListener(OnClickHaveButton);
            btnDelete.SetListener(OnClickDeleteButton);
        }
        protected override void OnPreOpen()
        {
            scrAwardItem.OnRefreshCell += OnRefreshLowRewardCell;
            model.OnUpdateMailListEvent += OnUpdateMailListEvent;
            model.OnUpdateMailStateChangeEvent += OnUpdateMailStateChangeEvent;
        }
        protected override void OnOpen()
        {
            UpdateDataInfo();
            Display();
            CreateScrAward();
        }
        protected override void OnPreClose()
        {
            scrAwardItem.OnRefreshCell -= OnRefreshLowRewardCell;
            model.OnUpdateMailListEvent -= OnUpdateMailListEvent;
            model.OnUpdateMailStateChangeEvent -= OnUpdateMailStateChangeEvent;
        }
        private void OnClickHaveButton()
        {
            if (model.nowUuid == null || model.nowUuid == string.Empty)
            {
                Debug.Log("当前查看的邮件没有UUID");
                return;
            }
            model.ClaimMail(model.nowUuid);
        }
        private void OnClickDeleteButton()
        {
            if (model.nowUuid == null || model.nowUuid == string.Empty)
            {
                Debug.Log("当前查看的邮件没有UUID");
                return;
            }
            model.DeleteMail(model.nowUuid);
            UIManager.Instance.CloseWindow<MailInfoWin>();
            //邮件删除成功
            SysNotifyMgr.Instance.ShowTip("Mail01");
        }
        private void OnUpdateMailStateChangeEvent()
        {
            UpdateDataInfo();
            Display();
            CreateScrAward();
        }
        private void OnUpdateMailListEvent()
        {
            UpdateDataInfo();
            Display();
            CreateScrAward();
        }
        private void OnRefreshLowRewardCell(ScrollerDataType type, CellView cell)
        {
            var _cell = cell.GetComponent<MailInfoAwardItemCell>();
            _cell?.Display(cell.index, cell);
        }
        private void CreateScrAward()
        {
            scrAwardItem.Refresh();
            if (isHasAward)
            {
                for (int i = 0; i < nowMailData.Items.Count; i++)
                {
                    CellInfo cellInfo = new CellInfo();
                    cellInfo.infoInt1 = nowMailData.MailState;
                    scrAwardItem.AddCell(ScrollerDataType.Header, i);
                }
            }
            scrAwardItem.Restart();
        }
        private void Display()
        {
            if (nowMailData == null)
                return;
            transNoAward.SetActive(!isHasAward);
            transAward.SetActive(isHasAward);
            txtDate.text = model.FormatCreateMailTime(nowMailData.CreateDateTime);
            if (nowMailData.IsTemplateMail())
            {
                string key = nowMailData.GetTemplateKey();
                if (MailConfig.HasKey(key))
                {
                    MailConfig config = MailConfig.Get(key);
                    var templateParams = nowMailData.GetTemplateParams();
                    string content = string.Format(config.Content, templateParams.ToArray());
                    txtTitle.text = config.Title;
                    txtNoAwardInfo.text = content;
                    txtAwardInfo.text = content;
                }
                else
                {
                    txtTitle.text = nowMailData.Title;
                    txtNoAwardInfo.text = nowMailData.Text;
                    txtAwardInfo.text = nowMailData.Text;
                }
            }
            else
            {
                txtTitle.text = nowMailData.Title;
                txtNoAwardInfo.text = nowMailData.Text;
                txtAwardInfo.text = nowMailData.Text;
            }
            int expiryDays = model.GetMailExpiryDays(nowMailData.CreateDateTime, nowMailData.LimitDays);
            txtExpiryDate.text = expiryDays > 0 ? Language.Get("Mail07", expiryDays) : string.Empty;
        }
        private void UpdateDataInfo()
        {
            if (!model.TryGetMailData(model.nowUuid, out nowMailData))
            {
                UIManager.Instance.CloseWindow<MailInfoWin>();
            }
            isHasAward = nowMailData != null && nowMailData.Items != null;
        }
    }
}
Main/Mail/MailInfoWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 67c6caf988a88c548b2eaeb8bb069eca
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/Mail/MailPersonalCell.cs
New file
@@ -0,0 +1,50 @@
using UnityEngine;
namespace vnxbqy.UI
{
    public class MailPersonalCell : CellView
    {
        [SerializeField] ButtonEx btnMail;
        [SerializeField] ImageEx imgState;
        [SerializeField] ImageEx imgRed;
        [SerializeField] TextEx txtTitle;
        [SerializeField] TextEx txtDate;
        MailManager model { get { return MailManager.Instance; } }
        string uuid = string.Empty;
        public void Display(int index, CellView cellView)
        {
            MailCategory mailCategory = (MailCategory)cellView.info.Value.infoInt1;
            var list = model.GetSortMailScrList(mailCategory);
            if (list == null || index < 0 || index >= list.Count)
                return;
            uuid = list[index];
            if (!model.TryGetMailData(uuid, out var mailData) || mailData == null)
                return;
            imgRed.SetActive(mailData.MailState == 1);
            txtTitle.text = mailData.Title;
            imgState.SetSprite(mailData.MailState == 2 || mailData.MailState == 3 ? "MailRead" : "MailNoRead");
            if (mailData.Items != null)
            {
                txtDate.text = model.FormatCreateMailTime(mailData.CreateDateTime);
            }
            else
            {
                int expiryDay = model.GetMailExpiryDays(mailData.CreateDateTime, mailData.LimitDays);
                txtDate.text = expiryDay > 0 ? Language.Get("Mail07", expiryDay) : model.FormatCreateMailTime(mailData.CreateDateTime);
            }
            btnMail.SetListener(OnClickButtonMail);
        }
        private void OnClickButtonMail()
        {
            model.nowUuid = uuid;
            if (!model.TryGetMailData(uuid, out var mailData) || mailData == null)
                return;
            if (mailData.MailState == 1)
            {
                model.ReadMail(uuid);
            }
            UIManager.Instance.OpenWindow<MailInfoWin>();
        }
    }
}
Main/Mail/MailPersonalCell.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 9b2f93157b0f88549b156091e0a828d8
timeCreated: 1508570733
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/Mail/MailWin.cs
New file
@@ -0,0 +1,173 @@
using System;
using UnityEngine;
namespace vnxbqy.UI
{
    public class MailWin : UIBase
    {
        [SerializeField] Transform transPersonal;
        [SerializeField] Transform transGlobal;
        [SerializeField] ScrollerController scrPersonal;
        [SerializeField] ScrollerController scrGlobal;
        [SerializeField] ButtonEx btnDeleteRead;
        [SerializeField] ButtonEx btnClaimAll;
        [SerializeField] ToggleEx togTab0;
        [SerializeField] RedpointBehaviour rpTab0;
        [SerializeField] ToggleEx togTab1;
        [SerializeField] RedpointBehaviour rpTab1;
        [SerializeField] Transform transNoMail;
        MailManager model { get { return MailManager.Instance; } }
        protected override void InitComponent()
        {
            base.InitComponent();
            btnDeleteRead.SetListener(OnDeleteRead);
            btnClaimAll.SetListener(OnClaimAll);
            togTab0.SetListener(OnTab0);
            togTab1.SetListener(OnTab1);
        }
        protected override void OnPreOpen()
        {
            model.OnUpdateMailListEvent += OnUpdateMailListEvent;
            model.OnUpdateMailStateChangeEvent += OnUpdateMailStateChangeEvent;
            scrPersonal.OnRefreshCell += OnRefreshPersonalCell;
            scrGlobal.OnRefreshCell += OnRefreshGlobalCell;
            rpTab0.redpointId = model.GetTabRedpointId(MailCategory.Personal);
            rpTab1.redpointId = model.GetTabRedpointId(MailCategory.Global);
            transNoMail.SetActive(false);
        }
        protected override void OnPreClose()
        {
            model.OnUpdateMailListEvent -= OnUpdateMailListEvent;
            model.OnUpdateMailStateChangeEvent -= OnUpdateMailStateChangeEvent;
            scrPersonal.OnRefreshCell -= OnRefreshPersonalCell;
            scrGlobal.OnRefreshCell -= OnRefreshGlobalCell;
        }
        private void OnTab0(bool value)
        {
            if (value)
            {
                transPersonal.SetActive(true);
                transGlobal.SetActive(false);
                model.nowMailCategory = MailCategory.Personal;
                CreatePersonalScr(model.nowMailCategory);
            }
        }
        private void OnTab1(bool value)
        {
            if (value)
            {
                transPersonal.SetActive(false);
                transGlobal.SetActive(true);
                model.nowMailCategory = MailCategory.Global;
                CreateGlobalScr(model.nowMailCategory);
            }
        }
        protected override void OnOpen()
        {
            togTab0.isOn = true;
            togTab1.isOn = false;
            model.nowMailCategory = MailCategory.Personal;
            CreatePersonalScr(model.nowMailCategory);
        }
        private void OnRefreshPersonalCell(ScrollerDataType type, CellView cell)
        {
            var _cell = cell.GetComponent<MailPersonalCell>();
            _cell?.Display(cell.index, cell);
        }
        private void OnRefreshGlobalCell(ScrollerDataType type, CellView cell)
        {
            var _cell = cell.GetComponent<MailGlobalCell>();
            _cell?.Display(cell.index, cell);
        }
        private void OnDeleteRead()
        {
            ConfirmCancel.ShowPopConfirm(
                Language.Get("Mail101"),
                Language.Get("Mail10"),
                (bool isOk) =>
                {
                    if (isOk)
                    {
                        model.DeleteMail();
                        //邮件删除成功
                        SysNotifyMgr.Instance.ShowTip("Mail01");
                    }
                });
        }
        private void OnClaimAll()
        {
            if (!model.IsCanHaveMail())
            {
                SysNotifyMgr.Instance.ShowTip("Mail02");
                return;
            }
            model.ClaimMail();
        }
        public void CreatePersonalScr(MailCategory mailCategory)
        {
            scrPersonal.Refresh();
            var list = model.GetSortMailScrList(mailCategory);
            if (list != null)
            {
                for (int i = 0; i < list.Count; i++)
                {
                    CellInfo cellInfo = new CellInfo();
                    cellInfo.infoInt1 = (int)mailCategory;
                    scrPersonal.AddCell(ScrollerDataType.Header, i, cellInfo);
                }
            }
            scrPersonal.Restart();
        }
        public void CreateGlobalScr(MailCategory mailCategory)
        {
            scrGlobal.Refresh();
            var list = model.GetSortMailScrList(mailCategory);
            if (list != null)
            {
                for (int i = 0; i < list.Count; i++)
                {
                    CellInfo cellInfo = new CellInfo();
                    cellInfo.infoInt1 = (int)mailCategory;
                    scrGlobal.AddCell(ScrollerDataType.Header, i, cellInfo);
                }
            }
            scrGlobal.Restart();
        }
        private void OnUpdateMailStateChangeEvent()
        {
            RefreshScr();
        }
        private void OnUpdateMailListEvent()
        {
            RefreshScr();
        }
        private void RefreshScr()
        {
            var list = model.GetSortMailScrList(model.nowMailCategory);
            if (list.IsNullOrEmpty())
            {
                transNoMail.SetActive(true);
            }
            else
            {
                transNoMail.SetActive(false);
                scrPersonal.m_Scorller.RefreshActiveCellViews();
                scrGlobal.m_Scorller.RefreshActiveCellViews();
            }
        }
    }
}
Main/Mail/MailWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 19dce65856f34284e9a1e1a192e3e348
timeCreated: 1501491107
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/Manager/GameSystemManager/MailManager.cs
@@ -241,10 +241,13 @@
            pack.ReqType = ReqType;
            GameNetSystem.Instance.SendInfo(pack);
        }
        //没有一个可领取的邮件
        //没有一个可领取的个人邮件
        public bool IsCanHaveMail()
        {
            return mailDataDict.Values.Any(mail =>
            var personalMails = GetMailList(MailCategory.Personal);
            return personalMails.Any(guid =>
                mailDataDict.TryGetValue(guid, out var mail) &&
                mail.MailState != 3 &&
                mail.Items != null &&
                mail.Items.Count > 0