FM/Assets/Scripts/Runtime/UI/Item/DesignCoverItem.cs

207 lines
7.9 KiB
C#

using System;
using System.Collections.Generic;
using DG.Tweening;
using HK.Keyboard;
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> updatePosAndRotData;
GameObject designItem;
GameObject designItemOnlyOne;
List<GameObject> designItems = new List<GameObject>();
public int maxSize = 160;
[SerializeField] float doTweenTime = 1f;
public override void OnInit()
{
base.OnInit();
#region AutoGen_Init
imgDesignParent = GetValue<Image>("imgDesignParent");
inpContent = GetValue<TMP_InputField>("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<GameObject>(AssetConst.Assets_Res_Prefab_UI_Item_btnDesignCover_prefab);
designItemOnlyOne =
ResourcesManager.Instance.Load<GameObject>(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<TMP_Text>().text = "Add Text...";
}
else if (!args.isShow_InputText && string.IsNullOrEmpty(inpContent.text))
{
inpContent.placeholder.GetComponent<TMP_Text>().text = "";
}
if (args.isShow_InputText && !args.isShow_Sticker)
{
EventManager.Instance.FireNow(this,
new OpenKeyboardEventArgs(inpContent, inpContent.GetComponent<TMP_InputField_Register>().OKAction));
}
}
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<TransformGesture>().enabled = isOpen;
}
}
private void IsOpenInputFiledTouch(bool isOpen)
{
inpContent.GetComponent<TransformGesture>().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>();
image.sprite = sprite;
image.color = color;
var rect = obj.GetComponent<RectTransform>();
var rectTransform = imgDesignParent.GetComponent<RectTransform>();
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<UIDragHandler>();
}
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
}
}
}