| New file |
| | |
| | | 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
|
| | | }
|
| | | } |
| | | |