FM/Assets/Scripts/FUJIFILM/UI/Item/A11ozCeramicsMugItem.cs

166 lines
6.2 KiB
C#

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<string, ImageDesignItem> designItems = new Dictionary<string, ImageDesignItem>();
protected GameObject modelObject;
protected GameObject currentDesignGo;
public override void OnInit()
{
base.OnInit();
#region AutoGen_Init
raw = GetValue<RawImage>("raw");
imgTemplate = GetValue<Image>("imgTemplate");
#endregion
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.W))
{
}
}
public void StartRenderPrinting(Action<byte[], List<byte[]>> callback = null)
{
RenderPrintingManager.Instance.StartRenderPrinting(currentDesignGo, this.currentDesignGo, callback);
}
public void StartRenderPrintingOnlyDesign(Action<byte[], List<byte[]>> 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>();
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<RectTransform>().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<RectTransform>().anchoredPosition = productScriptableObject.modelPosition;
}
else
{
modelObject =
ResourcesManager.Instance.Load3DModelGameObject(productScriptableObject.productGameObjectPfbPath);
modelObject.GetComponent<Transform>().localPosition = productScriptableObject.modelPosition;
var mugActualModel = modelObject.GetComponent<MugActualModel>();
GetComponent<ModelRotateHitbox>().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<ImageDesignItem>();
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
}
}
}