From c7b8b789a4ef38bbd7bdbfd86b0aa73bf9334b1d Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期五, 26 十月 2018 10:41:18 +0800
Subject: [PATCH] 4218【1.2】仙盟宴会传功
---
System/FairyAu/FairyFeastModel.cs | 283 +++++++++++++++++++++++++++++++++++
Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0411_tagPlayerSit.cs | 67 ++++---
System/Dungeon/DungeonFairyFeastHintWin.cs | 58 ++++++
System/Dungeon/DungeonData.cs | 1
System/WindowBase/ModelCenter.cs | 1
System/FairyAu/FairyFeastModel.cs.meta | 12 +
6 files changed, 390 insertions(+), 32 deletions(-)
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0411_tagPlayerSit.cs b/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0411_tagPlayerSit.cs
index 62bd8bc..a2db392 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0411_tagPlayerSit.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0411_tagPlayerSit.cs
@@ -1,28 +1,39 @@
-using UnityEngine;
-using System.Collections;
-using Snxxz.UI;
-
-//04 11 玩家坐下/站立#tagPlayerSit
-
-
-
-public class DTC0411_tagPlayerSit : DtcBasic {
- RealmModel m_RealmModel;
- RealmModel realmModel {
- get {
- return m_RealmModel ?? (m_RealmModel = ModelCenter.Instance.GetModel<RealmModel>());
- }
- }
- public override void Done(GameNetPackBasic vNetPack) {
-
- base.Done(vNetPack);
-
- H0411_tagPlayerSit vNetData = vNetPack as H0411_tagPlayerSit;
-
- if (vNetData != null) {
- realmModel.OnRefreshData(vNetData);
- }
- }
-
-}
-
+using UnityEngine;
+using System.Collections;
+using Snxxz.UI;
+
+//04 11 玩家坐下/站立#tagPlayerSit
+
+
+
+public class DTC0411_tagPlayerSit : DtcBasic
+{
+ RealmModel m_RealmModel;
+ RealmModel realmModel
+ {
+ get
+ {
+ return m_RealmModel ?? (m_RealmModel = ModelCenter.Instance.GetModel<RealmModel>());
+ }
+ }
+
+ 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)
+ {
+ realmModel.OnRefreshData(vNetData);
+ fairyFeastModel.UpdateTransmitState(vNetData);
+ }
+ }
+
+}
+
diff --git a/System/Dungeon/DungeonData.cs b/System/Dungeon/DungeonData.cs
index 57cba8c..a58d364 100644
--- a/System/Dungeon/DungeonData.cs
+++ b/System/Dungeon/DungeonData.cs
@@ -108,6 +108,7 @@
public FairyFeastTop familyPartyTop;
public int topPlayerID;
public int enemyID;
+ public int hasSit;
public long totalExp
{
diff --git a/System/Dungeon/DungeonFairyFeastHintWin.cs b/System/Dungeon/DungeonFairyFeastHintWin.cs
index 4e61b33..c2d1986 100644
--- a/System/Dungeon/DungeonFairyFeastHintWin.cs
+++ b/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();
+ }
}
}
diff --git a/System/FairyAu/FairyFeastModel.cs b/System/FairyAu/FairyFeastModel.cs
new file mode 100644
index 0000000..9531aa8
--- /dev/null
+++ b/System/FairyAu/FairyFeastModel.cs
@@ -0,0 +1,283 @@
+锘縰sing 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
+ }
+}
+
diff --git a/System/FairyAu/FairyFeastModel.cs.meta b/System/FairyAu/FairyFeastModel.cs.meta
new file mode 100644
index 0000000..c156190
--- /dev/null
+++ b/System/FairyAu/FairyFeastModel.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 5903c3e70810d3e49936a4f4729c79ed
+timeCreated: 1539661724
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/System/WindowBase/ModelCenter.cs b/System/WindowBase/ModelCenter.cs
index de40c30..d160460 100644
--- a/System/WindowBase/ModelCenter.cs
+++ b/System/WindowBase/ModelCenter.cs
@@ -198,6 +198,7 @@
RegisterModel<FlashRushToBuyModel>();
RegisterModel<TalentModel>();
RegisterModel<OpenServerActivityNotifyModel>();
+ RegisterModel<FairyFeastModel>();
RegisterModel<WishingPoolModel>();
RegisterModel<RolePointModel>();
inited = true;
--
Gitblit v1.8.0