//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Friday, December 21, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class FightingPKWin : Window { [SerializeField] RoleInformation m_RoleInformation1; [SerializeField] RoleInformation m_RoleInformation2; [SerializeField] Button m_AutoBtn; [SerializeField] GameObject m_AutoImg; [SerializeField] Text m_ScoreText1; [SerializeField] Text m_ScoreText2; [SerializeField] Text m_CountdownText; public float UpperAndLower = 17f; public float ItemHeight = 135f; public float MaxHeight = 422f; private ScrollRect _ScrollRect1; private ScrollRect _ScrollRect2; [SerializeField] ScrollerController m_ScrollerController1; [SerializeField] Transform Viewport1; [SerializeField] ScrollerController m_ScrollerController2; [SerializeField] Transform Viewport2; private List _MyBuffSortList = new List();//自身BUff列表 private List _OpponentBuffSortList = new List();//对手buff列表 DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel(); } } DateTime dungeonEndTime; BuffModel m_BuffModel; BuffModel Buffmodel { get { return m_BuffModel ?? (m_BuffModel = ModelCenter.Instance.GetModel()); } } private int positionType = 1; #region Built-in protected override void BindController() { _ScrollRect1 = Viewport1.GetComponent(); _ScrollRect2 = Viewport2.GetComponent(); m_ScrollerController1.OnRefreshCell += OnRefreshGridCell1; m_ScrollerController2.OnRefreshCell += OnRefreshGridCell2; } protected override void AddListeners() { m_AutoBtn.AddListener(AutoButton); m_RoleInformation1.BuffButton.AddListener(myBuffList); m_RoleInformation2.BuffButton.AddListener(opponentBuffList); } protected override void OnPreOpen() { positionType = CrossServerLogin.Instance.oneVsOnePlayerData.myBornPoint; CrossServerOneVsOneRewardModel.PkDanLvNow = CrossServerOneVsOnePlayerInfo.Instance.DanLV; PlayerDatas.Instance.playerDataRefreshEvent += Updatefighting;//数据的刷新(h0418) GA_Player.s_OnRefreshLife += OnRefreshPlayerLifeBar; if (PlayerDatas.Instance.hero != null) { PlayerDatas.Instance.hero.ActorInfo.OnHpChange += OnHeroHpChanged; } _MyBuffSortList.Clear(); _OpponentBuffSortList.Clear(); m_ScoreText1.text = 0.ToString(); m_ScoreText2.text = 0.ToString(); SetScoreText(); BuffScheduling();//buff排序 GetopponentBuff(); OnCreateGridLineCell(m_ScrollerController1); OnCreateGridLineCel2(m_ScrollerController2); IsShowMyBuffBtn(); IsShowOpponentBuffBtn(); } protected override void OnActived() { dungeonEndTime = dungeonModel.GetCoolDownEndTime(DungeonCoolDownType.FightStart); PlaceOfBirth(positionType);//从出生位置设置信息 Viewport1.gameObject.SetActive(false); Viewport2.gameObject.SetActive(false); } protected override void OnAfterOpen() { HeroBehaviour.OnStopHandupAI += OnHeroHandupAIStopPassive; HeroBehaviour.OnStartHandupAI += OnHeroHandupAIStarted; dungeonModel.dungeonCoolDownEvent += DungeonCoolDownEvent; dungeonModel.updateMissionEvent += UpdateMissionEvent; BuffModel.Even_ObjAddBuf += AddBuff; BuffModel.Even_ObjDelBuff += DelBuff; BuffModel.BuffUpdateEvent += BuffUpdateEvent; OpponentInformation.Instance.ShieldUpdate += ShieldUpdate; } protected override void OnPreClose() { PlayerDatas.Instance.playerDataRefreshEvent -= Updatefighting;//数据的刷新(h0418) GA_Player.s_OnRefreshLife -= OnRefreshPlayerLifeBar; if (PlayerDatas.Instance.hero != null) { PlayerDatas.Instance.hero.ActorInfo.OnHpChange -= OnHeroHpChanged; } HeroBehaviour.OnStopHandupAI -= OnHeroHandupAIStopPassive; HeroBehaviour.OnStartHandupAI -= OnHeroHandupAIStarted; dungeonModel.dungeonCoolDownEvent -= DungeonCoolDownEvent; dungeonModel.updateMissionEvent -= UpdateMissionEvent; BuffModel.Even_ObjAddBuf -= AddBuff; BuffModel.Even_ObjDelBuff -= DelBuff; BuffModel.BuffUpdateEvent -= BuffUpdateEvent; OpponentInformation.Instance.ShieldUpdate -= ShieldUpdate; } protected override void OnAfterClose() { } protected override void LateUpdate() { if (PlayerDatas.Instance.hero != null && PlayerDatas.Instance.hero.aiHandler.IsAuto()) { m_AutoImg.SetActive(false); } else { m_AutoImg.SetActive(true); } if (WindowCenter.Instance.IsOpen("CrossServerSettlementWin")) { return; } if (dungeonModel.mission.roundNum == 1 && TimeUtility.ServerNow >= dungeonEndTime) { m_CountdownText.text = "60"; return; } if (TimeUtility.ServerNow >= dungeonEndTime) { m_CountdownText.text = "0"; } else { var surplus = dungeonEndTime - TimeUtility.ServerNow; m_CountdownText.text = (Mathf.CeilToInt((float)surplus.TotalSeconds)).ToString(); } } #endregion private void OnHeroHpChanged(ulong hp) { PlaceOfBirthUpdate(positionType); } private void DelBuff() { BuffScheduling(); UpdateControllerPosition(); IsShowMyBuffBtn(); if (positionType == 1) { OnCreateGridLineCell(m_ScrollerController1); } else { OnCreateGridLineCel2(m_ScrollerController2); } } private void AddBuff() { BuffScheduling(); UpdateControllerPosition(); IsShowMyBuffBtn(); if (positionType == 1) { OnCreateGridLineCell(m_ScrollerController1); } else { OnCreateGridLineCel2(m_ScrollerController2); } } private void BuffUpdateEvent(int playerID) { int opponentPlayerId = CrossServerLogin.Instance.oneVsOnePlayerData.opponentPlayerId; if (playerID == opponentPlayerId) { GetopponentBuff(); UpdateControllerPositionOppoent(); IsShowOpponentBuffBtn(); if (positionType == 1) { OnCreateGridLineCel2(m_ScrollerController2); } else { OnCreateGridLineCell(m_ScrollerController1); } } } private void DungeonCoolDownEvent(DungeonCoolDownType type) { if (type == DungeonCoolDownType.FightStart) { dungeonEndTime = dungeonModel.GetCoolDownEndTime(DungeonCoolDownType.FightStart); } } private void Updatefighting(PlayerDataType _tCDBPlayerRefresh) { switch (_tCDBPlayerRefresh) { case PlayerDataType.LV://等级的刷新8 case PlayerDataType.MaxHP://最大血量的刷新28 case PlayerDataType.HP://当前血量29 case PlayerDataType.ExAttr4://当前护盾值 case PlayerDataType.MaxProDef://最大护盾值 PlaceOfBirthUpdate(positionType); break; } } private void UpdateMissionEvent() { SetScoreText(); } private void OnRefreshPlayerLifeBar(uint _instanceId, ulong _hp, ulong _maxHp) { // DebugEx.LogError("最大血量"+ _maxHp+"当前血量"+ _hp); if (positionType == 1) { m_RoleInformation2.SetHeroHP((int)_maxHp, (int)_hp); } else { m_RoleInformation1.SetHeroHP((int)_maxHp, (int)_hp); } } private void ShieldUpdate(int playerID, int shieldNow) { if (playerID == CrossServerLogin.Instance.oneVsOnePlayerData.opponentPlayerId) { if (positionType == 1) { m_RoleInformation2.SetShieldNumber(CrossServerLogin.Instance.oneVsOnePlayerData.MaxProDef, shieldNow); } else { m_RoleInformation1.SetShieldNumber(CrossServerLogin.Instance.oneVsOnePlayerData.MaxProDef, shieldNow); } } // DebugEx.LogError("输出玩家的ID" + playerID+"输出当前护盾值"+ shieldNow); } private void OnHeroHandupAIStopPassive() { //if (!m_AutoImg.activeSelf) //{ // m_AutoImg.SetActive(true); //} } void OnHeroHandupAIStarted() { //if (m_AutoImg.activeSelf) //{ // m_AutoImg.SetActive(false); //} } private void AutoButton() { var _hero = PlayerDatas.Instance.hero; if (_hero != null && !_hero.ActorInfo.serverDie) { if (!_hero.aiHandler.IsAuto()) { _hero.Behaviour.StartHandupAI(); } else { _hero.Behaviour.StopHandupAI(true); } } //m_AutoImg.SetActive(!m_AutoImg.activeSelf); } private void SetScoreText() { int roundNum = dungeonModel.mission.roundNum; int myWin = 0; int youWin = 0; int playerID = (int)PlayerDatas.Instance.baseData.PlayerID; if (dungeonModel.mission.roundWinerIDList != null) { for (int i = 0; i < dungeonModel.mission.roundWinerIDList.Length; i++) { if (dungeonModel.mission.roundWinerIDList[i] == playerID) { myWin += 1; } else { youWin += 1; } } } if (positionType == 1) { m_ScoreText1.text = myWin.ToString(); m_ScoreText2.text = youWin.ToString(); } else { m_ScoreText1.text = youWin.ToString(); m_ScoreText2.text = myWin.ToString(); } } private void myBuffList() { Viewport1.gameObject.SetActive(true); } private void opponentBuffList() { Viewport2.gameObject.SetActive(true); } private void OnCreateGridLineCell(ScrollerController gridCtrl) { gridCtrl.Refresh(); if (positionType == 1) { for (int i = 0; i < _MyBuffSortList.Count; i++) { gridCtrl.AddCell(ScrollerDataType.Header, _MyBuffSortList[i]); } } else { for (int i = 0; i < _OpponentBuffSortList.Count; i++) { gridCtrl.AddCell(ScrollerDataType.Header, _OpponentBuffSortList[i]); } } gridCtrl.Restart(); } private void OnCreateGridLineCel2(ScrollerController gridCtrl) { gridCtrl.Refresh(); if (positionType == 1) { for (int i = 0; i < _OpponentBuffSortList.Count; i++) { gridCtrl.AddCell(ScrollerDataType.Header, _OpponentBuffSortList[i]); } } else { for (int i = 0; i < _MyBuffSortList.Count; i++) { gridCtrl.AddCell(ScrollerDataType.Header, _MyBuffSortList[i]); } } gridCtrl.Restart(); } private void OnRefreshGridCell1(ScrollerDataType type, CellView cell) { int _index = cell.index; BuffBGMScripts _buffBGM = cell.GetComponent(); var skillconfig = SkillConfig.Get(_index); _buffBGM.b_BuffIcon.SetSprite(skillconfig.IconName); _buffBGM.b_BuffName.text = skillconfig.SkillName; _buffBGM.b_BuffContent.text = skillconfig.BuffDescription; _buffBGM.b_BuffTime.gameObject.SetActive(false); _buffBGM.BiBuffText.gameObject.SetActive(false); _buffBGM._OnOff = false; } private void OnRefreshGridCell2(ScrollerDataType type, CellView cell) { int _index = cell.index; BuffBGMScripts _buffBGM = cell.GetComponent(); var skillconfig = SkillConfig.Get(_index); _buffBGM.b_BuffIcon.SetSprite(skillconfig.IconName); _buffBGM.b_BuffName.text = skillconfig.SkillName; _buffBGM.b_BuffContent.text = skillconfig.BuffDescription; _buffBGM.b_BuffTime.gameObject.SetActive(false); _buffBGM.BiBuffText.gameObject.SetActive(false); _buffBGM._OnOff = false; } void UpdateControllerPosition() { if (_MyBuffSortList.Count == 0) { return; } if (_MyBuffSortList.Count * ItemHeight >= MaxHeight) { if (positionType == 1) { _ScrollRect1.vertical = true; (Viewport1 as RectTransform).sizeDelta = (Viewport1 as RectTransform).sizeDelta.SetY(MaxHeight + UpperAndLower); } else { _ScrollRect2.vertical = true; (Viewport2 as RectTransform).sizeDelta = (Viewport2 as RectTransform).sizeDelta.SetY(MaxHeight + UpperAndLower); } } else { if (positionType == 1) { _ScrollRect1.vertical = false; (Viewport1 as RectTransform).sizeDelta = (Viewport1 as RectTransform).sizeDelta.SetY(_MyBuffSortList.Count * ItemHeight + UpperAndLower); } else { _ScrollRect2.vertical = false; (Viewport2 as RectTransform).sizeDelta = (Viewport2 as RectTransform).sizeDelta.SetY(_MyBuffSortList.Count * ItemHeight + UpperAndLower); } } } void UpdateControllerPositionOppoent() { if (_OpponentBuffSortList.Count == 0) { return; } if (_OpponentBuffSortList.Count * ItemHeight >= MaxHeight) { if (positionType == 1) { _ScrollRect2.vertical = true; (Viewport2 as RectTransform).sizeDelta = (Viewport2 as RectTransform).sizeDelta.SetY(MaxHeight + UpperAndLower); } else { _ScrollRect1.vertical = true; (Viewport1 as RectTransform).sizeDelta = (Viewport1 as RectTransform).sizeDelta.SetY(MaxHeight + UpperAndLower); } } else { if (positionType == 1) { _ScrollRect2.vertical = false; (Viewport2 as RectTransform).sizeDelta = (Viewport2 as RectTransform).sizeDelta.SetY(_OpponentBuffSortList.Count * ItemHeight + UpperAndLower); } else { _ScrollRect1.vertical = false; (Viewport1 as RectTransform).sizeDelta = (Viewport1 as RectTransform).sizeDelta.SetY(_OpponentBuffSortList.Count * ItemHeight + UpperAndLower); } } } void BuffScheduling()//buff排序 { _MyBuffSortList.Clear(); foreach (int key in Buffmodel._BuffDic.Keys) { _MyBuffSortList.Add(key); } } private void IsShowMyBuffBtn() { if (_MyBuffSortList.Count > 0) { if (positionType == 1) { m_RoleInformation1.BuffButton.gameObject.SetActive(true); } else { m_RoleInformation2.BuffButton.gameObject.SetActive(true); } } else { if (positionType == 1) { m_RoleInformation1.BuffButton.gameObject.SetActive(false); Viewport1.gameObject.SetActive(false); } else { m_RoleInformation2.BuffButton.gameObject.SetActive(false); Viewport2.gameObject.SetActive(false); } UpdateControllerPosition(); } if (positionType == 1) { m_RoleInformation1.BuffNumber.text = _MyBuffSortList.Count.ToString(); } else { m_RoleInformation2.BuffNumber.text = _MyBuffSortList.Count.ToString(); } } private void IsShowOpponentBuffBtn() { if (_OpponentBuffSortList.Count > 0) { if (positionType == 1) { m_RoleInformation2.BuffButton.gameObject.SetActive(true); } else { m_RoleInformation1.BuffButton.gameObject.SetActive(true); } UpdateControllerPositionOppoent(); } else { if (positionType == 1) { m_RoleInformation2.BuffButton.gameObject.SetActive(false); Viewport2.gameObject.SetActive(false); } else { m_RoleInformation1.BuffButton.gameObject.SetActive(false); Viewport1.gameObject.SetActive(false); } } if (positionType == 1) { m_RoleInformation2.BuffNumber.text = _OpponentBuffSortList.Count.ToString(); } else { m_RoleInformation1.BuffNumber.text = _OpponentBuffSortList.Count.ToString(); } } private void PlaceOfBirth(int type)//关于出生点设置位置信息 { if (type == 1)//左 { //-----------自己的信息 m_RoleInformation1.SetHeroHead(CrossServerLogin.Instance.oneVsOnePlayerData.myJob, 0); string PlayerName = UIHelper.ServerStringTrim(CrossServerLogin.Instance.oneVsOnePlayerData.myName); m_RoleInformation1.SetHeroLvAndName((int)PlayerDatas.Instance.baseData.LV, PlayerName); m_RoleInformation1.SetHeroHP(PlayerDatas.Instance.extersion.MaxHP, (int)PlayerDatas.Instance.baseData.HP); m_RoleInformation1.SetShieldNumber(PlayerDatas.Instance.extersion.MaxProDef, (int)PlayerDatas.Instance.baseData.shield); //------------------------------------//对手信息 int job = CrossServerLogin.Instance.oneVsOnePlayerData.opponentJob; m_RoleInformation2.SetHeroHead(job, 0); string OpponentName = UIHelper.ServerStringTrim(CrossServerLogin.Instance.oneVsOnePlayerData.opponentName); m_RoleInformation2.SetHeroLvAndName((int)CrossServerLogin.Instance.oneVsOnePlayerData.opponentLevel, OpponentName); m_RoleInformation2.SetHeroHP(CrossServerLogin.Instance.oneVsOnePlayerData.opponentMaxHp, CrossServerLogin.Instance.oneVsOnePlayerData.opponentMaxHp); m_RoleInformation2.SetShieldNumber(100, 100); } else//右 { //-----------自己的信息 m_RoleInformation2.SetHeroHead(CrossServerLogin.Instance.oneVsOnePlayerData.myJob, 0); string PlayerName = UIHelper.ServerStringTrim(CrossServerLogin.Instance.oneVsOnePlayerData.myName); m_RoleInformation2.SetHeroLvAndName((int)PlayerDatas.Instance.baseData.LV, PlayerName); m_RoleInformation2.SetHeroHP(PlayerDatas.Instance.extersion.MaxHP, (int)PlayerDatas.Instance.baseData.HP); m_RoleInformation2.SetShieldNumber(PlayerDatas.Instance.extersion.MaxProDef, (int)PlayerDatas.Instance.baseData.shield); //------------------------------------//对手信息 int job = CrossServerLogin.Instance.oneVsOnePlayerData.opponentJob; m_RoleInformation1.SetHeroHead(job, 0); string OpponentName = UIHelper.ServerStringTrim(CrossServerLogin.Instance.oneVsOnePlayerData.opponentName); m_RoleInformation1.SetHeroLvAndName((int)CrossServerLogin.Instance.oneVsOnePlayerData.opponentLevel, OpponentName); m_RoleInformation1.SetHeroHP(CrossServerLogin.Instance.oneVsOnePlayerData.opponentMaxHp, CrossServerLogin.Instance.oneVsOnePlayerData.opponentMaxHp); m_RoleInformation1.SetShieldNumber(100, 100); } } private void PlaceOfBirthUpdate(int type)//自身玩家属性刷新 { if (type == 1) { string PlayerName = UIHelper.ServerStringTrim(CrossServerLogin.Instance.oneVsOnePlayerData.myName); m_RoleInformation1.SetHeroLvAndName((int)PlayerDatas.Instance.baseData.LV, PlayerName); m_RoleInformation1.SetHeroHP(PlayerDatas.Instance.extersion.MaxHP, (int)PlayerDatas.Instance.baseData.HP); m_RoleInformation1.SetShieldNumber(PlayerDatas.Instance.extersion.MaxProDef, (int)PlayerDatas.Instance.baseData.shield); #if UNITY_EDITOR Debug.LogFormat("设置血量: {0}/{1}", PlayerDatas.Instance.baseData.HP, PlayerDatas.Instance.extersion.MaxHP); #endif } else { string PlayerName = UIHelper.ServerStringTrim(CrossServerLogin.Instance.oneVsOnePlayerData.myName); m_RoleInformation2.SetHeroLvAndName((int)PlayerDatas.Instance.baseData.LV, PlayerName); m_RoleInformation2.SetHeroHP(PlayerDatas.Instance.extersion.MaxHP, (int)PlayerDatas.Instance.baseData.HP); m_RoleInformation2.SetShieldNumber(PlayerDatas.Instance.extersion.MaxProDef, (int)PlayerDatas.Instance.baseData.shield); #if UNITY_EDITOR Debug.LogFormat("设置血量: {0}/{1}", PlayerDatas.Instance.baseData.HP, PlayerDatas.Instance.extersion.MaxHP); #endif } } private void GetopponentBuff()//获取对手身上的Buff { List buffIds = new List(); _OpponentBuffSortList.Clear(); StatusMgr.Instance.GetBuffIds((uint)CrossServerLogin.Instance.oneVsOnePlayerData.opponentPlayerId, ref buffIds); if (buffIds.Count > 0) { for (int i = 0; i < buffIds.Count; i++) { _OpponentBuffSortList.Add(buffIds[i]); } } } } }