NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/UI_VehicleCultivateNewContr...

651 lines
19 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using cfg.SkillCfg;
using cfg.VihecleCultivateCfg;
using Cysharp.Threading.Tasks;
using Framework;
using Gameplay;
using Gameplay.Common;
using Gameplay.Utils;
using PhxhSDK;
using System;
using System.Collections.Generic;
using System.Linq;
using TMPro;
using UnityEngine;
using static UI_VehicleChooseController;
using Button = UnityEngine.UI.Button;
using Constants = Framework.Constants;
using Image = UnityEngine.UI.Image;
public class UI_VehicleCultivateNewController : UIWindow, IMobileInputEventHandler
{
#region UI_Obj
//UI GameObj
///Auto Gen Start///
public Button Button_back;
public TMP_Text Text_Back;
public Button Button_Home;
public Image Image_PhoneState;
public Image Image_Property;
public TMP_Text Text_Property;
public Image Image_Hp;
public TMP_Text Text_Vehicle_Hp;
public TMP_Text Text_Hp_Value;
public Image Image_Defance;
public TMP_Text Text_Vehicle_Defance;
public TMP_Text Text_Defance_Value;
public Image Image_Capacity;
public TMP_Text Text_Vehicle_Capacity;
public TMP_Text Text_Capacity_Value;
public Image Image_PersonNum;
public TMP_Text Text_Vehicle_PersonNum;
public TMP_Text Text_PersonNum_Value;
public Image Image_Attack;
public TMP_Text Text_Vehicle_Attack;
public TMP_Text Text_Attack_Value;
public Image Image_Speed;
public TMP_Text Text_Vehicle_Speed;
public TMP_Text Text_Speed_Value;
public Image Image_Terrian;
public TMP_Text Text_Terrian;
public Image Image_Road;
public TMP_Text Text_RoadName;
public TMP_Text Text_Road_Value;
public Image Image_Snow;
public TMP_Text Text_SnowName;
public TMP_Text Text_Snow_Value;
public Image Image_Mountain;
public TMP_Text Text_MountainName;
public TMP_Text Text_Mountain_Value;
public Image Image_Forest;
public TMP_Text Text_ForestName;
public TMP_Text Text_Forest_Value;
public Image Image_LevelBarBG;
public Button Button_LevelStrengthen;
public TMP_Text Text_Level_Max;
public TMP_Text Text_LevelName;
public TMP_Text Text_Level_Now;
public Image Image_LastAndNextLevel;
public TMP_Text Text_Last;
public TMP_Text Text_Next;
public Image Image_ActiveSkill;
public TMP_Text Text_ActiveSkill;
public TMP_Text Text_ActiveSkillName;
public TMP_Text Text_SkillLevel;
public TMP_Text Text_Class;
public TMP_Text Text_Class_Value;
public Image Image_SkillLogo;
public Image Image_UI_SkillCd;
public TMP_Text Text_CDSecond;
public TMP_Text Text_CDTme;
public TMP_Text Text_SkillInfo;
public Image Image_VehicelIconBg;
public Image Image_Icon;
public TMP_Text Text_VehicleName;
public Button Button_VehicleList;
public Image Image_HeadPic;
public Image Image_Lv;
public TMP_Text Text_Max;
public TMP_Text Text_Current;
public Image Image_LastAndNext;
public Image Image_BottomDark;
public Image Image_JobBg;
public Image Image_Job;
public TMP_Text Text_Name;
public Image Image_HealthIcon;
public TMP_Text Text_PropertyValue;
public Image Image_Mask;
public Image Image_Back;
public Image Image_LeftDark;
public Image Image_TopBlackBar;
public Image Image_BottomBlackBar;
///Auto Gen End///
#endregion
// deal with input data
//List<VehicleCultivateData> mShowList;
PhxhScrollViewEx BottomVehicleScrollView;
List<VehicleCultivateData> mCurVehicles;
VehicleCultivateData curShownVehicleData;
GameObject _vehicleGo = null;
GameObject vRoot = null;//载具根节点
Transform _rotateTrans;//旋转镜头的Transform
int AudioID = -1;
Dictionary<string, GameObject> _assetsLoadDic = new Dictionary<string, GameObject>();
private InputInterpreter _inputInterpreter;
#region API
/// <summary>
/// 打开载具界面
/// </summary>
/// <returns></returns>
public static async UniTask<UIWindow> Open()
{
UIWindow uiWindow = await UIManager.Instance.CreateAndOpenWindow(UINameConst.UI_VehicleCultivateNew);
CommonUtils.ChangeUIScene(Constants.UI_VEHICLE_CHOOSE_SCENE_PATH);
var wind = uiWindow as UI_VehicleCultivateNewController;
wind.BindScene();
CameraManager.Instance.SetMainCameraActive(true);
return uiWindow;
}
#endregion
#region UIWindow_Function
public override void PreLoad(object data = null)
{
GetStorageData();
#region 载具图片
foreach (var cfg in mCurVehicles)
{
string imgPath = VehicleDataHelper.GetVehiclePicPath(cfg.Cfg.ID);
AssetManager.Instance.PostPreload<Sprite>(imgPath).Forget();
}
#endregion
#region 技能图片
foreach (var cfg in mCurVehicles)
{
DataSkill nowSkillCfg = TableManager.Instance.Tables.SkillConfig.Get(VehicleDataHelper.GetVehicleSkillId(cfg.Cfg.ID));
if (nowSkillCfg == null)
{
DebugUtil.LogError("载具技能配置未能找到载具ID为{0}技能ID为{1}\n>>请检查相关配置表VehicleSkllUpgrade/SkillConfig_Vehicle", cfg.Cfg.ID, VehicleDataHelper.GetVehicleSkillId(cfg.Cfg.ID));
continue;
}
AssetManager.Instance.PostPreload<Sprite>(Framework.Constants.UI_Cultivata_skillIconFolder + nowSkillCfg.IconPath).Forget();
}
#endregion
if (mCurVehicles.Count > 0)
curShownVehicleData = mCurVehicles[0];
else
{
curShownVehicleData = null;
DebugUtil.Log("mCurVehicles.Count = 0,载具数量为0将隐藏载具界面");
}
}
// Use this for initialization
public override void OnInit()
{
//bind UI GameObj
UI_VehicleCultivateNewBinder.GetComponents(this);
BottomVehicleScrollView = GetComponent<PhxhScrollViewEx>("UI_VehicleList/UI_VehicleList");
BindButton(Button_back, OnBackClick);
BindButton(Button_Home, OnHomeClick);
BindButton(Button_VehicleList, OnVehicleListClick);
BindButton(Button_LevelStrengthen, OnCultivateClick);
if (mCurVehicles.Count == 0)
{
FindObj("UI_VehicleList").SetActive(false);
FindObj("UI_Vehicle_Level").SetActive(false);
Image_ActiveSkill.gameObject.SetActive(false);
FindObj("UI_LiuHaiLeft").SetActive(false);
}
BottomVehicleScrollView.SetItemCountFunc(() => mCurVehicles.Count);
BottomVehicleScrollView.SetUpdateFunc(_RefreshSkinItem);
BottomVehicleScrollView.UpdateData();
VehicleInfoRefresh();
AudioManager.Instance.StopAllMusic();
AudioID = AudioManager.Instance.PlayAudio(Constants.Sound.TEAM_VEHICLE, AudioCriManager.EPlayType.Sound, null, loop: true, isFade: true);
EventManager.Instance.Register(EventManager.EventName.VehecleUpgrade, OnVehicleUpgrade);
EventManager.Instance.Register<uint>(EventManager.EventName.VehicleInfoChoose, OnVehicleChange);
EventManager.Instance.Register(EventManager.EventName.EN_UIControllCultivateMainInput, (Action<bool>)ControllInput);
if (_inputInterpreter == null)
{
_inputInterpreter = InputInterpreterFactory.CreateInterpreter(InputInterpreterType.AutoPlatform_ExcludeUI, "InputInterpreter", this);
}
}
//invoke when open window
protected override void OnShowWindow(object data = null)
{
ControllInput(true);
}
//invoke when reload window
protected override void OnReloadWindow(object data = null)
{
}
//invoke when close window
protected override void OnHideWindow()
{
ControllInput(false);
}
//invoke when destroy
public override void OnRelease()
{
base.OnRelease();
_inputInterpreter?.Destroy(true);
_inputInterpreter = null;
EventManager.Instance.Unregister(EventManager.EventName.VehecleUpgrade, OnVehicleUpgrade);
EventManager.Instance.Unregister<uint>(EventManager.EventName.VehicleInfoChoose, OnVehicleChange);
EventManager.Instance.Unregister(EventManager.EventName.EN_UIControllCultivateMainInput, (Action<bool>)ControllInput);
AudioManager.Instance.StopSoundById(AudioID);
#region 卸载预载载具图片
foreach (var cfg in mCurVehicles)
{
string imgPath = VehicleDataHelper.GetVehiclePicPath(cfg.Cfg.ID);
AssetManager.Instance.Unload(imgPath);
}
#endregion
}
public override UniTask<bool> OnBack(object data = null)
{
CommonUtils.ChangeUIScene(Constants.MAIN_SCENE_PATH);
return base.OnBack(data);
}
#endregion
void BindScene()
{
PhxhSDK.Res.SceneHandle sceneHandle = GameSceneHelper.Instance.GetCurrentUIViewScene();
if (sceneHandle != null)
{
DebugUtil.Log("scene name is:" + sceneHandle.Scene.name);
var gos = sceneHandle.Scene.GetRootGameObjects();
foreach (var go in gos)
{
DebugUtil.Log("check go name: " + go.name);
if (go.name.Equals("Vehicle_Root"))
{
vRoot = go;
if(vRoot.transform.childCount > 0)//载具根节点下有子物体,说明已经加载过了,清空
{
if (_vehicleGo != null)
{
if (vRoot.transform.GetChild(0).GetInstanceID() != _vehicleGo.GetInstanceID())
{
foreach (Transform child in vRoot.transform)
{
Destroy(child.gameObject);
}
SetVehicleRoot();
}
}
else
{
foreach (Transform child in vRoot.transform)
{
Destroy(child.gameObject);
}
}
}
else//无需清理
{
if (_vehicleGo != null)
SetVehicleRoot();
}
}
if (go.name.Equals("Rotate_Axis"))
{
_rotateTrans = go.transform;
DebugUtil.Log("find Rotate_Axis");
//break;
}
}
}
else
{
DebugUtil.LogWarning("sceneHandle is null");
}
if (_vehicleGo != null)
{
_vehicleGo.transform.SetParent(vRoot.transform);
_vehicleGo.transform.localPosition = Vector3.zero;
_vehicleGo.transform.localRotation = Quaternion.identity;
_vehicleGo.transform.localScale = Vector3.one;
}
}
void OnVehicleUpgrade()
{
VehicleInfoRefresh();
BottomVehicleScrollView.UpdateData();
}
void VehicleInfoRefresh()
{
if (curShownVehicleData == null)
{
DebugUtil.Log("mCurVehicles.Count = 0,载具数量为0将隐藏载具界面");
Text_VehicleName.text = CommonUtils.GetLocalizeText("vehicle_none");
return;
}
Text_VehicleName.text = curShownVehicleData.Name;
Text_Name.text = curShownVehicleData.Name;
string imgPath = VehicleDataHelper.GetVehiclePicPath(curShownVehicleData.Cfg.ID);
Image_HeadPic.sprite = AssetManager.Instance.GetPreLoadResult<Sprite>(imgPath);
#region 等级
//Text_Level_Max.text = curShownVehicleData.SumPowerMaxLevel().ToString();
//Text_Max.text = curShownVehicleData.SumPowerMaxLevel().ToString();
//Text_Level_Now.text = curShownVehicleData.SumPowerLevel().ToString();
//Text_Current.text = curShownVehicleData.SumPowerLevel().ToString();
#endregion
#region 属性
Text_Hp_Value.text = curShownVehicleData.Hp().ToString();
Text_PersonNum_Value.text = curShownVehicleData.SeatCount().ToString();
Text_Defance_Value.text = curShownVehicleData.Defense().ToString();
Text_Speed_Value.text = curShownVehicleData.MoveSpeed().ToString();
Text_Attack_Value.text = curShownVehicleData.Attack().ToString();
Text_Capacity_Value.text = curShownVehicleData.BulletCapacity().ToString();
#endregion
#region 适应性
Text_Road_Value.text = curShownVehicleData.GetTerrainAdapt(BonusType.TerrainPlain);
Text_Snow_Value.text = curShownVehicleData.GetTerrainAdapt(BonusType.TerrainSnow);
Text_Mountain_Value.text = curShownVehicleData.GetTerrainAdapt(BonusType.TerrainMountain);
Text_Forest_Value.text = curShownVehicleData.GetTerrainAdapt(BonusType.TerrainForest);
#endregion
#region 技能
DataSkill nowSkillCfg =
TableManager.Instance.Tables.SkillConfig.Get(VehicleDataHelper.GetVehicleSkillId(curShownVehicleData.Cfg.ID));
if (nowSkillCfg == null)
{
nowSkillCfg = TableManager.Instance.Tables.SkillConfig.DataList[0];
DebugUtil.LogError("载具技能配置未能找到载具ID为{0}技能ID为{1}\n>>请检查相关配置表VehicleSkllUpgrade/SkillConfig_Vehicle", curShownVehicleData.Cfg.ID, VehicleDataHelper.GetVehicleSkillId(curShownVehicleData.Cfg.ID));
}
Text_CDTme.text = nowSkillCfg.ChargeParam.ToString();
Text_ActiveSkillName.text = CommonUtils.GetLocalizeText(E_LocalizePrefix.skill, nowSkillCfg.ID);
var skillIcon = AssetManager.Instance.GetPreLoadResult<Sprite>(Framework.Constants.UI_Cultivata_skillIconFolder + nowSkillCfg.IconPath);
Image_SkillLogo.sprite = skillIcon;
//Text_Class_Value.text = CommonUtils.GetRomanCode((int)curShownVehicleData.SumBonus(BonusType.SkillLv) + 1);//未强化时等级为1
Text_SkillInfo.text = CommonUtils.GetLocalizeText(E_LocalizePrefix.skill_desc, nowSkillCfg.ID);
#endregion
LoadVehicleModel(curShownVehicleData);
}
async void LoadVehicleModel(VehicleCultivateData curShownVehicleData)
{
var id = (uint)curShownVehicleData.Cfg.ID;
var config = VehicleDataHelper.CombineConfigData(curShownVehicleData);
var vehicleDataDic = VehicleCultivateDataManager.Instance.DataDic;
if (vehicleDataDic.TryGetValue(id, out var vehicleData))
{
if (vehicleData != null)
{
var prefabPath = PathEx.GetVehicleGameModelPath(vehicleData.Cfg.ID);
GameObject go = null;
if (_assetsLoadDic.ContainsKey(prefabPath))//已经加载过
{
go = _assetsLoadDic[prefabPath];
}
else
{
var prefab = await AssetManager.Instance.LoadAssetAsync<GameObject>(prefabPath);
go = Instantiate(prefab);
}
if (go)
{
if (_vehicleGo != null)
{
_vehicleGo.SetActive(false);
}
_vehicleGo = go;
_vehicleGo.SetActive(true);
_assetsLoadDic.TryAdd(prefabPath, go);
go.SetLayerEx(LayerDefine.UIView);
// 加载炮台部分
// 找到炮台挂点
var allTrans = go.GetComponentsInChildren<Transform>();
var pointName = "Battery_point01";
var fireTrans = allTrans.First(t => t.name == pointName);
//加载炮台模型
var rawConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(config.weaponId);
var batteryPath = PathEx.GetBatteryModelPath(rawConfig.ModelPath);
var sampleObj = await AssetManager.Instance.LoadAssetAsync<GameObject>(batteryPath);
if (sampleObj != null)
{
sampleObj.SetLayerEx(LayerDefine.UIView);
//安装炮台
var rootObj = UnityEngine.Object.Instantiate(sampleObj, fireTrans);
rootObj.transform.ResetLocals();
}
else
DebugUtil.LogError("加载炮台失败: {0}", batteryPath);
SetVehicleRoot();
}
else
{
DebugUtil.LogError("载具模型加载失败载具ID为{0}", id);
}
}
else
{
DebugUtil.LogError(id + "载具数据为空!");
}
}
else
{
DebugUtil.LogError("载具数据未找到载具ID为{0}", id);
}
}
void SetVehicleRoot()
{
if (vRoot != null)
{
_vehicleGo.transform.SetParent(vRoot.transform);
_vehicleGo.transform.localPosition = Vector3.zero;
_vehicleGo.transform.localRotation = Quaternion.identity;
_vehicleGo.transform.localScale = Vector3.one;
DebugUtil.Log("载具已挂载到vRoot");
}
else
{
DebugUtil.Log("vRoot尚未加载");
}
}
void GetStorageData()
{
if (mCurVehicles == null)
mCurVehicles = new List<VehicleCultivateData>();
mCurVehicles.Clear();
mCurVehicles.AddRange(VehicleCultivateDataManager.Instance.DataList);
}
private void OnVehicleChange(uint id)
{
if (ValueValidator.IsIdValid(id))
{
if (id == 0)
{
DebugUtil.LogError("选中载具ID为0无效");
}
else
{
foreach (var vehicle in mCurVehicles)
{
if (vehicle.Cfg.ID == id)
{
curShownVehicleData = vehicle;
break;
}
}
}
}
else
{
curShownVehicleData = mCurVehicles[0];
}
VehicleInfoRefresh();
}
private void ControllInput(bool isRegister)
{
if (_inputInterpreter != null)
{
_inputInterpreter.enabled = isRegister;
}
}
#region scrollview
private void _RefreshSkinItem(int index, RectTransform item)
{
var cfg = mCurVehicles[index];
if(cfg == null)
{
DebugUtil.LogError($"Index:{index} VehicleCultivateData cfg is null");
return;
}
var image = CommonUtils.GetComponent<Image>(item.gameObject, "UI_CultivateVehicle/Vehicle/Image_HeadPic");
TMP_Text nameText = CommonUtils.GetComponent<TMP_Text>(item.gameObject, "UI_CultivateVehicle/Text_Name");
TMP_Text levelText = CommonUtils.GetComponent<TMP_Text>(item.gameObject, "UI_CultivateVehicle/Image_Lv/Text_Current");
TMP_Text maxLevelText = CommonUtils.GetComponent<TMP_Text>(item.gameObject, "UI_CultivateVehicle/Image_Lv/Text_Max");
Button btn = CommonUtils.GetComponent<Button>(item.gameObject, "UI_CultivateVehicle");
if (image != null)
{
var path = VehicleDataHelper.GetVehiclePicPath(cfg.Cfg.ID);
image.sprite = AssetManager.Instance.GetPreLoadResult<Sprite>(path);
}
if (nameText != null)
{
string vehicleName = cfg.Name;
nameText.text = vehicleName;
}
if (levelText != null && maxLevelText != null)
{
//levelText.text = cfg.SumPowerLevel().ToString();
//maxLevelText.text = cfg.SumPowerMaxLevel().ToString();
}
if (btn != null)
{
ClearBind(btn);
BindButton(btn, OnSelectVehicleClick, index);
}
}
#endregion
#region Button_Listener
async void OnVehicleListClick()
{
AudioManager.Instance.PlayAudio(Framework.Constants.Sound.COMMON_CLICK);
await UIManager.Instance.CreateAndOpenWindow(UINameConst.UI_VehicleChoose);
}
void OnSelectVehicleClick(int index)
{
AudioManager.Instance.PlayAudio(Framework.Constants.Sound.COMMON_CLICK);
VehicleCultivateData info = mCurVehicles[index];
VehicleCultivateParam cultivateStruct = new VehicleCultivateParam();
cultivateStruct.showList = mCurVehicles;//mShowList;
cultivateStruct.info = info;
if (curShownVehicleData != info)
{
curShownVehicleData = info;
VehicleInfoRefresh();
}
}
void OnBackClick()
{
CommonUtils.ChangeUIScene(Constants.MAIN_SCENE_PATH);
CloseWindow();
UIManager.Instance.ShowAllUI();
}
void OnHomeClick()
{
//
CommonUtils.ChangeUIScene(Constants.MAIN_SCENE_PATH);
//CloseWindow();
//UIManager.Instance.ShowAllUI();
UIManager.Instance.CloseAllNormalExcept(UINameConst.UI_MainPanel);
}
async void OnCultivateClick()
{
AudioManager.Instance.PlayAudio(Framework.Constants.Sound.COMMON_CLICK);
await UI_VehicleLevelUpController.Open(curShownVehicleData);
ControllInput(false);//关闭旋转,因为此时该界面不隐藏
}
#endregion
public void OnPointerDown(Vector2 screenPosition)
{
}
public void OnPointerUp(Vector2 screenPosition)
{
}
public void OnPressMove(Vector2 delta)
{
if (delta == Vector2.zero) return;
if (_rotateTrans != null)
{
_rotateTrans.Rotate(Vector3.up, .3f * delta.x);
}
else
{
DebugUtil.LogError("Rotate_Axis is null");
}
}
public void OnTap(Vector2 screenPosition)
{
}
public void OnLongPress(Vector2 screenPosition)
{
}
public void OnLongPressUp(Vector2 screenPosition)
{
}
public void OnZoom(float delta)
{
}
}