少年修仙传客户端代码仓库
client_linchunjie
2018-10-26 c7b8b789a4ef38bbd7bdbfd86b0aa73bf9334b1d
4218【1.2】仙盟宴会传功
4个文件已修改
2个文件已添加
376 ■■■■■ 已修改文件
Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0411_tagPlayerSit.cs 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/DungeonData.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/DungeonFairyFeastHintWin.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/FairyFeastModel.cs 283 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairyAu/FairyFeastModel.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/WindowBase/ModelCenter.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0411_tagPlayerSit.cs
@@ -6,21 +6,32 @@
public class DTC0411_tagPlayerSit : DtcBasic {
public class DTC0411_tagPlayerSit : DtcBasic
{
    RealmModel m_RealmModel;
    RealmModel realmModel {
        get {
    RealmModel realmModel
    {
        get
        {
            return m_RealmModel ?? (m_RealmModel = ModelCenter.Instance.GetModel<RealmModel>());
        }
    }
    public override void Done(GameNetPackBasic vNetPack) {
    FairyFeastModel fairyFeastModel
    {
        get { return ModelCenter.Instance.GetModel<FairyFeastModel>(); }
    }
    public override void Done(GameNetPackBasic vNetPack)
    {
        base.Done(vNetPack);
        H0411_tagPlayerSit vNetData = vNetPack as H0411_tagPlayerSit;
        if (vNetData != null) {
        if (vNetData != null)
        {
            realmModel.OnRefreshData(vNetData);
            fairyFeastModel.UpdateTransmitState(vNetData);
        }
    }
System/Dungeon/DungeonData.cs
@@ -108,6 +108,7 @@
        public FairyFeastTop familyPartyTop;
        public int topPlayerID;
        public int enemyID;
        public int hasSit;
        public long totalExp
        {
System/Dungeon/DungeonFairyFeastHintWin.cs
@@ -23,12 +23,20 @@
        [SerializeField] FairyFeastRankBehaviour[] m_RankBehaviours;
        [SerializeField] FairyFeastRankBehaviour m_TopRank;
        [SerializeField] DungeonMultipleTaskWin.SelectEffect m_SelectEffect;
        [SerializeField] Button m_Transmit;
        [SerializeField] SmoothSlider m_TransmitSlider;
        [SerializeField] Text m_TransmitProgress;
        DungeonModel model { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        FairyFeastModel fairyFeastModel { get { return ModelCenter.Instance.GetModel<FairyFeastModel>(); } }
        int currentSelect = 0;
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_FairyFeast.onClick.AddListener(() =>
            {
@@ -38,17 +46,19 @@
            {
                Select(1);
            });
        }
        protected override void AddListeners()
        {
            m_Transmit.onClick.AddListener(Transmit);
        }
        protected override void OnPreOpen()
        {
            Select(0);
            m_TransmitSlider.ResetValue(0);
            model.updateMissionEvent += UpdateMissionEvent;
            fairyFeastModel.selectTransmit += SelectTransmit;
            fairyFeastModel.transmitStateUpdate += TransmitStateUpdate;
            SelectTransmit();
        }
        protected override void OnAfterOpen()
        {
@@ -57,10 +67,34 @@
        protected override void OnPreClose()
        {
            model.updateMissionEvent -= UpdateMissionEvent;
            fairyFeastModel.selectTransmit -= SelectTransmit;
            fairyFeastModel.transmitStateUpdate -= TransmitStateUpdate;
        }
        protected override void OnAfterClose()
        {
        }
        protected override void LateUpdate()
        {
            if (fairyFeastModel.transmiting)
            {
                if (!m_TransmitSlider.gameObject.activeSelf)
                {
                    m_TransmitSlider.gameObject.SetActive(true);
                }
                var surplusTime = (fairyFeastModel.transmitCompleteTime - DateTime.Now).TotalSeconds;
                var progress = Mathf.Clamp01(1 - (float)surplusTime / fairyFeastModel.transmitCostSeconds);
                m_TransmitSlider.value = progress;
                m_TransmitProgress.text = StringUtility.Contact((int)(progress * 100), "%");
            }
            else
            {
                if (m_TransmitSlider.gameObject.activeSelf)
                {
                    m_TransmitSlider.gameObject.SetActive(false);
                }
            }
        }
        #endregion
@@ -128,6 +162,22 @@
        {
            return x.rank.CompareTo(y.rank);
        }
        private void SelectTransmit()
        {
            m_Transmit.gameObject.SetActive(fairyFeastModel.selectPlayer != 0 && fairyFeastModel.allowTransmit
                && !fairyFeastModel.transmiting);
        }
        private void Transmit()
        {
            fairyFeastModel.Transmit();
        }
        private void TransmitStateUpdate()
        {
            SelectTransmit();
        }
    }
}
System/FairyAu/FairyFeastModel.cs
New file
@@ -0,0 +1,283 @@
using System;
using System.Collections;
using System.Collections.Generic;
using TableConfig;
using UnityEngine;
namespace Snxxz.UI
{
    public class FairyFeastModel : Model, IBeforePlayerDataInitialize
    {
        public uint selectPlayer { get; private set; }
        public bool allowTransmit { get; private set; }
        public event Action selectTransmit;
        public event Action transmitStateUpdate;
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        public override void Init()
        {
            ParseConfig();
            GA_Player.s_OnSelected += OnSelected;
            GlobalTimeEvent.Instance.secondEvent += SecondEvent;
            StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
            dungeonModel.updateMissionEvent += UpdateMissionEvent;
            PrepareHandler.Instance.OnPrepareEndSuccess += OnPrepareEndSuccess;
        }
        public override void UnInit()
        {
            GA_Player.s_OnSelected -= OnSelected;
            GlobalTimeEvent.Instance.secondEvent -= SecondEvent;
            StageManager.Instance.onStageLoadFinish -= OnStageLoadFinish;
            dungeonModel.updateMissionEvent -= UpdateMissionEvent;
            PrepareHandler.Instance.OnPrepareEndSuccess -= OnPrepareEndSuccess;
        }
        public void OnBeforePlayerDataInitialize()
        {
            transmitCompleteTime = TimeUtility.ClientOriginalTime;
            if (transmitClock != null)
            {
                transmitClock.Stop();
                transmitClock = null;
            }
        }
        private void OnStageLoadFinish()
        {
            selectPlayer = 0;
            if (transmitClock != null)
            {
                transmitClock.Stop();
                transmitClock = null;
            }
        }
        private void SecondEvent()
        {
            if (selectPlayer != 0)
            {
                var actor = GAMgr.Instance.GetBySID(selectPlayer);
                bool update = false;
                if (actor == null || !(actor is GA_Player))
                {
                    selectPlayer = 0;
                    update = true;
                }
                else
                {
                    var player = actor as GA_Player;
                    var hero = PlayerDatas.Instance.hero;
                    if (SatisfyTransmitState())
                    {
                        var distance = MathUtility.CalDistance(player.Pos, hero.Pos);
                        if (allowTransmit != (distance <= transmitDistance))
                        {
                            allowTransmit = distance <= transmitDistance;
                            update = true;
                        }
                    }
                    else
                    {
                        if (allowTransmit)
                        {
                            allowTransmit = false;
                            update = true;
                        }
                    }
                }
                if (update && selectTransmit != null)
                {
                    selectTransmit();
                }
            }
        }
        float transmitDistance = 2f;
        public int transmitCostSeconds { get; private set; }
        void ParseConfig()
        {
            var config = Config.Instance.Get<FuncConfigConfig>("FairyFeastTransmit");
            transmitCostSeconds = 15;
            if (config != null)
            {
                transmitDistance = float.Parse(config.Numerical1);
                transmitCostSeconds = int.Parse(config.Numerical2);
            }
        }
        bool SatisfyTransmitState()
        {
            var hero = PlayerDatas.Instance.hero;
            if (hero == null || hero.IsCollecting()
                || hero.IsCollect() || hero.IsDaZuo())
            {
                return false;
            }
            return true;
        }
        private void OnSelected(uint serverInstId, bool select)
        {
            var mapId = PlayerDatas.Instance.baseData.MapID;
            if (mapId != 31230)
            {
                return;
            }
            if (transmiting)
            {
                return;
            }
            var mission = dungeonModel.mission;
            if (mission.hasSit == 1)
            {
                return;
            }
            selectPlayer = 0;
            allowTransmit = false;
            if (select)
            {
                var actor = GAMgr.Instance.GetBySID(serverInstId);
                if (actor != null && actor is GA_Player)
                {
                    var player = actor as GA_Player;
                    var hero = PlayerDatas.Instance.hero;
                    var distance = MathUtility.CalDistance(player.Pos, hero.Pos);
                    if (SatisfyTransmitState())
                    {
                        allowTransmit = distance <= transmitDistance;
                    }
                    selectPlayer = serverInstId;
                }
            }
            if (selectTransmit != null)
            {
                selectTransmit();
            }
        }
        /// <summary>
        /// 仙盟宴会采集结束
        /// </summary>
        private void OnPrepareEndSuccess()
        {
            var mapId = PlayerDatas.Instance.baseData.MapID;
            if (mapId != 31230)
            {
                return;
            }
            var mission = dungeonModel.mission;
            if (mission.hasSit == 1)
            {
                return;
            }
            if (!WindowCenter.Instance.IsOpen<MainInterfaceWin>()
                || WindowCenter.Instance.ExitAnyFullScreenOrMaskWin())
            {
                return;
            }
            var list = GAMgr.Instance.GetTypeList(E_ActorClassType.Player);
            if (list != null)
            {
                var hero = PlayerDatas.Instance.hero;
                for (int i = 0; i < list.Count; i++)
                {
                    var player = list[i] as GA_Player;
                    if (player != null)
                    {
                        var distance = MathUtility.CalDistance(player.Pos, hero.Pos);
                        if (distance < transmitDistance)
                        {
                            player.OnClick();
                            return;
                        }
                    }
                }
            }
        }
        private void UpdateMissionEvent()
        {
            var mapId = PlayerDatas.Instance.baseData.MapID;
            if (mapId != 31230)
            {
                return;
            }
            var mission = dungeonModel.mission;
            if (mission.hasSit == 1 && selectPlayer != 0)
            {
                selectPlayer = 0;
                if (selectTransmit != null)
                {
                    selectTransmit();
                }
            }
        }
        #region 服务端数据
        public DateTime transmitCompleteTime { get; private set; }
        public bool transmiting
        {
            get
            {
                return DateTime.Now < transmitCompleteTime;
            }
        }
        private Clock transmitClock = null;
        public void Transmit()
        {
            if (selectPlayer != 0)
            {
                CA508_tagCMDoFBAction pak = new CA508_tagCMDoFBAction();
                pak.ActionType = 0;
                pak.ActionInfo = selectPlayer;
                GameNetSystem.Instance.SendInfo(pak);
            }
        }
        public void UpdateTransmitState(H0411_tagPlayerSit package)
        {
            var mapId = PlayerDatas.Instance.baseData.MapID;
            if (mapId != 31230 || package.PlayerID != PlayerDatas.Instance.baseData.PlayerID)
            {
                return;
            }
            if (package.Type == 0)
            {
                transmitCompleteTime = DateTime.Now.AddTicks(transmitCostSeconds * TimeSpan.TicksPerSecond);
                transmitClock = Clock.Create(transmitCostSeconds, TransmitComplete);
            }
            else
            {
                if (transmitClock != null)
                {
                    transmitClock.Stop();
                    transmitClock = null;
                }
                transmitCompleteTime = TimeUtility.ClientOriginalTime;
            }
            if (transmitStateUpdate != null)
            {
                transmitStateUpdate();
            }
        }
        void TransmitComplete()
        {
            transmitClock = null;
            CA508_tagCMDoFBAction pak = new CA508_tagCMDoFBAction();
            pak.ActionType = 1;
            pak.ActionInfo = 0;
            GameNetSystem.Instance.SendInfo(pak);
            if (transmitStateUpdate != null)
            {
                transmitStateUpdate();
            }
        }
        #endregion
    }
}
System/FairyAu/FairyFeastModel.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 5903c3e70810d3e49936a4f4729c79ed
timeCreated: 1539661724
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/WindowBase/ModelCenter.cs
@@ -198,6 +198,7 @@
            RegisterModel<FlashRushToBuyModel>();
            RegisterModel<TalentModel>();
            RegisterModel<OpenServerActivityNotifyModel>();
            RegisterModel<FairyFeastModel>();
            RegisterModel<WishingPoolModel>();
            RegisterModel<RolePointModel>();
            inited = true;