//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Wednesday, December 27, 2017
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace vnxbqy.UI
|
{
|
|
public class FairyLeagueDungeonSettleWin : DungeonDefeatedWin
|
{
|
[SerializeField] RectTransform m_ContainerWin;
|
[SerializeField] RectTransform m_ContainerDefeat;
|
[SerializeField] Text m_FightTimeTxt;
|
[SerializeField] Text m_IntegralTxt;
|
[SerializeField] ScrollerController scrollerController;
|
[SerializeField, Header("联赛第一名Cell大小")] float m_FirstRankCellSize = 70;
|
[SerializeField, Header("联赛其他名次Cell大小")] float m_NormalRankCellSize = 58;
|
|
[SerializeField] RectTransform m_LayoutRank;
|
[SerializeField] RectTransform m_LayoutBottom;
|
|
[SerializeField] Transform m_ContainerFairyAward;
|
[SerializeField] Transform m_ContainerRankAward;
|
[SerializeField] ScrollRect m_RankScroller;
|
[SerializeField] ItemCell[] m_RankItems;
|
[SerializeField] Transform m_ContainerWinStreakAward;
|
[SerializeField] ScrollRect m_WinStreakScroller;
|
[SerializeField] Text m_WinStreakType;
|
[SerializeField] ItemCell[] m_WinStreakItems;
|
|
[SerializeField] float[] m_Heights;
|
|
FairyLeagueModel model
|
{
|
get
|
{
|
return ModelCenter.Instance.GetModel<FairyLeagueModel>();
|
}
|
}
|
|
KingFairyModel kingFairyModel { get { return ModelCenter.Instance.GetModel<KingFairyModel>(); } }
|
#region Built-in
|
protected override void BindController()
|
{ }
|
|
protected override void AddListeners()
|
{
|
base.AddListeners();
|
scrollerController.OnGetDynamicSize += OnGetDynamicSize;
|
}
|
|
protected override void OnPreOpen()
|
{
|
base.OnPreOpen();
|
RefreshData();
|
DisplayFairyAwards();
|
}
|
|
protected override void OnAfterOpen()
|
{ }
|
|
protected override void OnPreClose()
|
{ }
|
|
protected override void OnAfterClose()
|
{ }
|
|
protected override void LateUpdate()
|
{
|
base.LateUpdate();
|
}
|
|
protected override void OnActived()
|
{
|
base.OnActived();
|
}
|
#endregion
|
|
void DisplayFairyAwards()
|
{
|
var afterBattleRank = 0;
|
|
var battleDatas = model.GetFairyLeague(model.fairyLeagueSession, model.fairyLeagueGroupId);
|
var isWin = model.fairyLeagueWinFaction == PlayerDatas.Instance.baseData.faction;
|
var isWinGroup = false;
|
if (battleDatas.Count == 1)
|
{
|
isWinGroup = true;
|
}
|
else if (model.fairyLeagueSession == 1 && model.IsSessionOneWinGroup())
|
{
|
isWinGroup = true;
|
}
|
|
if (battleDatas.Count == 1 || model.fairyLeagueSession == 1)
|
{
|
var start = (5 - model.fairyLeagueGroupId) % 5 * 4;
|
switch (model.fairyLeagueGroupId)
|
{
|
case 5:
|
if (isWinGroup)
|
{
|
afterBattleRank = isWin ? start + 1 : start + 2;
|
}
|
else
|
{
|
afterBattleRank = isWin ? start + 3 : start + 5;
|
}
|
break;
|
case 4:
|
case 3:
|
case 2:
|
case 1:
|
if (isWinGroup)
|
{
|
afterBattleRank = isWin ? start : start + 2;
|
}
|
else
|
{
|
afterBattleRank = isWin ? start + 3 : start + 5;
|
}
|
break;
|
}
|
}
|
|
m_ContainerRankAward.SetActive(afterBattleRank > 0 && afterBattleRank <= model.fairyLeagueRankAwardMaxRank);
|
if (afterBattleRank > 0 && afterBattleRank <= model.fairyLeagueRankAwardMaxRank)
|
{
|
m_RankScroller.horizontalNormalizedPosition = 0f;
|
var rankAwards = model.GetFairyLeagueRankReward(model.afterGroupWorldLevel, afterBattleRank);
|
for (int i = 0; i < m_RankItems.Length; i++)
|
{
|
m_RankItems[i].SetActive(i < rankAwards.Count);
|
if (i < rankAwards.Count)
|
{
|
var item = rankAwards[i];
|
var itemData = new ItemCellModel(item.id, true, (ulong)item.count);
|
m_RankItems[i].Init(itemData);
|
m_RankItems[i].button.SetListener(() =>
|
{
|
ItemTipUtility.Show(item.id);
|
});
|
}
|
}
|
}
|
|
var rewardIndex = -1;
|
var isWinStreak = false;
|
var winStreakTimes = 0;
|
if (isWin && model.fairyLeagueGroupId == 5 && (battleDatas.Count == 1 ||
|
(model.fairyLeagueSession == 1 && isWinGroup)))
|
{
|
var winStreakTimesArray = model.fairyLeagueHelp.fairyWarEnter.WinCount;
|
winStreakTimes = winStreakTimesArray[0] > 0 ? winStreakTimesArray[0] : winStreakTimesArray[1];
|
|
if (winStreakTimes == 0)
|
{
|
isWinStreak = true;
|
}
|
else
|
{
|
var faction = Array.IndexOf(winStreakTimesArray, winStreakTimes) + 1;
|
isWinStreak = PlayerDatas.Instance.baseData.faction == faction;
|
}
|
|
if (winStreakTimes + 1 == kingFairyModel.multipleWinStartGet)
|
{
|
var winStreakIndex = 0;
|
rewardIndex = winStreakIndex % kingFairyModel.multipleWinRewards.Count;
|
}
|
else if (winStreakTimes + 1 > kingFairyModel.multipleWinStartGet
|
&& (winStreakTimes + 1 - kingFairyModel.multipleWinStartGet) % kingFairyModel.multipleWinIntervalGet == 0)
|
{
|
var winStreakIndex = (winStreakTimes + 1 - kingFairyModel.multipleWinStartGet) / kingFairyModel.multipleWinIntervalGet;
|
rewardIndex = winStreakIndex % kingFairyModel.multipleWinRewards.Count;
|
}
|
}
|
|
m_ContainerWinStreakAward.SetActive(rewardIndex != -1);
|
if (rewardIndex != -1)
|
{
|
m_WinStreakScroller.horizontalNormalizedPosition = 0f;
|
var awards = kingFairyModel.multipleWinRewards[rewardIndex];
|
for (int i = 0; i < m_WinStreakItems.Length; i++)
|
{
|
m_WinStreakItems[i].SetActive(i < awards.Count);
|
if (i < awards.Count)
|
{
|
var item = awards[i];
|
var itemData = new ItemCellModel(item.id, true, (ulong)item.count);
|
m_WinStreakItems[i].Init(itemData);
|
m_WinStreakItems[i].button.SetListener(() =>
|
{
|
ItemTipUtility.Show(item.id);
|
});
|
}
|
}
|
|
m_WinStreakType.text = isWinStreak ? Language.Get("FairyLeageuNew_1", winStreakTimes)
|
: Language.Get("FairyLeageuNew_2", winStreakTimes);
|
}
|
|
var hasFairyAward = (afterBattleRank > 0 && afterBattleRank <= model.fairyLeagueRankAwardMaxRank)
|
|| rewardIndex != -1;
|
m_ContainerFairyAward.SetActive(hasFairyAward);
|
|
var layoutIndex = 0;
|
if (m_ContainerRankAward.gameObject.activeSelf
|
&& m_ContainerWinStreakAward.gameObject.activeSelf)
|
{
|
layoutIndex = 2;
|
}
|
else if (m_ContainerRankAward.gameObject.activeSelf)
|
{
|
layoutIndex = 1;
|
}
|
|
m_LayoutBottom.sizeDelta = m_LayoutBottom.sizeDelta.SetY(m_Heights[layoutIndex]);
|
m_LayoutRank.offsetMin = new Vector2(m_LayoutRank.offsetMin.x, m_Heights[layoutIndex]);
|
}
|
|
private bool OnGetDynamicSize(ScrollerDataType type, int index, out float height)
|
{
|
if (model.fairyLeagueGroupId == 5 &&
|
(index == model.GetBattleWinFirstPlayer()
|
|| index == model.GetBattleDefeatFirstPlayer()))
|
{
|
height = m_FirstRankCellSize;
|
}
|
else
|
{
|
height = m_NormalRankCellSize;
|
}
|
return true;
|
}
|
|
private void RefreshData()
|
{
|
m_IntegralTxt.text = Language.Get("UnionMatchIntergralAdd", model.integralAddition);
|
m_FightTimeTxt.text = TimeUtility.SecondsToHMS(model.fairyLeagueTotalTime);
|
m_ContainerWin.SetActive(model.fairyLeagueWinFaction == PlayerDatas.Instance.baseData.faction);
|
m_ContainerDefeat.SetActive(model.fairyLeagueWinFaction != PlayerDatas.Instance.baseData.faction);
|
scrollerController.Refresh();
|
var _list = model.fairyLeagueResults;
|
for (int i = 0; i < _list.Count; i++)
|
{
|
scrollerController.AddCell(ScrollerDataType.Header, i);
|
}
|
scrollerController.Restart();
|
}
|
}
|
|
}
|