using UnityEngine; public class GuildAtkDefBatTreasureGrid : MonoBehaviour { [SerializeField] ImageEx bdImage; [SerializeField] ButtonEx clickButton; [SerializeField] ImageEx topImage; [SerializeField] TextEx topNumText; [SerializeField] OutlineEx topNumOutline; [SerializeField] UIEffectPlayer uiEffectPlayer; [SerializeField] Color32 topGoldOddColor; [SerializeField] Color32 topGoldEvenColor; [SerializeField] Color32 topSilverOddColor; [SerializeField] Color32 topSilverEvenColor; [SerializeField] Color32 topGoldOddOutlineColor; [SerializeField] Color32 topGoldEvenOutlineColor; [SerializeField] Color32 topSilverOddOutlineColor; [SerializeField] Color32 topSilverEvenOutlineColor; [SerializeField] ImageEx qualityImage; [SerializeField] TextEx numText; [SerializeField] ImageEx itemImage; [SerializeField] TextEx itemCntText; [SerializeField] TextEx itemNameText; private int gridIndex; private bool isOpened; private ushort awardID; private string playerName; /// /// 初始化格子 /// /// 格子序号 1~n /// 是否胜利 /// 是否已开启 /// 奖励ID(已开启时有效) /// 开启格子的玩家名 /// 是否播放开启动画(翻牌破碎特效) public void Init(int index, bool isWin, bool opened, ushort awardId, string name, bool playOpenAnim = false) { gridIndex = index; isOpened = opened; awardID = awardId; playerName = name; // 格子序号 topNumText.text = index.ToString(); numText.text = index.ToString(); // topImage按胜负/奇偶设置不同颜色和图片 bool isOdd = index % 2 == 1; string topSpriteKey; Color32 numColor; Color32 outlineColor; if (isWin) { topSpriteKey = isOdd ? "GuildAtkDefBatGridTopGoldOdd" : "GuildAtkDefBatGridTopGoldEven"; numColor = isOdd ? topGoldOddColor : topGoldEvenColor; outlineColor = isOdd ? topGoldOddOutlineColor : topGoldEvenOutlineColor; } else { topSpriteKey = isOdd ? "GuildAtkDefBatGridTopSilverOdd" : "GuildAtkDefBatGridTopSilverEven"; numColor = isOdd ? topSilverOddColor : topSilverEvenColor; outlineColor = isOdd ? topSilverOddOutlineColor : topSilverEvenOutlineColor; } bdImage.SetSprite(isWin ? "GuildAtkDefBatGridGoldBg" : "GuildAtkDefBatGridSilverBg"); topImage.SetSprite(topSpriteKey); topNumText.color = numColor; topNumOutline.OutlineColor = outlineColor; clickButton.SetListener(OnClickGrid); uiEffectPlayer.onComplete = null; // 清理回调,防止格子复用时残留 if (playOpenAnim) PlayOpenEffect(); else RefreshDisplay(); } private void RefreshDisplay() { topImage.SetActive(!isOpened); topNumText.SetActive(!isOpened); qualityImage.SetActive(isOpened); itemImage.SetActive(isOpened); itemCntText.text = string.Empty; itemNameText.text = isOpened ? playerName : string.Empty; if (isOpened && awardID > 0) { var config = FamilyAtkDefBatTreasureConfig.Get(awardID); if (config != null) { var itemConfig = ItemConfig.Get(config.ItemID); if (itemConfig != null) { itemImage.SetItemSprite(config.ItemID); itemCntText.text = config.ItemCount > 1 ? $"x{config.ItemCount}" : string.Empty; } qualityImage.SetSprite($"GuildAtkDefBatTreasureAwardColor{config.AwardColor}"); } } } private void OnClickGrid() { if (isOpened) { if (awardID > 0) { var config = FamilyAtkDefBatTreasureConfig.Get(awardID); if (config != null) ItemTipUtility.Show(config.ItemID); } return; } var mgr = GuildAtkDefBatManager.Instance; if (mgr.GetMyOpenRemainCount() <= 0) { SysNotifyMgr.Instance.ShowTip("GuildAtkDefBat4"); return; } mgr.SendOpenTreasure((byte)gridIndex); } /// /// 播放开启动画(隐藏topImage,播放格子破碎特效) /// private void PlayOpenEffect() { topImage.SetActive(false); topNumText.SetActive(false); uiEffectPlayer.Play(); RefreshDisplay(); uiEffectPlayer.onComplete = OnOpenEffectComplete; } private void OnOpenEffectComplete() { uiEffectPlayer.onComplete = null; // 清除回调,防止重复调用 GuildAtkDefBatManager.Instance.ShowTreasureAward(); } }