Framwork/Assets/Scripts/Runtime/UI/Item/Product2StickerItem.cs

223 lines
7.6 KiB
C#
Raw Normal View History

2025-07-02 10:24:01 +08:00
using System;
using System.Collections.Generic;
using Runtime;
using Runtime.UI.Other;
2025-06-17 09:31:12 +08:00
using UnityEngine.UI;
using TMPro;
using UnityEngine;
2025-07-02 10:24:01 +08:00
using Random = UnityEngine.Random;
2025-06-17 09:31:12 +08:00
namespace HK
{
public class Product2StickerItem : UIItemBase
{
2025-07-02 10:24:01 +08:00
[SerializeField] private Button btnSticker;
// [SerializeField] private Transform themeParent;
[SerializeField] private Transform themeItemParent;
[SerializeField] private Transform themeSelectColorParent;
[SerializeField] private NotebookColorBar NotebookColorBar;
[SerializeField] private CarouselImage CarouselImage;
[SerializeField] private Transform imgDesignParent;
Book_M book;
public Action ClickAction;
// tmp
GameObject goTheme;
GameObject goThemeItem;
GameObject goThemeColor;
GameObject goDesign;
GameObject goDesignOnly;
public int maxSize = 160;
2025-06-17 09:31:12 +08:00
public override void OnInit()
{
base.OnInit();
2025-07-02 10:24:01 +08:00
2025-06-17 09:31:12 +08:00
#region AutoGen_Init
2025-07-02 10:24:01 +08:00
btnSticker = GetValue<Button>("btnSticker");
// themeParent = GetValue<Transform>("themeParent");
themeItemParent = GetValue<Transform>("themeItemParent");
themeSelectColorParent = GetValue<Transform>("themeSelectColorParent");
NotebookColorBar = GetValue<NotebookColorBar>("NotebookColorBar");
CarouselImage = GetValue<CarouselImage>("CarouselImage");
imgDesignParent = GetValue<Transform>("imgDesignParent");
btnSticker.onClick.AddListener(OnClickbtnSticker);
2025-06-17 09:31:12 +08:00
#endregion
2025-07-02 10:24:01 +08:00
NotebookColorBar.OnClickAction += ChooseColor;
CarouselImage.ClickAction += SwitchTheme;
goTheme = ResourcesManager.Instance.Load<GameObject>(AssetConst
.Assets_Res_Prefab_UI_Item_btnProduct2Sticker_Theme_prefab);
goThemeItem =
ResourcesManager.Instance.Load<GameObject>(AssetConst
.Assets_Res_Prefab_UI_Item_btnProduct2Sticker_ThemeItem_prefab);
goThemeColor =
ResourcesManager.Instance.Load<GameObject>(AssetConst
.Assets_Res_Prefab_UI_Item_btnProduct2Sticker_SelectColor_prefab);
goDesign =
ResourcesManager.Instance.Load<GameObject>(AssetConst
.Assets_Res_Prefab_UI_Item_btnProduct2Sticker_ItemDesign_prefab);
goDesignOnly =
ResourcesManager.Instance.Load<GameObject>(AssetConst
.Assets_Res_Prefab_UI_Item_btnProduct2Sticker_ItemDesignOnly_prefab);
}
private void SwitchTheme(int obj)
{
var allTheme = ThemeManagement.Instance.GetAllTheme();
var o = allTheme[obj] as ThemeScriptableObject;
GenThemeItem(o, Color.white);
GenSelectColor(o);
}
private void ChooseColor(Texture obj)
{
book.ChangeTexture(obj);
}
public void SetBook(Book_M book)
{
this.book = book;
}
void InitSticker()
{
var allTheme = ThemeManagement.Instance.GetAllTheme();
Sprite[] sprites = new Sprite[allTheme.Length];
for (var i = 0; i < allTheme.Length; i++)
{
var o = allTheme[i] as ThemeScriptableObject;
sprites[i] = o.banner;
}
var inde = PlayerPersistent.GetInt("ThemeIndex");
CarouselImage.Init(sprites, inde);
GenThemeItem(allTheme[inde] as ThemeScriptableObject, Color.white);
}
ThemeScriptableObject currentTheme;
void GenThemeItem(ThemeScriptableObject theme, Color color)
{
currentTheme = theme;
for (var i = 0; i < themeItemParent.childCount; i++)
{
GameObject.Destroy(themeItemParent.GetChild(i).gameObject);
}
foreach (var sticker in theme.lightStickers)
{
var go = GameObject.Instantiate(goThemeItem, themeItemParent);
var image = go.GetComponent<Image>();
image.sprite = sticker;
image.color = color;
var rect = sticker.rect;
var max = rect.width > rect.height ? rect.width : rect.height;
var size = maxSize / max;
image.rectTransform.sizeDelta = new Vector2(size * rect.width, size * rect.height);
go.GetComponent<Button>().onClick.AddListener(() => { GenThemeItemToParent(sticker, color); });
}
}
List<GameObject> themeItemDesignList = new List<GameObject>();
void GenThemeItemToParent(Sprite sprite, Color color)
{
GameObject obj;
if (currentTheme.isOnlyOne)
{
foreach (var o in themeItemDesignList)
{
GameObject.Destroy(o.gameObject);
}
themeItemDesignList.Clear();
obj = GameObject.Instantiate(goDesignOnly, imgDesignParent);
}
else
obj = GameObject.Instantiate(goDesign, imgDesignParent);
var image = obj.GetComponent<Image>();
image.sprite = sprite;
image.color = color;
var rect = obj.GetComponent<RectTransform>();
var rectTransform = imgDesignParent.GetComponent<RectTransform>();
if (currentTheme.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>();
}
themeItemDesignList.Add(obj);
}
void GenSelectColor(ThemeScriptableObject theme)
{
for (var i = 0; i < themeSelectColorParent.childCount; i++)
{
GameObject.Destroy(themeSelectColorParent.GetChild(i).gameObject);
}
foreach (var color in theme.colors)
{
var go = GameObject.Instantiate(goTheme, themeSelectColorParent);
var image = go.GetComponent<Image>();
image.color = color;
go.GetComponent<Button>().onClick.AddListener(() => { GenThemeItem(theme, image.color); });
}
}
public override void OnShow()
{
base.OnShow();
book.SetIndex(1);
InitSticker();
2025-06-17 09:31:12 +08:00
}
#region AutoGen_Method
2025-07-02 10:24:01 +08:00
private void OnClickbtnSticker()
{
ClickAction?.Invoke();
}
2025-06-17 09:31:12 +08:00
#endregion
public override void OnDispose()
{
base.OnDispose();
2025-07-02 10:24:01 +08:00
NotebookColorBar.OnClickAction -= ChooseColor;
CarouselImage.ClickAction -= SwitchTheme;
2025-06-17 09:31:12 +08:00
#region AutoGen_Dispose
2025-07-02 10:24:01 +08:00
btnSticker.onClick.RemoveListener(OnClickbtnSticker);
btnSticker = null;
themeItemParent = null;
themeSelectColorParent = null;
2025-06-17 09:31:12 +08:00
#endregion
}
}
}