using System; using System.Collections.Generic; using UnityEngine.UI; using TMPro; using UnityEngine; using ZGame; using Random = UnityEngine.Random; namespace HK.FUJIFILM { public class A11ozCeramicsMugItem : UIItemBase { [SerializeField] protected RawImage raw; [SerializeField] protected Image imgTemplate; protected ProductScriptableObject productScriptableObject; protected Dictionary designItems = new Dictionary(); protected GameObject modelObject; protected GameObject currentDesignGo; public override void OnInit() { base.OnInit(); #region AutoGen_Init raw = GetValue("raw"); imgTemplate = GetValue("imgTemplate"); #endregion } private void Update() { if (Input.GetKeyDown(KeyCode.W)) { } } public void StartRenderPrinting(Action> callback = null) { RenderPrintingManager.Instance.StartRenderPrinting(currentDesignGo, this.currentDesignGo, callback); } public void StartRenderPrintingOnlyDesign(Action> callback = null) { RenderPrintingManager.Instance.StartRenderPrinting(null, this.currentDesignGo, callback); } public override void OnShow() { base.OnShow(); EventManager.Instance.Subscribe(ProductA11ozCeramicsMugItemEventArgs.EventId, ProductA11ozCeramicsMugItemEvent); EventManager.Instance.Subscribe(ProductDesgin_GenPhotoEventArgs.EventId, ProductDesgin_GenPhotoEvent); } public override void OnHide() { base.OnHide(); EventManager.Instance.Unsubscribe(ProductA11ozCeramicsMugItemEventArgs.EventId, ProductA11ozCeramicsMugItemEvent); EventManager.Instance.Unsubscribe(ProductDesgin_GenPhotoEventArgs.EventId, ProductDesgin_GenPhotoEvent); } protected virtual void ProductDesgin_GenPhotoEvent(object sender, GameEventArgs e) { var args = e as ProductDesgin_GenPhotoEventArgs; if (!designItems.TryGetValue(args.ID, out ImageDesignItem designItem)) return; var loadGameObject = ResourcesManager.Instance.LoadGameObject( AssetConst.Assets_Res_FUJIFILM_Prefabs_UI_Item_imgDesignItem_prefab, designItem.DesignParent); var image = loadGameObject.GetComponent(); image.sprite = args.sprite; ImageScaler.ScaleImageWithMaxSize_Scale(image, designItem.SizeDeltaMax); // ImageScaler.ScaleImageWithSize(image, designItem.SizeDeltaMax); var itemPosition = Vector2.zero; image.rectTransform.anchoredPosition = itemPosition; loadGameObject.SetActive(true); // 随机位置 // var rectTransformSizeDelta = designItem.RectTransform.sizeDelta / 2; // loadGameObject.GetComponent().anchoredPosition = new Vector2( // Random.Range(-rectTransformSizeDelta.x, rectTransformSizeDelta.x), // Random.Range(-rectTransformSizeDelta.y, rectTransformSizeDelta.y)); EventManager.Instance.FireNow(this, new MugActualModel_Fixed_GenPhotoEventArgs(loadGameObject, designItem.ID)); } public void SetData(ProductScriptableObject productScriptableObject) { this.productScriptableObject = productScriptableObject; if (string.IsNullOrEmpty(productScriptableObject.productGameObjectPfbPath)) return; if (productScriptableObject.is2D) { modelObject = ResourcesManager.Instance.LoadGameObject(productScriptableObject.productGameObjectPfbPath, transform); modelObject.GetComponent().anchoredPosition = productScriptableObject.modelPosition; } else { modelObject = ResourcesManager.Instance.Load3DModelGameObject(productScriptableObject.productGameObjectPfbPath); modelObject.GetComponent().localPosition = productScriptableObject.modelPosition; var mugActualModel = modelObject.GetComponent(); GetComponent().model = mugActualModel; mugActualModel.InitModel(imgTemplate.rectTransform.sizeDelta); } } protected virtual void ProductA11ozCeramicsMugItemEvent(object sender, GameEventArgs e) { var args = e as ProductA11ozCeramicsMugItemEventArgs; designItems.Clear(); for (var i = 0; i < imgTemplate.transform.childCount; i++) { GameObject.Destroy(imgTemplate.transform.GetChild(i).gameObject); } imgTemplate.sprite = args.sprite; currentDesignGo = ResourcesManager.Instance.LoadGameObject(args.designItem.designItemAssetPath, imgTemplate.transform); if (currentDesignGo.TryGetComponent(typeof(Image), out var image)) { var img = ((Image)image); img.sprite = args.sprite; img.enabled = productScriptableObject.isShowTemplate; } var list = currentDesignGo.transform.FindChildDeeps(); foreach (var item in list) { item.SetData(GuidGenerator.GenerateStandardGuid()); designItems.Add(item.ID, item); } EventManager.Instance.FireNow(this, new ProduceDesign_CopyDesignItemAssetEventArgs(currentDesignGo, productScriptableObject, args.sprite, designItems)); } #region AutoGen_Method #endregion public override void OnDispose() { base.OnDispose(); GameObject.Destroy(modelObject); #region AutoGen_Dispose raw = null; imgTemplate = null; #endregion } } }