using System; using System.Collections.Generic; using DG.Tweening; using Runtime; using UnityEngine.UI; using TMPro; using TouchScript.Gestures.TransformGestures; using UnityEngine; using ZGame; using Random = UnityEngine.Random; namespace HK { public class DesignCoverItem : UIItemBase { [SerializeField] private Image imgDesignParent; [SerializeField] private TMP_InputField inpContent; [SerializeField] private List updatePosAndRotData; GameObject designItem; GameObject designItemOnlyOne; List designItems = new List(); public int maxSize = 160; [SerializeField] float doTweenTime = 1f; public override void OnInit() { base.OnInit(); #region AutoGen_Init imgDesignParent = GetValue("imgDesignParent"); inpContent = GetValue("inpContent"); #endregion EventManager.Instance.Subscribe(Product_DesignCover_SetShowEventArgs.EventId, Product_DesignCover_SetShowEvent); EventManager.Instance.Subscribe(ProductIsShowDesignCoverEventArgs.EventId, ProductIsShowDesignCoverEvent); EventManager.Instance.Subscribe(Product3SetTextPositionEventArgs.EventId, Product3SetTextPositionEvent); EventManager.Instance.Subscribe(Product2GenStickerEventArgs.EventId, Product2GenStickerEvent); EventManager.Instance.Subscribe(Product2DesignCoverClearEventArgs.EventId, Product2DesignCoverClearEvent); EventManager.Instance.Subscribe(Product2SetDesignCoverPositionEventArgs.EventId, Product2SetDesignCoverPositionEvent); designItem = ResourcesManager.Instance.Load(AssetConst.Assets_Res_Prefab_UI_Item_btnDesignCover_prefab); designItemOnlyOne = ResourcesManager.Instance.Load(AssetConst.Assets_Res_Prefab_UI_Item_btnDesignCover_prefab); IsOpenStickerTouch(false); IsOpenInputFiledTouch(false); } private void Product_DesignCover_SetShowEvent(object sender, GameEventArgs e) { var args = e as Product_DesignCover_SetShowEventArgs; IsOpenStickerTouch(args.isShow_Sticker); IsOpenInputFiledTouch(args.isShow_InputText); if (args.isShow_InputText && string.IsNullOrEmpty(inpContent.text)) { inpContent.placeholder.GetComponent().text = "Add Text..."; } else if (!args.isShow_InputText && string.IsNullOrEmpty(inpContent.text)) { inpContent.placeholder.GetComponent().text = ""; } } private void ProductIsShowDesignCoverEvent(object sender, GameEventArgs e) { var args = e as ProductIsShowDesignCoverEventArgs; gameObject.SetActive(args.isShow); } public override void OnShow() { base.OnShow(); EventManager.Instance.FireNow(this, new Product3SetTextTargetEventArgs(inpContent)); } private void IsOpenStickerTouch(bool isOpen) { foreach (var o in designItems) { o.GetComponent().enabled = isOpen; } } private void IsOpenInputFiledTouch(bool isOpen) { inpContent.GetComponent().enabled = isOpen; } private void Product3SetTextPositionEvent(object sender, GameEventArgs e) { var args = e as Product3SetTextPositionEventArgs; inpContent.transform.localPosition = args.pos; inpContent.transform.localEulerAngles = args.angle; inpContent.textComponent.alignment = args.alignmentOptions; } private void Product2DesignCoverClearEvent(object sender, GameEventArgs e) { foreach (var o in designItems) { GameObject.Destroy(o.gameObject); } designItems.Clear(); } private void Product2SetDesignCoverPositionEvent(object sender, GameEventArgs e) { var args = e as Product2SetDesignCoverPositionEventArgs; UpdatePosition(args.index); } private void Product2GenStickerEvent(object sender, GameEventArgs e) { var args = e as Product2GenStickerEventArgs; GenThemeItemToParent(args.currentTheme, args.sprite, args.color); } #region AutoGen_Method #endregion private void GenThemeItemToParent(ThemeScriptableObject theme, Sprite sprite, Color color) { GameObject obj; if (theme.isOnlyOne) { foreach (var o in designItems) { GameObject.Destroy(o.gameObject); } designItems.Clear(); obj = GameObject.Instantiate(designItemOnlyOne, imgDesignParent.transform); } else obj = GameObject.Instantiate(designItem, imgDesignParent.transform); var image = obj.GetComponent(); image.sprite = sprite; image.color = color; var rect = obj.GetComponent(); var rectTransform = imgDesignParent.GetComponent(); if (theme.isOnlyOne) { rect.sizeDelta = new Vector2(rectTransform.sizeDelta.x, rectTransform.sizeDelta.y); } else { var x = rectTransform.sizeDelta.x / 2; var y = rectTransform.sizeDelta.y / 2; rect.anchoredPosition = new Vector2(Random.Range(-x, x), Random.Range(-y, y)); var max = sprite.rect.width > sprite.rect.height ? sprite.rect.width : sprite.rect.height; var size = maxSize / max; rect.sizeDelta = new Vector2(size * sprite.rect.width, size * sprite.rect.height); // var f = Random.Range(1f, 2f); // obj.transform.localScale = Vector3.one * f; // obj.GetComponent(); } EventManager.Instance.FireNow(this, new Product2AddDesignCoverEventArgs(obj)); designItems.Add(obj); } private void UpdatePosition(int index) { transform.DOLocalMove(updatePosAndRotData[index].localPosition, doTweenTime); transform.DOLocalRotate(updatePosAndRotData[index].localRotation.eulerAngles, doTweenTime); transform.DOScale(updatePosAndRotData[index].localScale, doTweenTime); } public override void OnDispose() { base.OnDispose(); EventManager.Instance.Unsubscribe(Product_DesignCover_SetShowEventArgs.EventId, Product_DesignCover_SetShowEvent); EventManager.Instance.Unsubscribe(ProductIsShowDesignCoverEventArgs.EventId, ProductIsShowDesignCoverEvent); EventManager.Instance.Unsubscribe(Product3SetTextPositionEventArgs.EventId, Product3SetTextPositionEvent); EventManager.Instance.Unsubscribe(Product2GenStickerEventArgs.EventId, Product2GenStickerEvent); EventManager.Instance.Unsubscribe(Product2DesignCoverClearEventArgs.EventId, Product2DesignCoverClearEvent); EventManager.Instance.Unsubscribe(Product2SetDesignCoverPositionEventArgs.EventId, Product2SetDesignCoverPositionEvent); #region AutoGen_Dispose imgDesignParent = null; inpContent = null; #endregion } } }