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 bars; List rewards; float time = 0.3f; float width = 190f; private void Awake() { tables = GContext.container.Resolve(); playerItemData = GContext.container.Resolve(); _fishingEventData = GContext.container.Resolve(); reward = transform.Find("reward").GetComponent(); layout = reward.transform.Find("bg_bar/ScrollView/Viewport/layout").GetComponent(); 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().rect.width; rank_rewardItem = reward.transform.Find("btn_reward/reward").GetComponent(); } public void Init(int curCount) { var rankInit = _fishingEventData.rankInit; var TargetList = rankInit.TargetList; bool isUp = _fishingEventData.preRankTarget != null; if (!isUp && _fishingEventData.rankTarget.TokenRequiredB <= curCount) { return; } var maxCollectingTarget = tables.TbRankTargets.GetOrDefault(TargetList[^1]); var itemData = playerItemData.GetItemDataOneLureInflation(_fishingEventData.RankTargetInflation, maxCollectingTarget.DropID); if (itemData != null) { rank_rewardItem.SetData(itemData); } this.curCount = curCount; reward.gameObject.SetActive(true); if (isUp) { SetUpData(); } else { StartCoroutine(SetData()); } } /// /// 有升级 /// /// void SetUpData() { bars = new List(); rewards = new List(); //分析几种情况 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.TokenRequiredB, 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.TokenRequiredB, time); } } yield return new WaitForSeconds(time); TaskOut(); } /// /// 有升级没有二次位移 /// /// IEnumerator SetData1() { List 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.TokenRequiredB, 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.TokenRequiredB, time); } } } yield return new WaitForSeconds(time); TaskOut(); } void AddItem(RankTargets last) { Image image = Instantiate(rank_bar, layout_bar).GetComponent(); image.gameObject.SetActive(true); image.fillAmount = 0; bars.Add(image); RewardItemNew rank_reward1 = Instantiate(rank_reward, layout_reward).GetComponent(); rank_reward1.gameObject.SetActive(true); rewards.Add(rank_reward1); var itemData = playerItemData.GetItemDataOneLureInflation(_fishingEventData.RankTargetInflation, last.DropID); rank_reward1.SetData(itemData); } /// /// 没有升级的情况 /// /// 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 rank_bar2 = Instantiate(rank_bar, layout_bar).GetComponent(); Image rank_bar3 = Instantiate(rank_bar, layout_bar).GetComponent(); 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 rank_reward2 = Instantiate(rank_reward, layout_reward).GetComponent(); RewardItemNew rank_reward3 = Instantiate(rank_reward, layout_reward).GetComponent(); 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.TokenRequiredB; } 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.TokenRequiredB; 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.TokenRequiredB; rank_bar3.fillAmount = 0; } itemData = playerItemData.GetItemDataOneLureInflation(_fishingEventData.RankTargetInflation, rankTarge1.DropID); rank_reward1.SetData(itemData); itemData = playerItemData.GetItemDataOneLureInflation(_fishingEventData.RankTargetInflation, rankTarge2.DropID); rank_reward2.SetData(itemData); itemData = playerItemData.GetItemDataOneLureInflation(_fishingEventData.RankTargetInflation, rankTarge3.DropID); rank_reward3.SetData(itemData); if (curCount >= rankTarget.TokenRequiredB) { 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.TokenRequiredB, time); } else if (rankTarget.TaskID == TargetList[0]) { rank_bar1.DOFillAmount(endCount / (float)rankTarget.TokenRequiredB, time); } else { rank_bar2.DOFillAmount(endCount / (float)rankTarget.TokenRequiredB, 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()); } }