using System; using System.Collections.Generic; using System.Linq; using UnityEngine; using Wizard.Scripts.Network.Data.TaskData.Arena; namespace Wizard; public class SelectSkinCardPlate : MonoBehaviour { private readonly Quaternion CARDOBJECT_ROTATION_QUATERNION = new Quaternion(0f, 0f, 0f, 0f); private const string SPOT_CARD_NUM_FORMAT = "[fcd24a]+{0}[-]"; [SerializeField] private GameObject _objCardRoot; [SerializeField] private UILabel _labelAcquiredOnCard; [SerializeField] private UILabel _labelCardName; [SerializeField] private UILabel _labelCardPossessionNum; [SerializeField] private UILabel _labelCardPossessionNumNormal; [SerializeField] private UILabel _labelCardPossessionNumPremium; [SerializeField] private UIToggle _toggleSelect; [SerializeField] private UILabel _labelToggle; [SerializeField] private UILabel _labelDescription; [SerializeField] private UILabel _labelAcquired; [SerializeField] private UIButton _buttonAcquire; private GameObject _cardObject; private SelectSkinCardInfo _skinCardInfo; private bool _isFirstToggleChange = true; private bool _isSetValue; public void SetData(SelectSkinCardInfo skinCardInfo, Action onClickSelectToggle, Dictionary selectCardStateDict, GameObject cardObject, GameObject evacuationParent, Action onClickAcquireButton) { _skinCardInfo = skinCardInfo; _labelCardName.text = UserGoods.getUserGoodsName(UserGoods.Type.Card, _skinCardInfo.CardId); DataMgr dataMgr = GameMgr.GetIns().GetDataMgr(); int possessionCardNum = dataMgr.GetPossessionCardNum(_skinCardInfo.CardId, isIncludingSpotCard: false); int spotCardNum = dataMgr.SpotCardData.GetSpotCardNum(_skinCardInfo.CardId); _labelCardPossessionNumNormal.text = possessionCardNum + ((spotCardNum > 0) ? $"[fcd24a]+{spotCardNum}[-]" : string.Empty); int cardId = _skinCardInfo.CardId + 1; int possessionCardNum2 = dataMgr.GetPossessionCardNum(cardId, isIncludingSpotCard: false); _labelCardPossessionNumPremium.text = possessionCardNum2.ToString(); int num = possessionCardNum + possessionCardNum2 + spotCardNum; _labelCardPossessionNum.text = num.ToString(); SetLabel(skinCardInfo); SetCardObject(cardObject, evacuationParent); if (onClickAcquireButton != null) { _buttonAcquire.gameObject.SetActive(value: true); _buttonAcquire.onClick.Clear(); _buttonAcquire.onClick.Add(new EventDelegate(delegate { GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_BTN_DECIDE); onClickAcquireButton(_skinCardInfo.CardId, _skinCardInfo.HasSkin); })); _toggleSelect.gameObject.SetActive(value: false); _labelToggle.gameObject.SetActive(value: false); _labelAcquiredOnCard.gameObject.SetActive(value: false); return; } UIManager.SetObjectToGrey(_toggleSelect.gameObject, !_skinCardInfo.HasSkin); UIManager.SetObjectToGrey(_labelToggle.gameObject, !_skinCardInfo.HasSkin); if (!_toggleSelect.value) { _toggleSelect.activeSprite.alpha = 0f; } _toggleSelect.onChange.Clear(); _toggleSelect.onChange.Add(new EventDelegate(delegate { if (!_isFirstToggleChange) { onClickSelectToggle(_skinCardInfo.CardId, !_toggleSelect.value, this); } _isFirstToggleChange = false; })); SetSelectStatus(selectCardStateDict, isOnClickToggle: false); if (_buttonAcquire != null) { _buttonAcquire.gameObject.SetActive(value: false); } } private void SetLabel(SelectSkinCardInfo skinCardInfo) { _labelDescription.text = GetRewardListText(skinCardInfo); _labelAcquired.gameObject.SetActive(skinCardInfo.HasSkin); _labelAcquired.text = Data.SystemText.Get("Shop_0166"); } private static string GetRewardListText(SelectSkinCardInfo skinCardInfo) { List list = skinCardInfo.RewardList.Select((Wizard.Scripts.Network.Data.TaskData.Arena.Reward reward) => reward.UserGoodsData).OrderBy(GachaUtil.GetRewardListSortIndex).Select(GachaUtil.GetRewardListGoodsTypeName) .Distinct() .ToList(); if (list.Count == 0) { Debug.LogError($"reward is not set : {skinCardInfo.CardId} {UserGoods.getUserGoodsName(UserGoods.Type.Card, skinCardInfo.CardId)}"); return string.Empty; } return UIUtil.CreateListText(list, Data.SystemText.Get("Shop_0226"), Data.SystemText.Get("Shop_0234")); } public void SetSelectStatus(Dictionary selectCardStateDict, bool isOnClickToggle) { if (!_isSetValue) { _isSetValue = true; _toggleSelect.value = !selectCardStateDict[_skinCardInfo.CardId]; if (isOnClickToggle) { GameMgr.GetIns().GetSoundMgr().PlaySe(_toggleSelect.value ? Se.TYPE.SYS_TOGGLE_ON : Se.TYPE.SYS_TOGGLE_OFF); } if (_cardObject != null) { SetObjectToGreyEnableCollider(_cardObject, !selectCardStateDict[_skinCardInfo.CardId]); _labelAcquiredOnCard.gameObject.SetActive(!selectCardStateDict[_skinCardInfo.CardId]); } _isSetValue = false; } } private void SetCardObject(GameObject cardObject, GameObject evacuationParent) { if (_cardObject != null) { _cardObject.SetActive(value: false); _cardObject.transform.parent = evacuationParent.transform; } cardObject.transform.parent = _objCardRoot.transform; cardObject.transform.localPosition = Vector3.zero; cardObject.transform.rotation = CARDOBJECT_ROTATION_QUATERNION; cardObject.SetActive(value: true); _cardObject = cardObject; } private void SetObjectToGreyEnableCollider(GameObject o, bool b) { Color color = (b ? LabelDefine.TEXT_COLOR_BUTTON_DISABLE : LabelDefine.TEXT_COLOR_BUTTON_ENABLE); Color color2 = (b ? LabelDefine.TEXT_COLOR_BUTTON_DISABLE : ((Color32)Color.white)); string text = "_grey"; if (b) { if (!o.name.Contains(text)) { o.name += text; } } else { o.name = o.name.Replace(text, ""); } UISprite[] components = o.GetComponents(); for (int i = 0; i < components.Length; i++) { components[i].color = color2; } UITexture[] componentsInChildren = o.GetComponentsInChildren(includeInactive: true); for (int i = 0; i < componentsInChildren.Length; i++) { componentsInChildren[i].color = color2; } components = o.GetComponentsInChildren(includeInactive: true); for (int i = 0; i < components.Length; i++) { components[i].color = color2; } UIWidget[] componentsInChildren2 = o.GetComponentsInChildren(includeInactive: true); for (int i = 0; i < componentsInChildren2.Length; i++) { componentsInChildren2[i].color = color2; } UIButton[] componentsInChildren3 = o.GetComponentsInChildren(includeInactive: true); foreach (UIButton obj in componentsInChildren3) { obj.defaultColor = color2; obj.disabledColor = color2; } UILabel[] componentsInChildren4 = o.GetComponentsInChildren(includeInactive: true); for (int i = 0; i < componentsInChildren4.Length; i++) { componentsInChildren4[i].color = color; } TweenColor[] componentsInChildren5 = o.GetComponentsInChildren(includeInactive: true); foreach (TweenColor obj2 in componentsInChildren5) { obj2.from = color2; obj2.to = color2; } } }