NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/ShowAllCharacter/UIPosterController.cs

414 lines
12 KiB
C#
Raw Normal View History

2023-08-22 19:08:45 +08:00
using cfg.CharacterCfg;
using Framework;
using System.Collections.Generic;
using Gameplay;
2024-01-15 12:39:20 +08:00
using Gameplay.Utils;
2023-10-19 15:00:19 +08:00
using PhxhSDK;
2023-08-22 19:08:45 +08:00
using TMPro;
using UnityEngine;
using Button = UnityEngine.UI.Button;
2023-10-19 15:00:19 +08:00
using Constants = Framework.Constants;
2023-08-22 19:08:45 +08:00
using Image = UnityEngine.UI.Image;
2024-04-09 18:52:32 +08:00
using Cysharp.Threading.Tasks;
using Gameplay.Emoji;
using UnityEngine.Playables;
2024-04-09 18:52:32 +08:00
using UnityEngine.UI;
using System.Security.Cryptography.X509Certificates;
2023-08-22 19:08:45 +08:00
public class UIPosterController : UIWindow
{
//UI GameObj
///Auto Gen Start///
public Image Image_BG;
public Button Button_Back;
public Button Button_Home;
public Image Image_Poster;
public Button Button_Poster;
public TMP_Text Text_Poster;
public Image Image_LightBar;
public Button Button_Poster_Default;
public TMP_Text Text_Poster_Default;
public Button Button_Model;
public TMP_Text Text_Model;
public Image Image_LightBar01;
public Button Button_Model_Default;
public TMP_Text Text_Model_Default;
private CharacterDataInfo _characterData;
private EshowType mCurShowType = EshowType.Pic;
private Sprite ui2Dpic;
private CharacterAttri characterAttri;
private GameObject _sampleModel;
private GameObject _instModel;
2023-08-22 19:08:45 +08:00
private Vector3 PosterScale = Vector3.one;
private float scaleXiShu = 1;
private GameObject modelParent;
private UnitEmojiManager _emojiManager;
private const string DEFAULT_ANIMATION = "standready001";
2024-04-22 13:33:44 +08:00
private const float SCALE_XISHU = 0.5f;
private const float SCALE_XISHU_DELTA = 0.05f;
2023-08-22 19:08:45 +08:00
2024-04-22 13:33:44 +08:00
private readonly Vector3 _imgPosterScale = new (0.5f, 0.5f, 0.5f);
private readonly Vector3 _modelPos = new (0,-309,-247);
private readonly Quaternion _modelRotate = new (0,180,0,1);
private readonly Vector3 _modelScale = new (540,540,540);
2023-08-22 19:08:45 +08:00
private enum EshowType
{
Pic,
Model,
}
///Auto Gen End///
2024-04-09 18:52:32 +08:00
public static async UniTask<UIWindow> Open(CharacterDataInfo characterDataInfo)
{
2024-08-13 14:29:50 +08:00
await CommonUtils.CaptureScreenshot();
2024-04-09 18:52:32 +08:00
2024-05-16 12:40:15 +08:00
return await UIManager.Instance.CreateAndOpenWindow(UINameConst.UIPoster, characterDataInfo);
2024-04-09 18:52:32 +08:00
}
/// <summary>
/// 高斯模糊遮罩
/// </summary>
private RawImage rawImageGaussianBlurMask;
2024-01-23 12:25:47 +08:00
public override void OnInit()
2023-08-22 19:08:45 +08:00
{
//bind UI GameObj
UIPosterBinder.GetComponents(this);
2024-04-09 18:52:32 +08:00
rawImageGaussianBlurMask = GetComponent<RawImage>("GaussianBlurMask");
rawImageGaussianBlurMask.texture = CommonUtils.GetScreenTexture2D();
2024-04-09 18:52:32 +08:00
2023-08-22 19:08:45 +08:00
BindButton(Button_Back, OnButton_BackClick);
BindButton(Button_Poster, OnButton_Poster);
BindButton(Button_Model, OnButton_Model);
BindButton(Button_Poster_Default, OnButton_Poster);
BindButton(Button_Model_Default, OnButton_Model);
2023-11-21 15:18:32 +08:00
BindButton(Button_Home, OnClickHome);
2023-08-22 19:08:45 +08:00
modelParent = FindObj("Model");
}
2023-11-21 15:18:32 +08:00
private void OnClickHome()
{
UIManager.Instance.CloseAllNormalExcept(UINameConst.UI_MainPanel);
}
2023-08-22 19:08:45 +08:00
2023-10-19 15:00:19 +08:00
//float xoffset = 0;
//float yoffset = 0;
//Vector3 curPostion = Vector3.zero;
//private void OnFingerDrag(Vector2 delta)
//{
2023-08-22 19:08:45 +08:00
2023-10-19 15:00:19 +08:00
// if (mCurShowType == EshowType.Pic)
// {
2023-11-21 15:18:32 +08:00
2023-08-22 19:08:45 +08:00
2023-10-19 15:00:19 +08:00
// // Image_Poster.transform.localPosition = new Vector3(Image_Poster.transform.localPosition.x+delta.x, Image_Poster.transform.localPosition.y + delta.y, 0);
// if ((Image_Poster.transform.localPosition.x + delta.x) >= (Screen.width/2- (500*Image_Poster.transform.localScale.x)))
// {
// xoffset = Screen.width / 2 - (500 * Image_Poster.transform.localScale.x);
// }
// else if (((Image_Poster.transform.localPosition.x + delta.x) <=(-Screen.width/2+(500*Image_Poster.transform.localScale.x))))
// {
// xoffset = -Screen.width / 2 + (500* Image_Poster.transform.localScale.x);
// }
// else
// {
// xoffset = Image_Poster.transform.localPosition.x + delta.x;
// }
// if ((Image_Poster.transform.localPosition.y + delta.y) >= ((Screen.height/2)- Image_Poster.rectTransform.sizeDelta.y/2 * Image_Poster.transform.localScale.x))
// {
// yoffset = ((Screen.height / 2) - (Image_Poster.rectTransform.sizeDelta.y / 2 * Image_Poster.transform.localScale.x));
// }
// else if (((Image_Poster.transform.localPosition.y + delta.y) <= ((-Screen.height / 2)+ (Image_Poster.rectTransform.sizeDelta.y/2* Image_Poster.transform.localScale.x))))
// {
// yoffset = -Screen.height / 2+(Image_Poster.rectTransform.sizeDelta.y / 2 * Image_Poster.transform.localScale.x);
// }
// else
// {
// yoffset = Image_Poster.transform.localPosition.y + delta.y;
// }
// Image_Poster.transform.localPosition = new Vector3(xoffset, yoffset, 0);
// }
//}
2023-08-22 19:08:45 +08:00
2023-10-19 15:00:19 +08:00
private void OnFingersZoom(float delta)
{
if (mCurShowType != EshowType.Pic) return;
if (delta > 0)
{
2024-04-22 13:33:44 +08:00
if (scaleXiShu >= SCALE_XISHU)
2023-08-22 19:08:45 +08:00
{
2024-04-22 13:33:44 +08:00
scaleXiShu = SCALE_XISHU;
2023-10-19 15:00:19 +08:00
}else
2023-08-22 19:08:45 +08:00
{
2024-04-22 13:33:44 +08:00
scaleXiShu += SCALE_XISHU_DELTA;
2023-08-22 19:08:45 +08:00
}
2023-10-19 15:00:19 +08:00
Image_Poster.transform.localScale = PosterScale * scaleXiShu;
2023-08-22 19:08:45 +08:00
}
2023-10-19 15:00:19 +08:00
else
2023-08-22 19:08:45 +08:00
{
2024-04-22 13:33:44 +08:00
if (scaleXiShu <= SCALE_XISHU/2)
2023-08-22 19:08:45 +08:00
{
2024-04-22 13:33:44 +08:00
scaleXiShu = SCALE_XISHU/2;
2023-08-22 19:08:45 +08:00
}
else
{
2024-04-22 13:33:44 +08:00
scaleXiShu -= SCALE_XISHU_DELTA;
2023-08-22 19:08:45 +08:00
}
2023-10-19 15:00:19 +08:00
Image_Poster.transform.localScale = PosterScale * scaleXiShu;
2023-08-22 19:08:45 +08:00
}
}
private void OnButton_Model()
{
if(mCurShowType==EshowType.Model)
{
return;
}
RefreshModel();
}
private void RefreshModel()
{
modelParent.SetActive(true);
Image_Poster.gameObject.SetActive(false);
2023-10-19 15:00:19 +08:00
mCurShowType = EshowType.Model;
2023-08-22 19:08:45 +08:00
RefreshChangeBtn();
if (_sampleModel == null)
2023-08-22 19:08:45 +08:00
{
DebugUtil.LogError("加载的模型为空");
2023-08-22 19:08:45 +08:00
return;
}
if (_instModel != null)
2024-04-12 19:46:32 +08:00
{
// 做显示处理
_InitAnim();
2024-04-12 19:46:32 +08:00
return;
}
_instModel = Object.Instantiate(_sampleModel, modelParent.transform, true);
2024-04-22 13:33:44 +08:00
_instModel.transform.localPosition = _modelPos;
_instModel.transform.localScale = _modelScale;
_instModel.transform.localRotation= _modelRotate;
_instModel.gameObject.SetLayerEx(5);
var pd = _instModel.GetComponentInChildren<PlayableDirector>();
if (pd != null)
{
pd.enabled = false;
}
_InitEmoji();
_InitAnim();
}
private void _InitEmoji()
{
if (_emojiManager != null)
{
_emojiManager.Dispose();
_emojiManager = null;
}
var charSingleData = _characterData.Cfg;
_emojiManager = new UnitEmojiManager(_instModel, charSingleData.EmojiEyesColor,
2024-06-18 16:52:21 +08:00
charSingleData.EmojiEyeBowsType, charSingleData.EmojiEyeBowsColor, true);
_emojiManager.SwitchEmoji(charSingleData.DefaultDisplayEmojiId);
2023-08-22 19:08:45 +08:00
}
2023-10-19 15:00:19 +08:00
private void _InitAnim()
2023-08-22 19:08:45 +08:00
{
var animator = _instModel.GetComponentInChildren<Animator>();
if (animator != null)
2023-08-22 19:08:45 +08:00
{
int ran = UnityEngine.Random.Range(0, 2);
if(ran == 0)
{
animator.Play(DEFAULT_ANIMATION);
DebugUtil.Log("当前随机播放动作: " + DEFAULT_ANIMATION);
}
else
{
animator.Play("standready002");
DebugUtil.Log("当前随机播放动作: standready002");
}
//RuntimeAnimatorController runtimeAnimatorController = animator.runtimeAnimatorController;
//if (runtimeAnimatorController != null)
//{
// AnimationClip[] clips = runtimeAnimatorController.animationClips;
// int ran = UnityEngine.Random.Range(0, clips.Length);
// string stateName = clips[ran].name.Substring(10);
// DebugUtil.Log("角色动画机clips数: " + clips.Length + ",当前随机播放: " + stateName);
// animator.Play(stateName);
// return;
//}
//animator.Play(DEFAULT_ANIMATION);
2023-08-22 19:08:45 +08:00
}
}
2023-08-22 19:08:45 +08:00
private void OnButton_Poster()
{
if (mCurShowType == EshowType.Pic)
{
return;
}
Refresh2DPic();
}
private void RefreshChangeBtn()
{
Button_Poster.gameObject.SetActive(mCurShowType == EshowType.Pic);
Button_Model_Default.gameObject.SetActive(mCurShowType !=EshowType.Model);
Button_Poster_Default.gameObject.SetActive(mCurShowType != EshowType.Pic);
Button_Model.gameObject.SetActive(mCurShowType == EshowType.Model);
}
private void Refresh2DPic()
{
modelParent.SetActive(false);
Image_Poster.gameObject.SetActive(true);
Image_Poster.sprite = ui2Dpic;
Image_Poster.SetNativeSize();
2024-04-22 13:33:44 +08:00
Image_Poster.transform.localScale = _imgPosterScale;
2023-08-22 19:08:45 +08:00
mCurShowType = EshowType.Pic;
RefreshChangeBtn();
}
2023-10-19 15:00:19 +08:00
private void LoadCfg()
2023-08-22 19:08:45 +08:00
{
OnLoadPostCfg();
2024-04-12 19:46:32 +08:00
_LoadPic();
_LoadModel();
2023-08-22 19:08:45 +08:00
}
2023-10-19 15:00:19 +08:00
private void ResetModel()
2023-08-22 19:08:45 +08:00
{
if (_instModel != null)
2024-04-12 19:46:32 +08:00
{
_instModel.Destroy();
_instModel = null;
2024-04-12 19:46:32 +08:00
}
2023-08-22 19:08:45 +08:00
}
private void OnLoadPostCfg()
{
characterAttri=TableManager.Instance.Tables.CharacterAttri;
}
2024-04-12 19:46:32 +08:00
private async void _LoadModel()
2023-08-22 19:08:45 +08:00
{
2024-01-15 12:39:20 +08:00
var prefabPath = PathEx.GetCharacterDisplayModelPath(_characterData.Cfg.NameID);
2024-05-06 16:56:20 +08:00
_sampleModel = await LoadAssetAsync<GameObject>(prefabPath);
2024-04-12 19:46:32 +08:00
if (mCurShowType != EshowType.Model)
{
return;
}
RefreshModel();
2023-08-22 19:08:45 +08:00
}
private void OnButton_BackClick()
{
CloseWindow();
}
//invoke when open window
protected override void OnShowWindow(object tempInfo)
2023-08-22 19:08:45 +08:00
{
InputManager.Instance.OnFingersMove += OnFingersZoom;
2023-10-19 15:00:19 +08:00
//InputManager.Instance.OnFingerMoveUI += OnFingerDrag;
2023-08-22 19:08:45 +08:00
InputManager.Instance.OnFingerMoveUI += RotateMonster;
mCurShowType = EshowType.Pic;
ResetModel();
_characterData = tempInfo as CharacterDataInfo;
2023-10-19 15:00:19 +08:00
Image_Poster.gameObject.SetActive(false);
2023-08-22 19:08:45 +08:00
LoadCfg();
}
private void RotateMonster(Vector2 delta)
{
2023-10-19 15:00:19 +08:00
if (delta == Vector2.zero) return;
if (_instModel != null)
2023-08-22 19:08:45 +08:00
{
_instModel.transform.Rotate(Vector3.up, -delta.x);
2023-08-22 19:08:45 +08:00
}
}
private void RefreshUI()
{
if(mCurShowType==EshowType.Pic)
{
Refresh2DPic();
}else
{
RefreshModel();
}
}
2024-04-12 19:46:32 +08:00
private async void _LoadPic()
2023-08-22 19:08:45 +08:00
{
2024-04-12 19:46:32 +08:00
var picPath = CommonUtils.GetCharacterPicPath(_characterData.Cfg.RoleID, CommonUtils.ECharacterPicPathType.Poster);
2024-05-06 16:56:20 +08:00
ui2Dpic = await LoadAssetAsync<Sprite>(picPath);
2024-04-12 19:46:32 +08:00
if (mCurShowType != EshowType.Pic)
{
return;
}
2023-08-22 19:08:45 +08:00
RefreshUI();
2023-10-19 15:00:19 +08:00
Image_Poster.gameObject.SetActive(true);
2023-08-22 19:08:45 +08:00
}
//invoke when reload window
protected override void OnReloadWindow(object data = null)
{
}
2023-10-19 15:00:19 +08:00
private void UnLoad()
{
AssetManager.Instance.Unload(CommonUtils.GetCharacterPicPath(_characterData.Cfg.RoleID, CommonUtils.ECharacterPicPathType.Poster));
2024-01-15 12:39:20 +08:00
var prefabPath = PathEx.GetCharacterDisplayModelPath(_characterData.Cfg.NameID);
AssetManager.Instance.Unload(prefabPath);
2023-10-19 15:00:19 +08:00
}
2023-08-22 19:08:45 +08:00
//invoke when close window
protected override void OnHideWindow()
2023-08-22 19:08:45 +08:00
{
2024-05-06 16:56:20 +08:00
//UnLoad();
2023-08-22 19:08:45 +08:00
InputManager.Instance.OnFingersMove -= OnFingersZoom;
2023-10-19 15:00:19 +08:00
// InputManager.Instance.OnFingerMoveUI -= OnFingerDrag;
2023-08-22 19:08:45 +08:00
InputManager.Instance.OnFingerMoveUI -= RotateMonster;
EventManager.Instance.Send(EventManager.EventName.EN_UIControllCultivateMainInput, true);
if (_emojiManager != null)
2024-04-12 19:46:32 +08:00
{
_emojiManager.Dispose();
_emojiManager = null;
2024-04-12 19:46:32 +08:00
}
if (_instModel != null)
2024-04-12 19:46:32 +08:00
{
Object.Destroy(_instModel);
_instModel = null;
2024-04-12 19:46:32 +08:00
}
2023-08-22 19:08:45 +08:00
}
2024-05-06 16:56:20 +08:00
public override void OnRelease()
{
base.OnRelease();
}
2023-08-22 19:08:45 +08:00
}