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

185 lines
6.2 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-08 22:07:35 +08:00
using ZGame;
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;
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);
}
private void SwitchTheme(int obj)
{
var allTheme = ThemeManagement.Instance.GetAllTheme();
var o = allTheme[obj] as ThemeScriptableObject;
GenThemeItem(o, Color.white);
GenSelectColor(o);
2025-07-08 22:07:35 +08:00
EventManager.Instance.FireNow(this, new Product2DesignCoverClearEventArgs());
2025-07-02 10:24:01 +08:00
}
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);
2025-07-08 22:07:35 +08:00
GenSelectColor(allTheme[inde] as ThemeScriptableObject);
2025-07-02 10:24:01 +08:00
}
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);
2025-07-08 22:07:35 +08:00
go.GetComponent<Button>().onClick.AddListener(() =>
2025-07-02 10:24:01 +08:00
{
2025-07-08 22:07:35 +08:00
EventManager.Instance.FireNow(this,
new Product2GenStickerEventArgs(currentTheme, sticker, color));
});
2025-07-02 10:24:01 +08:00
}
}
void GenSelectColor(ThemeScriptableObject theme)
{
for (var i = 0; i < themeSelectColorParent.childCount; i++)
{
GameObject.Destroy(themeSelectColorParent.GetChild(i).gameObject);
}
foreach (var color in theme.colors)
{
2025-07-08 22:07:35 +08:00
var go = GameObject.Instantiate(goThemeColor, themeSelectColorParent);
2025-07-02 10:24:01 +08:00
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);
2025-07-08 22:07:35 +08:00
EventManager.Instance.FireNow(this, new Product2SetDesignCoverPositionEventArgs(1));
2025-07-02 10:24:01 +08:00
InitSticker();
EventManager.Instance.FireNow(this, new Product_DesignCover_SetShowEventArgs(true, false));
2025-07-08 22:07:35 +08:00
}
public override void OnHide()
{
base.OnHide();
EventManager.Instance.FireNow(this, new Product_DesignCover_SetShowEventArgs(false, false));
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
}
}
}