200 lines
5.6 KiB
C#
200 lines
5.6 KiB
C#
using Code.Scripts.Gameplay.Game;
|
|
using Cysharp.Threading.Tasks;
|
|
using Gameplay;
|
|
using Gameplay.Net;
|
|
using Gameplay.Story;
|
|
using Gameplay.Utils;
|
|
using PhxhSDK;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using Object = UnityEngine.Object;
|
|
|
|
/// <summary>
|
|
/// 选人UI
|
|
/// </summary>
|
|
public class UI_ChoosePersonController : UIWindow
|
|
{
|
|
/// <summary>
|
|
/// 打开选人界面
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public static async UniTask<UIWindow> Open()
|
|
{
|
|
await CommonUtils.CaptureScreenshot(); // 截取当前屏幕截图
|
|
|
|
return await UIManager.Instance.CreateAndOpenWindow(UINameConst.UI_ChoosePerson);
|
|
}
|
|
|
|
#region UI
|
|
/// <summary>
|
|
/// 高斯模糊遮罩
|
|
/// </summary>
|
|
private RawImage rawImageGaussianBlurMask;
|
|
/// <summary>
|
|
/// 形象1按钮
|
|
/// </summary>
|
|
private Button buttonModel1;
|
|
/// <summary>
|
|
/// 形象2按钮
|
|
/// </summary>
|
|
private Button buttonModel2;
|
|
/// <summary>
|
|
/// 确定按钮
|
|
/// </summary>
|
|
private Button buttonConfirm;
|
|
/// <summary>
|
|
/// 选中状态1
|
|
/// </summary>
|
|
private GameObject goSelect1;
|
|
/// <summary>
|
|
/// 选中状态2
|
|
/// </summary>
|
|
private GameObject goSelect2;
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// 形象模型名1
|
|
/// </summary>
|
|
private const string MODEL_NAME_1 = "N00004";
|
|
/// <summary>
|
|
/// 形象模型名2
|
|
/// </summary>
|
|
private const string MODEL_NAME_2 = "N00005";
|
|
/// <summary>
|
|
/// 模型缩放
|
|
/// </summary>
|
|
private readonly Vector3 MODEL_SCALE = new(260f, 260f, 260f);
|
|
/// <summary>
|
|
/// 模型位置
|
|
/// </summary>
|
|
private readonly Vector3 MODEL_POS = new(0f, -185f, -200f);
|
|
/// <summary>
|
|
/// 模型旋转
|
|
/// </summary>
|
|
private readonly Quaternion MODEL_ROT = Quaternion.Euler(0f, 180f, 0f);
|
|
|
|
/// <summary>
|
|
/// 选择的模型id
|
|
/// </summary>
|
|
private int selectModelId;
|
|
|
|
public override async void PreLoad(object data = null)
|
|
{
|
|
await AssetManager.Instance.PostPreload<GameObject>(PathEx.GetNpcDisplayModelPath(MODEL_NAME_1));
|
|
await AssetManager.Instance.PostPreload<GameObject>(PathEx.GetNpcDisplayModelPath(MODEL_NAME_2));
|
|
}
|
|
|
|
public override void OnInit()
|
|
{
|
|
rawImageGaussianBlurMask = GetComponent<RawImage>("GaussianBlurMask");
|
|
buttonModel1 = GetComponent<Button>("Image_BG/ButtonModel1");
|
|
buttonModel2 = GetComponent<Button>("Image_BG/ButtonModel2");
|
|
buttonConfirm = GetComponent<Button>("Image_BG/Button_Confirm");
|
|
goSelect1 = FindObj("Image_BG/ButtonModel1/ImageSelect");
|
|
goSelect2 = FindObj("Image_BG/ButtonModel2/ImageSelect");
|
|
|
|
rawImageGaussianBlurMask.texture = CommonUtils.GetScreenTexture2D();
|
|
selectModelId = 0;
|
|
|
|
OnModel(0);
|
|
goSelect1.gameObject.IsScaleShow(false);
|
|
goSelect2.gameObject.IsScaleShow(false);
|
|
|
|
BindButton(buttonModel1, () =>
|
|
{
|
|
OnModel(1);
|
|
goSelect1.gameObject.IsScaleShow(true);
|
|
goSelect2.gameObject.IsScaleShow(false);
|
|
});
|
|
BindButton(buttonModel2, () =>
|
|
{
|
|
OnModel(2);
|
|
goSelect1.gameObject.IsScaleShow(false);
|
|
goSelect2.gameObject.IsScaleShow(true);
|
|
});
|
|
BindButton(buttonConfirm, OnConfirm);
|
|
}
|
|
|
|
protected override async void OnShowWindow(object data = null)
|
|
{
|
|
base.OnShowWindow(data);
|
|
|
|
await AssetManager.Instance.WaitAllPreloads();
|
|
|
|
GameObject goModelTemp = AssetManager.Instance.GetPreLoadResult<GameObject>(PathEx.GetNpcDisplayModelPath(MODEL_NAME_1));
|
|
if (null != goModelTemp)
|
|
{
|
|
GameObject goModel = Object.Instantiate(goModelTemp, buttonModel1.transform, true);
|
|
goModel.transform.localPosition = MODEL_POS;
|
|
goModel.transform.localScale = MODEL_SCALE;
|
|
goModel.transform.localRotation = MODEL_ROT;
|
|
goModel.SetLayerEx(5);
|
|
}
|
|
|
|
goModelTemp = AssetManager.Instance.GetPreLoadResult<GameObject>(PathEx.GetNpcDisplayModelPath(MODEL_NAME_2));
|
|
if (null != goModelTemp)
|
|
{
|
|
GameObject goModel = Object.Instantiate(goModelTemp, buttonModel2.transform, true);
|
|
goModel.transform.localPosition = MODEL_POS;
|
|
goModel.transform.localScale = MODEL_SCALE;
|
|
goModel.transform.localRotation = MODEL_ROT;
|
|
goModel.SetLayerEx(5);
|
|
}
|
|
}
|
|
|
|
protected override void OnHideWindow()
|
|
{
|
|
|
|
|
|
base.OnHideWindow();
|
|
}
|
|
|
|
public override void OnRelease()
|
|
{
|
|
AssetManager.Instance.Unload(PathEx.GetNpcDisplayModelPath(MODEL_NAME_1));
|
|
AssetManager.Instance.Unload(PathEx.GetNpcDisplayModelPath(MODEL_NAME_2));
|
|
|
|
base.OnRelease();
|
|
}
|
|
|
|
#region 回调方法
|
|
/// <summary>
|
|
/// 关闭
|
|
/// </summary>
|
|
private void OnClose()
|
|
{
|
|
CloseWindow();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 选择模型
|
|
/// </summary>
|
|
/// <param name="i"></param>
|
|
private void OnModel(int id)
|
|
{
|
|
selectModelId = id;
|
|
buttonConfirm.interactable = 0 != selectModelId;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 确定选择
|
|
/// </summary>
|
|
private void OnConfirm()
|
|
{
|
|
NetHelper.SetPlayeHead((uint)selectModelId);
|
|
_ContinueStory();
|
|
}
|
|
|
|
private async void _ContinueStory()
|
|
{
|
|
if (GameStateManager.Instance.GetCurState() is GameStateStory gameStateStory)
|
|
{
|
|
// 这里需要重新创建主角模型
|
|
await StoryManager.instance.AutoReCreatePlayerModel(gameStateStory.storyConfig);
|
|
gameStateStory.IsReady = true;
|
|
}
|
|
|
|
OnClose();
|
|
}
|
|
#endregion
|
|
} |