Files
ft/Client/Assets/Scripts/UI/PartnerStatue/EventPartnerStatueSlotView.cs
2026-06-29 21:18:33 +08:00

133 lines
4.5 KiB
C#

using asap.core;
using GameCore;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(Button))]
public class EventPartnerStatueSlotView : MonoBehaviour
{
[SerializeField] private Head head;
[SerializeField] private TMP_Text textDisplayName, textAddScore;
[SerializeField] private Image progressBar;
[SerializeField] private RewardItemNew rewardItem;
[SerializeField] private GameObject goGreatReward, goEmpty, goPlayer, goAddScore, goInvitationRedPoint, goFinished;
[SerializeField] private Button btnStatue;
[SerializeField] private Image statueMask;
private int _stage, _idx;
private bool _isEmpty;
private void Start()
{
btnStatue.onClick.AddListener(OnClickBtnStatue);
}
public void Init(EventPartnerStatueSlotViewData data)
{
_isEmpty = data.IsEmpty;
_idx = data.Index;
if (data.IsEmpty)
{
goEmpty.SetActive(true);
goPlayer.SetActive(false);
goInvitationRedPoint.SetActive(data.HasInvitation);
goFinished.SetActive(false);
return;
}
if (data.IsClaimed)
{
goEmpty.SetActive(false);
goPlayer.SetActive(false);
goInvitationRedPoint.SetActive(false);
goFinished.SetActive(true);
SetStatueState(99);
return;
}
goEmpty.SetActive(false);
goPlayer.SetActive(true);
goInvitationRedPoint.SetActive(false);
goFinished.SetActive(false);
head.SetData(data.Info.AvatarUrl);
textDisplayName.text = data.Info.DisplayName;
_stage = data.Stage;
progressBar.fillAmount = data.Progress;
if (data.Reward == null)
{
goGreatReward.SetActive(true);
rewardItem.gameObject.SetActive(false);
}
else
{
goGreatReward.SetActive(false);
rewardItem.gameObject.SetActive(true);
rewardItem.SetData(data.Reward);
}
SetStatueState(_stage);
if (data.ScoreToAdd > 0)
{
goAddScore.SetActive(true);
textAddScore.text = "+" + data.ScoreToAdd.ToString();
}
else
{
goAddScore.SetActive(false);
}
}
private void Reset()
{
goEmpty = transform.Find("empty").gameObject;
goInvitationRedPoint = transform.Find("empty/redpoints").gameObject;
goPlayer = transform.Find("player").gameObject;
head = transform.Find("player/head").GetComponent<Head>();
textDisplayName = transform.Find("player/head/text_player_name").GetComponent<TMP_Text>();
progressBar = transform.Find("player/head/bg_bar/bar").GetComponent<Image>();
rewardItem = transform.Find("player/head/bg_bar/reward").GetComponent<RewardItemNew>();
goGreatReward = transform.Find("player/head/bg_bar/icon_grand_reward").gameObject;
btnStatue = GetComponent<Button>();
statueMask = transform.Find("mask").GetComponent<Image>();
goAddScore = transform.Find("player/head/add").gameObject;
textAddScore = transform.Find("player/head/add/text_add").GetComponent<TMP_Text>();
goFinished = transform.Find("finished").gameObject;
}
private async void OnClickBtnStatue()
{
var arc = GContext.container.Resolve<EventPartnerStatueArc>();
GameObject panelGo;
// # if UNITY_EDITOR
// if (_idx == 0)
// arc.EventAggregator.Publish(new EventPartnerStatueEnterBuild{SlotIdx = _idx});
// else
// panelGo = await UIManager.Instance.ShowUINotLoading(UITypes.EventPartnerStatueInvitationPanel);
// return;
// #endif
if (_isEmpty)
{
panelGo = await UIManager.Instance.ShowUINotLoading(UITypes.EventPartnerStatueInvitationPanel);
}
else
{
// Debug.Log($"<color=cyan>[EventPartnerStatue]Enter build {_idx}!</color>");
arc.EventAggregator.Publish(new EventPartnerStatueEnterBuild{SlotIdx = _idx});
}
}
private async void SetStatueState(int stage)
{
var arc = GContext.container.Resolve<EventPartnerStatueArc>();
var maskList = arc.TableContext.GetMaskUrlList(_idx);
if (stage >= maskList.Count)
{
statueMask.gameObject.SetActive(false);
}
else
{
statueMask.gameObject.SetActive(true);
await GContext.container.Resolve<IUIService>().SetImageSprite(statueMask, maskList[maskList.Count - 1 - stage]);
}
}
}