using System; using UnityEngine; //头像模块 public class AvatarCell : MonoBehaviour { ButtonEx m_button; public ButtonEx button { get { if (m_button == null) { LoadPrefab(); m_button = this.GetComponent("AvatarCell/Img_FaceBG"); } return m_button; } } ImageEx m_FaceBGImage; public ImageEx faceBGImage { get { if (m_FaceBGImage == null) { LoadPrefab(); m_FaceBGImage = this.GetComponent("AvatarCell/Img_FaceBG"); } return m_FaceBGImage; } } EllipseMask m_FaceMask; public EllipseMask faceMask { get { if (m_FaceMask == null) { LoadPrefab(); m_FaceMask = this.GetComponent("AvatarCell/Img_FaceBG/Mask_Face"); } return m_FaceMask; } } UIFrame m_FaceUIFrame; public UIFrame faceUIFrame { get { if (m_FaceUIFrame == null) { LoadPrefab(); m_FaceUIFrame = this.GetComponent("AvatarCell/Img_FaceBG/Mask_Face/Img_Face"); } return m_FaceUIFrame; } } ImageEx m_FaceImage; public ImageEx faceImage { get { if (m_FaceImage == null) { LoadPrefab(); m_FaceImage = this.GetComponent("AvatarCell/Img_FaceBG/Mask_Face/Img_Face"); } return m_FaceImage; } } UIEffectPlayer m_faceSpine; public UIEffectPlayer faceSpine { get { if (m_faceSpine == null) { LoadPrefab(); m_faceSpine = this.GetComponent("AvatarCell/Img_FaceBG/Mask_Face/Img_Face/Spine_Face"); } return m_faceSpine; } } ImageEx m_FacePicImage; public ImageEx facePicImage { get { if (m_FacePicImage == null) { LoadPrefab(); m_FacePicImage = this.GetComponent("AvatarCell/Img_FaceBG/Img_FacePic"); } return m_FacePicImage; } } UIFrame m_FacePicUIFrame; public UIFrame facePicUIFrame { get { if (m_FacePicUIFrame == null) { LoadPrefab(); m_FacePicUIFrame = this.GetComponent("AvatarCell/Img_FaceBG/Img_FacePic"); } return m_FacePicUIFrame; } } UIEffectPlayer m_facePicSpine; public UIEffectPlayer facePicSpine { get { if (m_facePicSpine == null) { LoadPrefab(); m_facePicSpine = this.GetComponent("AvatarCell/Img_FaceBG/Img_FacePic/Spine_FacePic"); } return m_facePicSpine; } } RedpointBehaviour m_redpoint; public RedpointBehaviour redpoint { get { if (m_redpoint == null) { LoadPrefab(); m_redpoint = this.GetComponent("AvatarCell/Img_FaceBG/RedPoint"); } return m_redpoint; } } GameObject prefab; AvatarModel avatarModel; PhantasmPavilionManager manager { get { return PhantasmPavilionManager.Instance; } } private void Awake() { LoadPrefab(); } void OnEnable() { PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh; } void OnDisable() { PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefresh; } private void PlayerDataRefresh(PlayerDataType type) { if (type == PlayerDataType.Face || type == PlayerDataType.FacePic) { if (avatarModel == null || avatarModel.playerID != PlayerDatas.Instance.baseData.PlayerID) return; InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID, PlayerDatas.Instance.baseData.face, PlayerDatas.Instance.baseData.facePic)); } } protected void LoadPrefab() { if (prefab != null) return; var tmp = transform.Find("AvatarCell"); if (tmp != null) { prefab = tmp.gameObject; return; } prefab = UIUtility.CreateWidget("AvatarCell", "AvatarCell"); prefab.transform.SetParentEx(this.transform, Vector3.zero, Quaternion.identity, Vector3.one); prefab.transform.SetAsFirstSibling(); RectTransform prefabRect = prefab.GetComponent(); RectTransform parentRect = GetComponent(); if (prefabRect != null && parentRect != null) { prefabRect.anchorMin = new Vector2(0.5f, 0.5f); prefabRect.anchorMax = new Vector2(0.5f, 0.5f); prefabRect.sizeDelta = new Vector2(parentRect.rect.width, parentRect.rect.height); } } public void InitUI(AvatarModel model) { if (model == null) return; avatarModel = model; LoadPrefab(); //存在被卸载的可能,重新加载 int faceID = model.faceID; int facePicID = model.facePicID; manager.ShowFace(faceImage, faceSpine, faceUIFrame, faceMask, faceID); string str = AvatarHelper.GetAvatarBgColorStr(faceID); faceBGImage.SetSprite(str); int resourceType = manager.GetResourceType(PhantasmPavilionType.FacePic, facePicID); string resourceValue = manager.GetResourceValue(PhantasmPavilionType.FacePic, facePicID); manager.Show(facePicImage, facePicSpine, facePicUIFrame, resourceType, resourceValue); faceBGImage.SetNativeSize(); faceImage.SetNativeSize(); facePicImage.SetNativeSize(); } } public class AvatarModel { public int playerID { get; private set; } public int faceID { get; private set; } public int facePicID { get; private set; } public int redpointID { get; private set; } public Action clickAction { get; private set; } public AvatarModel(int playerID, int faceID, int facePicID, int redpointID = 0, Action clickAction = null) { this.playerID = playerID; this.faceID = faceID; this.facePicID = facePicID; this.redpointID = redpointID; this.clickAction = clickAction; } }