using cfg.SkillCfg; using cfg.VihecleCultivateCfg; using Cysharp.Threading.Tasks; using Framework; using Gameplay; using PhxhSDK; using System; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; using static UI_VehicleChooseController; using Button = UnityEngine.UI.Button; using Image = UnityEngine.UI.Image; public class UI_VehicleCultivateController : UIWindow { //UI GameObj ///Auto Gen Start/// public Image Image_BG; public Button Button_Back; public TMP_Text Text_Back; public Button Button_Home; public Image Image_LevelBarBG; public Button Button_LevelPlus; public TMP_Text Text_Level_Max; public TMP_Text Text_LevelName; public TMP_Text Text_Level_Now; 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_ActiveSkill; public Image Image_SkillLogo; public Image Image_UI_SkillCd; public TMP_Text Text_CDSecond; public TMP_Text Text_CDTme; public TMP_Text Text_ActiveSkill; public TMP_Text Text_ActiveSkillName; public TMP_Text Text_SkillInfo; public TMP_Text Text_Class; public TMP_Text Text_Class_Value; public Image Image_VehicleLogo; public TMP_Text Text_VehicleName; ///Auto Gen End/// private GameObject modelParent; private VehicleCultivateData mVehicleData; private GameObject showModel; private GameObject viewModel = null; List childGo; RawImage rt; ShowModelPreviewNode node; private bool IsCanChange = false; int mCurIndex = 0;//当前人物索引 List vCDataList; // Use this for initialization public override async void OnAwake() { //bind UI GameObj UI_VehicleCultivateBinder.GetComponents(this); rt = GetComponent("Image_BG/rt"); BindButton(Button_LevelPlus,OnLevelPlusClick); BindButton(Button_Back, OnButton_BackClick); childGo = new List(); vCDataList = new List(); } private void ResumeCamera() { // UIDisplayScene.Instance.ResumeCamera(); } private void RefreshModel() { modelParent.SetActive(true); viewModel = GameObject.Instantiate(showModel); viewModel.transform.SetParent(modelParent.transform); viewModel.transform.localPosition = new Vector3(0, -309, -247); viewModel.transform.localScale = new Vector3(350, 350, 350); viewModel.transform.localRotation = new Quaternion(0, 180, 0, 1); viewModel.gameObject.layer = 5; //FindChild(viewModel.gameObject); //for (int i = 0; i < childGo.Count; i++) //{ // childGo[i].layer = 5; //} } private void FindChild(GameObject child) { //利用for循环 获取物体下的全部子物体 for (int c = 0; c < child.transform.childCount; c++) { //如果子物体下还有子物体 就将子物体传入进行回调查找 直到物体没有子物体为止 if (child.transform.GetChild(c).childCount > 0) { FindChild(child.transform.GetChild(c).gameObject); } childGo.Add(child.transform.GetChild(c).gameObject); } } private void OnButton_BackClick() { CloseWindow(); } private void RefreshPreviewNodeRawImage() { if (node!=null) { rt.texture = node.RTexture; } } private async void OnLevelPlusClick() { Utils.CommonUtils.CaptureScreenshot(); await UIManager.Instance.OpenWindow(UINameConst.UI_VehicleLevelUp, mVehicleData); ControllInput(false); } //invoke when open window protected override void OnOpenWindow(object data) { VehicleCultivateParam tempData=data as VehicleCultivateParam; mVehicleData = tempData.info; vCDataList = tempData.showList; LoadModel(); } private void LoadModel() { AssetManager.Instance.LoadAssetOnCallBack(TableManager.Instance.Tables.VehicleConfig.Get(mVehicleData.Cfg.ID).PrefabPath, onLoadModel); } private async void onLoadModel(GameObject obj) { showModel = obj; await CreateModelNode(); modelParent = node.contentObj; RefreshModel(); RefreshLevel(); RefreshProperty(); RefreshTerrainAdapt(); RefreshVehicleAbout(); RefreshSkill(); RefreshPreviewNodeRawImage(); ControllInput(true); RegisterEvent(); } private void ControllInput(bool isRegister) { if (isRegister) { InputManager.Instance.OnFingerMoveUI += OnFingleSwipe; } else { InputManager.Instance.OnFingerMoveUI -= OnFingleSwipe; } } private void OnFingleSwipe(Vector2 delta) { if (!IsCanChange) { return; } if (delta.x > 25) { OnButton_RightArrowsClick(); IsCanChange = false; } else if (delta.x < -25) { // OnButton_LeftArrowsClick(); IsCanChange = false; } } private async UniTask CreateModelNode() { string path = "Assets/Art/UI/Prefab/MainPanel/UIShowSingleObjNode.prefab"; if (node == null) { node = new ShowModelPreviewNode(path); await node.Show(); } } private void OnButton_RightArrowsClick() { int nowIndex = ReturnCorrectCharacterIndex(mCurIndex + 1); mCurIndex = nowIndex; RefreshCurCharacterDataInfo(mCurIndex); LoadModel(); RefreshLevel(); RefreshProperty(); RefreshTerrainAdapt(); RefreshVehicleAbout(); RefreshSkill(); ControllInput(true); //PlayChangeOutAnimation(); //_coroutine = RefreshAfterAniChangeOut(); //StartCoroutine(_coroutine); } void RefreshCurCharacterDataInfo(int index) { mVehicleData = vCDataList[index]; } private int ReturnCorrectCharacterIndex(int index) { if (index < 0) { index = vCDataList.Count - 1; } if (index > vCDataList.Count - 1) if (index > vCDataList.Count - 1) { index = 0; } return index; } private void RegisterEvent() { EventManager.Instance.Register(EventManager.EventName.VehecleUpgrade, OnVehecleUpgradeClick); EventManager.Instance.Register(EventManager.EventName.EN_UIControllCultivateMainInput, (Action)OnRecvEventControlInput); } private void UnRegisterEvent() { EventManager.Instance.Unregister(EventManager.EventName.VehecleUpgrade, OnVehecleUpgradeClick); EventManager.Instance.Unregister(EventManager.EventName.EN_UIControllCultivateMainInput, (Action)OnRecvEventControlInput); } private void OnRecvEventControlInput(bool isRegister) { ControllInput(isRegister); } private void OnVehecleUpgradeClick() { mVehicleData = VehicleCultivateDataManager.GetSingleton().GetVehicleCultivateData(mVehicleData.nID); RefreshSkill(); RefreshLevel(); RefreshProperty(); RefreshTerrainAdapt(); } private void RefreshSkill() { DataSkill nowSkillCfg = TableManager.Instance.Tables.SkillConfig.Get(VehicleDataHelper.GetVehicleSkillId(mVehicleData.Cfg.ID)); if(nowSkillCfg==null) { nowSkillCfg = TableManager.Instance.Tables.SkillConfig.DataList[0]; DebugUtil.LogError("skillConfig没有配置id为{0}", VehicleDataHelper.GetVehicleSkillId(mVehicleData.Cfg.ID)); } Text_CDTme.text = nowSkillCfg.CDTime.ToString(); Text_ActiveSkillName.text = Utils.CommonUtils.GetLocalizeText(nowSkillCfg.Name); AssetManager.Instance.LoadAssetOnCallBack(nowSkillCfg.IconPath, skillIcon => { Image_SkillLogo.sprite = skillIcon; }); Text_Class_Value.text = Utils.CommonUtils.GetRomanCode((int)mVehicleData.SumBonus(BonusType.SkillLv)); Text_SkillInfo.text =Utils.CommonUtils.GetLocalizeText( nowSkillCfg.SkillDesc); } private void RefreshLevel() { Text_Level_Max.text = mVehicleData.SumPowerMaxLevel().ToString(); Text_Level_Now.text = mVehicleData.SumPowerLevel().ToString(); } private void RefreshVehicleAbout() { Text_VehicleName.text = mVehicleData.Cfg.Name; } private void RefreshProperty() { Text_Hp_Value.text = mVehicleData.Hp().ToString(); Text_PersonNum_Value.text=mVehicleData.SeatCount().ToString(); Text_Defance_Value.text = mVehicleData.Defense().ToString(); Text_Speed_Value.text = mVehicleData.MoveSpeed().ToString(); Text_Attack_Value.text = mVehicleData.Attack().ToString(); Text_Capacity_Value.text = mVehicleData.BulletCapacity().ToString(); } private void RefreshTerrainAdapt() { Text_Road_Value.text = mVehicleData.GetTerrainAdapt(BonusType.TerrainPlain); Text_Snow_Value.text = mVehicleData.GetTerrainAdapt(BonusType.TerrainSnow); Text_Mountain_Value.text = mVehicleData.GetTerrainAdapt(BonusType.TerrainMountain); Text_Forest_Value.text = mVehicleData.GetTerrainAdapt(BonusType.TerrainForest); } //invoke when reload windowq protected override void OnReloadWindow(object data = null) { } //invoke when close window protected override void OnCloseWindow() { UnRegisterEvent(); } }