| using UnityEngine; | 
| using UnityEngine.UI; | 
| using UnityEngine.Events; | 
|   | 
| public class GiftBaseCell : MonoBehaviour | 
| { | 
|   | 
|     Image m_QualityBG; | 
|     Image qualityBG | 
|     { | 
|         get | 
|         { | 
|             if (m_QualityBG == null) | 
|             { | 
|                 m_QualityBG = this.transform.GetComponent<Image>("Container_GiftCell/qualityIcon"); | 
|             } | 
|             return m_QualityBG; | 
|         } | 
|     } | 
|   | 
|     Button m_GiftBtn; | 
|     Button giftBtn | 
|     { | 
|         get | 
|         { | 
|             if (m_GiftBtn == null) | 
|             { | 
|                 m_GiftBtn = this.transform.GetComponent<Button>("Container_GiftCell"); | 
|             } | 
|             return m_GiftBtn; | 
|         } | 
|     } | 
|   | 
|   | 
|     Text m_GiftName; | 
|     Text giftName | 
|     { | 
|         get | 
|         { | 
|             if (m_GiftName == null) | 
|             { | 
|                 m_GiftName = this.transform.GetComponent<Text>("Container_GiftCell/name"); | 
|             } | 
|             return m_GiftName; | 
|         } | 
|     } | 
|   | 
|     OutlineEx m_TextOutline; | 
|     OutlineEx textOutline | 
|     {  | 
|         get | 
|         { | 
|             if (m_TextOutline == null) | 
|             { | 
|                 m_TextOutline = this.transform.GetComponent<OutlineEx>("Container_GiftCell/name"); | 
|             } | 
|             return m_TextOutline; | 
|         } | 
|     } | 
|   | 
|     Transform m_LvRect; | 
|     Transform lvRect | 
|     { | 
|         get | 
|         { | 
|             if (m_LvRect == null) | 
|             { | 
|                 m_LvRect = this.transform.Find("Container_GiftCell/lvrect"); | 
|             } | 
|             return m_LvRect; | 
|         } | 
|     } | 
|   | 
|     Text m_LvText; | 
|     Text lvText | 
|     { | 
|         get | 
|         { | 
|             if (m_LvText == null) | 
|             { | 
|                 m_LvText = this.transform.GetComponent<Text>("Container_GiftCell/lvrect/lv"); | 
|             } | 
|             return m_LvText; | 
|         } | 
|     } | 
|   | 
|     Image m_StateImg; | 
|     Image stateImg | 
|     { | 
|         get | 
|         { | 
|             if (m_StateImg == null) | 
|             { | 
|                 m_StateImg = this.transform.GetComponent<Image>("Container_GiftCell/state"); | 
|             } | 
|             return m_StateImg; | 
|         } | 
|     } | 
|   | 
|     Image m_AwakeLockImg;   //重生降低觉醒等级锁定的图片 | 
|     Image awakeLockImg | 
|     { | 
|         get | 
|         { | 
|             if (m_AwakeLockImg == null) | 
|             { | 
|                 m_AwakeLockImg = this.transform.GetComponent<Image>("Container_GiftCell/lock"); | 
|             } | 
|             return m_AwakeLockImg; | 
|         } | 
|     } | 
|   | 
|   | 
|   | 
|     void Awake() | 
|     { | 
|         LoadPrefab(); | 
|     } | 
|   | 
|     //showState 0:不显示 1:新增 2:提升 | 
|     //giftID 0 :代表灰色需升星激活 -1:代表棕色需觉醒激活,其他根据配表,没有天赋的外层控制显隐 | 
|     public void Init(int giftID, int lv, int showState = 0, int heroID = 0, int index = 0, int awakeLevel = 0) | 
|     { | 
|         LoadPrefab();   //存在被卸载的可能,重新加载 | 
|         if (HeroTalentConfig.HasKey(giftID)) | 
|         { | 
|             var config = HeroTalentConfig.Get(giftID); | 
|             qualityBG.SetSprite("GiftQualityBG" + config.Quality); | 
|             giftName.text = config.Name; | 
|             giftName.color = GetColor(config.Quality); | 
|             textOutline.OutlineColor = GetOutlineColor(config.Quality); | 
|             lvText.text = lv.ToString(); | 
|             lvRect.SetActive(lv > 0); | 
|             stateImg.SetActive(showState > 0); | 
|             stateImg.SetSprite("GiftState" + showState); | 
|             stateImg.SetNativeSize(); | 
|   | 
|             //特殊处理重生降低觉醒等级锁定的天赋 | 
|             if (index >= HeroUIManager.Instance.normalGiftMaxCnt) | 
|             { | 
|                 awakeLockImg.SetActive(HeroAwakeConfig.GetAwakeLVByUnLockGiftIndex(heroID, index) > awakeLevel); | 
|             } | 
|             else | 
|             { | 
|                 awakeLockImg.SetActive(false); | 
|             } | 
|         } | 
|         else | 
|         { | 
|             qualityBG.SetSprite("GiftQualityBG" + giftID); | 
|             giftName.text = string.Empty; | 
|             lvRect.SetActive(false); | 
|             stateImg.SetActive(false); | 
|             awakeLockImg.SetActive(false); | 
|         } | 
|         giftBtn.AddListener(() => { ShowSmallTip(giftID, lv, heroID, index, awakeLevel); }); | 
|     } | 
|   | 
|     void ShowSmallTip(int giftID, int giftLV, int heroID, int index, int awakeLevel) | 
|     { | 
|         SmallTipWin.worldPos = CameraManager.uiCamera.ScreenToWorldPoint(Input.mousePosition); | 
|         if (giftID > 0) | 
|         { | 
|             var giftConfig = HeroTalentConfig.Get(giftID); | 
|             SmallTipWin.showText = Language.Get("SmallTipFomat", giftConfig.Name + " " + Language.Get("L1113", giftLV), | 
|             Language.Get("HeroGift5", PlayerPropertyConfig.Get(giftConfig.AttrID).Name, PlayerPropertyConfig.GetValueDescription(giftConfig.AttrID, giftConfig.AttrValue*giftLV))); | 
|   | 
|             if (index >= HeroUIManager.Instance.normalGiftMaxCnt) | 
|             { | 
|                 int needAwakeLV = HeroAwakeConfig.GetAwakeLVByUnLockGiftIndex(heroID, index); | 
|                 if (needAwakeLV > awakeLevel) | 
|                 { | 
|                     SmallTipWin.showText += "\n" + Language.Get("HeroAwake18", needAwakeLV); | 
|                 } | 
|             } | 
|   | 
|   | 
|             UIManager.Instance.OpenWindow<SmallTipWin>(); | 
|   | 
|         } | 
|         else if (giftID == 0) | 
|         { | 
|             SmallTipWin.showText = Language.Get("HeroGift1"); | 
|             UIManager.Instance.OpenWindow<SmallTipWin>(); | 
|         } | 
|         else if (giftID == -1) | 
|         {  | 
|             SmallTipWin.showText = Language.Get("HeroGift2", HeroAwakeConfig.GetAwakeLVByUnLockGiftIndex(heroID, index)); | 
|             UIManager.Instance.OpenWindow<SmallTipWin>(); | 
|         } | 
|     } | 
|   | 
|   | 
|     Color32 GetColor(int quality) | 
|     { | 
|         if (quality == 1) | 
|         { | 
|             //D196FF | 
|             return new Color32(209, 150, 255, 255); | 
|         } | 
|         else if (quality == 2) | 
|         { | 
|             //ffda8c | 
|             return new Color32(255, 218, 140, 255); | 
|         } | 
|         else if (quality == 3) | 
|         { | 
|             //ffbd88 | 
|             return new Color32(255, 189, 136, 255); | 
|         } | 
|         else if (quality == 4) | 
|         { | 
|             //ff8888 | 
|             return new Color32(255, 136, 136, 255); | 
|         } | 
|         return new Color32(255, 255, 255, 255); | 
|     } | 
|   | 
|     Color32 GetOutlineColor(int quality) | 
|     { | 
|         if (quality == 1) | 
|         { | 
|             //692088 | 
|             return new Color32(105, 32, 136, 128); | 
|         } | 
|         else if (quality == 2) | 
|         { | 
|             //886220 | 
|             return new Color32(136, 98, 32, 128); | 
|         } | 
|         else if (quality == 3) | 
|         { | 
|             //884a20 | 
|             return new Color32(136, 74, 32, 128); | 
|         } | 
|         else if (quality == 4) | 
|         { | 
|             //882020 | 
|             return new Color32(136, 32, 32, 128); | 
|         } | 
|         return new Color32(0, 0, 0, 128); | 
|     } | 
|   | 
|     GameObject cellContainer; | 
|     protected void LoadPrefab() | 
|     { | 
|         if (cellContainer != null) | 
|             return; | 
|          | 
|         var tmp = transform.Find("Container_GiftCell"); | 
|         if (tmp != null) | 
|         { | 
|             cellContainer = tmp.gameObject; | 
|             return; | 
|         } | 
|         if (cellContainer == null) | 
|         { | 
|             cellContainer = UIUtility.CreateWidget("GiftBaseCell", "Container_GiftCell"); | 
|   | 
|             if (cellContainer != null) | 
|             { | 
|                 cellContainer.transform.SetParentEx(this.transform, Vector3.zero, Quaternion.identity, Vector3.one); | 
|                 cellContainer.transform.SetAsFirstSibling(); | 
|             } | 
|         } | 
|   | 
|         //缩放到和父rect一样大 | 
|         var scale = 1f; | 
|         var rect = cellContainer.GetComponent<RectTransform>(); | 
|         var parentRect = transform.GetComponent<RectTransform>(); | 
|         float width = parentRect.sizeDelta.x; | 
|         if (width <= 0f) | 
|         { | 
|             //外部控制了尺寸获取为0 | 
|             GridLayoutGroup grid = GetComponentInParent<GridLayoutGroup>(); | 
|             if (grid != null) | 
|             {  | 
|                 width = grid.cellSize.x; | 
|             } | 
|              | 
|         } | 
|         scale = width / rect.sizeDelta.x; | 
|         cellContainer.transform.localScale = cellContainer.transform.localScale * scale; | 
|     } | 
| } |