378 lines
14 KiB
C#
378 lines
14 KiB
C#
using asap.core;
|
|
using cfg;
|
|
using DG.Tweening;
|
|
using game;
|
|
using GameCore;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class HomeBtnRank : MonoBehaviour
|
|
{
|
|
Animation reward;
|
|
RectTransform layout;
|
|
Transform layout_bar;
|
|
Transform layout_reward;
|
|
GameObject rank_bar;
|
|
GameObject rank_reward;
|
|
RewardItemNew rank_rewardItem;
|
|
FishingEventData _fishingEventData;
|
|
PlayerItemData playerItemData;
|
|
Tables tables;
|
|
int curCount;
|
|
|
|
List<Image> bars;
|
|
List<RewardItemNew> rewards;
|
|
float time = 0.3f;
|
|
|
|
float width = 190f;
|
|
private void Awake()
|
|
{
|
|
tables = GContext.container.Resolve<Tables>();
|
|
playerItemData = GContext.container.Resolve<PlayerItemData>();
|
|
_fishingEventData = GContext.container.Resolve<FishingEventData>();
|
|
reward = transform.Find("reward").GetComponent<Animation>();
|
|
layout = reward.transform.Find("bg_bar/ScrollView/Viewport/layout").GetComponent<RectTransform>();
|
|
layout_bar = reward.transform.Find("bg_bar/ScrollView/Viewport/layout/layout_bar");
|
|
layout_reward = reward.transform.Find("bg_bar/ScrollView/Viewport/layout/layout_reward");
|
|
rank_bar = layout_bar.Find("bar1").gameObject;
|
|
rank_bar.SetActive(false);
|
|
rank_reward = layout_reward.Find("reward1").gameObject;
|
|
rank_reward.SetActive(false);
|
|
width = rank_bar.GetComponent<RectTransform>().rect.width;
|
|
rank_rewardItem = reward.transform.Find("btn_reward/reward").GetComponent<RewardItemNew>();
|
|
}
|
|
public void Init(int curCount)
|
|
{
|
|
var rankInit = _fishingEventData.rankInit;
|
|
var TargetList = rankInit.TargetList;
|
|
bool isUp = _fishingEventData.preRankTarget != null;
|
|
if (!isUp && _fishingEventData.rankTarget.TokenRequired <= curCount)
|
|
{
|
|
return;
|
|
}
|
|
var maxCollectingTarget = tables.TbRankTargets.GetOrDefault(TargetList[^1]);
|
|
var itemData = playerItemData.GetItemDataOne(maxCollectingTarget.DropID);
|
|
if (itemData != null)
|
|
{
|
|
rank_rewardItem.SetData(itemData);
|
|
}
|
|
this.curCount = curCount;
|
|
|
|
reward.gameObject.SetActive(true);
|
|
if (isUp)
|
|
{
|
|
SetUpData();
|
|
}
|
|
else
|
|
{
|
|
StartCoroutine(SetData());
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 有升级
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
void SetUpData()
|
|
{
|
|
bars = new List<Image>();
|
|
rewards = new List<RewardItemNew>();
|
|
//分析几种情况
|
|
int dataCount = _fishingEventData.preRankTarget.Count;
|
|
if (dataCount < 3)
|
|
{
|
|
StartCoroutine(SetData1());
|
|
}
|
|
else
|
|
{
|
|
StartCoroutine(SetData2());
|
|
}
|
|
}
|
|
IEnumerator SetData2()
|
|
{
|
|
int dataCount = _fishingEventData.preRankTarget.Count;
|
|
int endCount = _fishingEventData.GetCurRankTarget();
|
|
RankTargets rankTarget = _fishingEventData.rankTarget;
|
|
var TargetList = _fishingEventData.rankInit.TargetList;
|
|
|
|
for (int i = 0; i < dataCount; i++)
|
|
{
|
|
AddItem(_fishingEventData.preRankTarget[i]);
|
|
}
|
|
AddItem(rankTarget);
|
|
//rewards[^1].canvasGroup.alpha = 0;
|
|
//显示间隔
|
|
yield return new WaitForSeconds(0.5f);
|
|
int index = 1;
|
|
for (int i = 0; i < dataCount - 2; i += 2)
|
|
{
|
|
if (i > 0)
|
|
{
|
|
layout.DOAnchorPosX(-i * width, time);
|
|
yield return new WaitForSeconds(time);
|
|
rewards[i - 1].canvasGroup.alpha = 0;
|
|
rewards[i - 2].canvasGroup.alpha = 0;
|
|
}
|
|
for (int j = 0; j < 2; j++)
|
|
{
|
|
index = i + j;
|
|
bars[index].DOFillAmount(1, time);
|
|
yield return new WaitForSeconds(time);
|
|
rewards[index].SetReceived(true);
|
|
rewards[index].ani.Play("rank_reward_change");
|
|
yield return new WaitForSeconds(time);
|
|
}
|
|
}
|
|
var last = _fishingEventData.preRankTarget[index + 1];
|
|
if (last.TaskID <= TargetList[^3])
|
|
{
|
|
layout.DOAnchorPosX(-(index + 1) * width, time);
|
|
yield return new WaitForSeconds(time);
|
|
rewards[index].canvasGroup.alpha = 0;
|
|
rewards[index - 1].canvasGroup.alpha = 0;
|
|
for (int i = index + 1; i < dataCount; i++)
|
|
{
|
|
bars[i].DOFillAmount(1, time);
|
|
yield return new WaitForSeconds(time);
|
|
rewards[i].SetReceived(true);
|
|
rewards[i].ani.Play("rank_reward_change");
|
|
yield return new WaitForSeconds(time);
|
|
}
|
|
if (dataCount > index + 2)
|
|
{
|
|
layout.DOAnchorPosX(-(index + 2) * width, time);
|
|
yield return new WaitForSeconds(time);
|
|
rewards[index + 1].canvasGroup.alpha = 0;
|
|
}
|
|
bars[dataCount].DOFillAmount(endCount / (float)rankTarget.TokenRequired, time);
|
|
}
|
|
else if (last.TaskID == TargetList[^1])
|
|
{
|
|
bars[index + 1].DOFillAmount(1, time);
|
|
yield return new WaitForSeconds(time);
|
|
rank_rewardItem.SetReceived(true);
|
|
rank_rewardItem.ani.Play("rank_reward_change");
|
|
}
|
|
else if (last.TaskID == TargetList[^2])
|
|
{
|
|
layout.anchoredPosition = Vector2.left * index * width;
|
|
yield return new WaitForSeconds(time);
|
|
rewards[index - 1].canvasGroup.alpha = 0;
|
|
for (int i = index + 1; i < dataCount; i++)
|
|
{
|
|
bars[i].DOFillAmount(1, time);
|
|
yield return new WaitForSeconds(time);
|
|
rewards[i].SetReceived(true);
|
|
rewards[i].ani.Play("rank_reward_change");
|
|
}
|
|
if (dataCount > index + 2)
|
|
{
|
|
rank_rewardItem.SetReceived(true);
|
|
rank_rewardItem.ani.Play("rank_reward_change");
|
|
}
|
|
else
|
|
{
|
|
bars[dataCount].DOFillAmount(endCount / (float)rankTarget.TokenRequired, time);
|
|
}
|
|
}
|
|
yield return new WaitForSeconds(time);
|
|
TaskOut();
|
|
}
|
|
/// <summary>
|
|
/// 有升级没有二次位移
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
IEnumerator SetData1()
|
|
{
|
|
List<RankTargets> preRankTarget = _fishingEventData.preRankTarget;
|
|
int dataCount = preRankTarget.Count;
|
|
int endCount = _fishingEventData.GetCurRankTarget();
|
|
RankTargets rankTarget = _fishingEventData.rankTarget;
|
|
var last = preRankTarget[0];
|
|
var TargetList = _fishingEventData.rankInit.TargetList;
|
|
|
|
if (last.TaskID <= TargetList[^3])
|
|
{
|
|
for (int i = 0; i < 3; i++)
|
|
{
|
|
AddItem(last);
|
|
last = tables.TbRankTargets.GetOrDefault(last.NextTarget);
|
|
}
|
|
//显示间隔
|
|
yield return new WaitForSeconds(0.5f);
|
|
for (int i = 0; i < dataCount; i++)
|
|
{
|
|
bars[i].DOFillAmount(1, time);
|
|
yield return new WaitForSeconds(time);
|
|
rewards[i].SetReceived(true);
|
|
}
|
|
bars[dataCount].DOFillAmount(endCount / (float)rankTarget.TokenRequired, time);
|
|
}
|
|
else
|
|
{
|
|
var pre = tables.TbRankTargets.GetOrDefault(TargetList[^3]);
|
|
for (int i = 0; i < 3; i++)
|
|
{
|
|
AddItem(pre);
|
|
pre = tables.TbRankTargets.GetOrDefault(pre.NextTarget);
|
|
}
|
|
if (last.TaskID == TargetList[^1])
|
|
{
|
|
for (int i = 0; i < 2; i++)
|
|
{
|
|
bars[i].fillAmount = 1;
|
|
rewards[i].SetReceived(true);
|
|
}
|
|
//显示间隔
|
|
yield return new WaitForSeconds(0.5f);
|
|
bars[2].DOFillAmount(1, time);
|
|
yield return new WaitForSeconds(time);
|
|
rank_rewardItem.SetReceived(true);
|
|
}
|
|
else if (last.TaskID == TargetList[^2])
|
|
{
|
|
bars[0].fillAmount = 1;
|
|
rewards[0].SetReceived(true);
|
|
//显示间隔
|
|
yield return new WaitForSeconds(0.5f);
|
|
for (int i = 1; i < dataCount + 1; i++)
|
|
{
|
|
bars[i].DOFillAmount(1, time);
|
|
yield return new WaitForSeconds(time);
|
|
rewards[i].SetReceived(true);
|
|
}
|
|
if (dataCount == 2)
|
|
{
|
|
rank_rewardItem.SetReceived(true);
|
|
}
|
|
else
|
|
{
|
|
bars[dataCount + 1].DOFillAmount(endCount / (float)rankTarget.TokenRequired, time);
|
|
}
|
|
}
|
|
}
|
|
yield return new WaitForSeconds(time);
|
|
TaskOut();
|
|
}
|
|
|
|
void AddItem(RankTargets last)
|
|
{
|
|
Image image = Instantiate(rank_bar, layout_bar).GetComponent<Image>();
|
|
image.gameObject.SetActive(true);
|
|
image.fillAmount = 0;
|
|
bars.Add(image);
|
|
RewardItemNew rank_reward1 = Instantiate(rank_reward, layout_reward).GetComponent<RewardItemNew>();
|
|
rank_reward1.gameObject.SetActive(true);
|
|
rewards.Add(rank_reward1);
|
|
var itemData = playerItemData.GetItemDataOne(last.DropID);
|
|
rank_reward1.SetData(itemData);
|
|
}
|
|
/// <summary>
|
|
/// 没有升级的情况
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
IEnumerator SetData()
|
|
{
|
|
var TargetList = _fishingEventData.rankInit.TargetList;
|
|
RankTargets rankTarget = _fishingEventData.rankTarget;
|
|
int endCount = _fishingEventData.GetCurRankTarget();
|
|
int curIndex = TargetList.IndexOf(rankTarget.TaskID);
|
|
ItemData itemData;
|
|
RankTargets rankTarge1;
|
|
RankTargets rankTarge2;
|
|
RankTargets rankTarge3;
|
|
|
|
Image rank_bar1 = Instantiate(rank_bar, layout_bar).GetComponent<Image>();
|
|
Image rank_bar2 = Instantiate(rank_bar, layout_bar).GetComponent<Image>();
|
|
Image rank_bar3 = Instantiate(rank_bar, layout_bar).GetComponent<Image>();
|
|
rank_bar1.gameObject.SetActive(true);
|
|
rank_bar2.gameObject.SetActive(true);
|
|
rank_bar3.gameObject.SetActive(true);
|
|
|
|
RewardItemNew rank_reward1 = Instantiate(rank_reward, layout_reward).GetComponent<RewardItemNew>();
|
|
RewardItemNew rank_reward2 = Instantiate(rank_reward, layout_reward).GetComponent<RewardItemNew>();
|
|
RewardItemNew rank_reward3 = Instantiate(rank_reward, layout_reward).GetComponent<RewardItemNew>();
|
|
rank_reward1.gameObject.SetActive(true);
|
|
rank_reward2.gameObject.SetActive(true);
|
|
rank_reward3.gameObject.SetActive(true);
|
|
|
|
if (rankTarget.NextTarget <= 0)
|
|
{
|
|
//最后一个
|
|
rankTarge1 = tables.TbRankTargets.GetOrDefault(TargetList[^2]);
|
|
rankTarge2 = tables.TbRankTargets.GetOrDefault(TargetList[^1]);
|
|
rankTarge3 = tables.TbRankTargets.GetOrDefault(TargetList[^1]);
|
|
rank_bar1.fillAmount = 1;
|
|
rank_bar2.fillAmount = 1;
|
|
rank_bar3.fillAmount = curCount / (float)rankTarget.TokenRequired;
|
|
|
|
}
|
|
else if (rankTarget.TaskID == TargetList[0])
|
|
{
|
|
//第一个
|
|
rankTarge1 = rankTarget;
|
|
rankTarge2 = tables.TbRankTargets.GetOrDefault(rankTarget.NextTarget);
|
|
rankTarge3 = tables.TbRankTargets.GetOrDefault(rankTarge2.NextTarget);
|
|
rank_bar1.fillAmount = curCount / (float)rankTarget.TokenRequired;
|
|
rank_bar2.fillAmount = 0;
|
|
rank_bar3.fillAmount = 0;
|
|
}
|
|
else
|
|
{
|
|
rankTarge1 = tables.TbRankTargets.GetOrDefault(TargetList[curIndex - 1]);
|
|
rankTarge2 = rankTarget;
|
|
rankTarge3 = tables.TbRankTargets.GetOrDefault(rankTarget.NextTarget);
|
|
rank_bar1.fillAmount = 1;
|
|
rank_bar2.fillAmount = curCount / (float)rankTarget.TokenRequired;
|
|
rank_bar3.fillAmount = 0;
|
|
}
|
|
itemData = playerItemData.GetItemDataOne(rankTarge1.DropID);
|
|
rank_reward1.SetData(itemData);
|
|
itemData = playerItemData.GetItemDataOne(rankTarge2.DropID);
|
|
rank_reward2.SetData(itemData);
|
|
itemData = playerItemData.GetItemDataOne(rankTarge3.DropID);
|
|
rank_reward3.SetData(itemData);
|
|
|
|
if (curCount >= rankTarget.TokenRequired)
|
|
{
|
|
rank_bar1.fillAmount = 1;
|
|
rank_bar2.fillAmount = 1;
|
|
rank_bar3.fillAmount = 1;
|
|
rank_rewardItem.SetReceived(true);
|
|
rank_reward1.SetReceived(true);
|
|
rank_reward2.SetReceived(true);
|
|
rank_reward3.SetReceived(true);
|
|
reward.Play("bubble_task_out");
|
|
yield break;
|
|
}
|
|
yield return new WaitForSeconds(0.5f);
|
|
if (rankTarget.NextTarget <= 0)
|
|
{
|
|
rank_bar3.DOFillAmount(endCount / (float)rankTarget.TokenRequired, time);
|
|
}
|
|
else if (rankTarget.TaskID == TargetList[0])
|
|
{
|
|
rank_bar1.DOFillAmount(endCount / (float)rankTarget.TokenRequired, time);
|
|
}
|
|
else
|
|
{
|
|
rank_bar2.DOFillAmount(endCount / (float)rankTarget.TokenRequired, time);
|
|
}
|
|
yield return new WaitForSeconds(time);
|
|
reward.Play("bubble_task_out");
|
|
}
|
|
void TaskOut()
|
|
{
|
|
reward.Play("bubble_task_out");
|
|
GContext.Publish(new ShowData());
|
|
}
|
|
private void OnDisable()
|
|
{
|
|
reward.Stop();
|
|
reward.gameObject.SetActive(false);
|
|
GContext.Publish(new ShowData());
|
|
}
|
|
}
|
|
|