备份CatanBuilding瘦身独立工程
This commit is contained in:
377
Assets/Scripts/UI/Home/HomeBtnRank.cs
Normal file
377
Assets/Scripts/UI/Home/HomeBtnRank.cs
Normal file
@@ -0,0 +1,377 @@
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user