764 lines
26 KiB
C#
764 lines
26 KiB
C#
using cfg.SkillCfg;
|
||
using cfg.VihecleCultivateCfg;
|
||
using Cysharp.Threading.Tasks;
|
||
using DG.Tweening;
|
||
using Framework;
|
||
using Gameplay;
|
||
using Gameplay.Common;
|
||
using Gameplay.Net;
|
||
using Gameplay.Utils;
|
||
using PhxhSDK;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using TMPro;
|
||
using UnityEngine;
|
||
using Button = UnityEngine.UI.Button;
|
||
using Image = UnityEngine.UI.Image;
|
||
|
||
public class UI_VehicleCultivateProController : UIWindow, IMobileInputEventHandler
|
||
{
|
||
#region UI Bind
|
||
|
||
//UI GameObj
|
||
///Auto Gen Start///
|
||
//public Button Button_Back;
|
||
public Button Button_back;
|
||
public TMP_Text Text_Back;
|
||
public Button Button_Home;
|
||
public Image Image_DarkLeft;
|
||
public Image Image_DarkLeftTop;
|
||
public Image Image_DarkTop;
|
||
public Image Image_DarkBottom;
|
||
public Image Image_OrganizatioFlag;
|
||
public Image Image_AngularShape0;
|
||
public TMP_Text Text_VehicleType;
|
||
public Image Image_AngularShape1;
|
||
public TMP_Text Text_Level;
|
||
public Image Image_AngularShape2;
|
||
public TMP_Text Text_Organization;
|
||
public TMP_Text Text_VehicleName;
|
||
public Button Button_Look;
|
||
public Image Image_Attributes;
|
||
public TMP_Text Text_TitleAttri;
|
||
public TMP_Text Text_EnAttri;
|
||
public Image Image_Hp;
|
||
public TMP_Text Text_HpTitle;
|
||
public TMP_Text Text_HpValue;
|
||
public Image Image_Def;
|
||
public TMP_Text Text_DefTitle;
|
||
public TMP_Text Text_DefValue;
|
||
public Image Image_BulletCount;
|
||
public TMP_Text Text_BulletCountTitle;
|
||
public TMP_Text Text_BulletCountValue;
|
||
public Image Image_MemberCount;
|
||
public TMP_Text Text_MemberCountTitle;
|
||
public TMP_Text Text_MemberCountValue;
|
||
public Image Image_Atk;
|
||
public TMP_Text Text_AtkTitle;
|
||
public TMP_Text Text_AtkValue;
|
||
public Image Image_Speed;
|
||
public TMP_Text Text_SpeedTitle;
|
||
public TMP_Text Text_SpeedValue;
|
||
public Image Image_Terrain;
|
||
public TMP_Text Text_TitleTerrain;
|
||
public TMP_Text Text_EnTerrain;
|
||
public Image Image_Ground;
|
||
public TMP_Text Text_GroundTitle;
|
||
public TMP_Text Text_GroundAdapt;
|
||
public Image Image_Snow;
|
||
public TMP_Text Text_SnowTitle;
|
||
public TMP_Text Text_SnowAdapt;
|
||
public Image Image_Mountain;
|
||
public TMP_Text Text_MountainTitle;
|
||
public TMP_Text Text_MountainAdapt;
|
||
public Image Image_Wood;
|
||
public TMP_Text Text_WoodTitle;
|
||
public TMP_Text Text_WoodAdapt;
|
||
public Button Button_Dev;
|
||
public Button Button_Paint;
|
||
public Image Image_VehicleSkill;
|
||
public TMP_Text Text_TitleSkill;
|
||
public TMP_Text Text_SkillName;
|
||
public Image Image_SkillIcon;
|
||
public Image Image_SkillCoolingTimeBg;
|
||
public TMP_Text Text_SkillCoolingTimeValue;
|
||
public TMP_Text Text_ClassTitle;
|
||
public TMP_Text Text_SkillLevel;
|
||
public TMP_Text Text_SkillInfo;
|
||
public Button Button_TechTree;
|
||
public PhxhScrollView ScrollView_VehicleList;
|
||
|
||
///Auto Gen End///
|
||
|
||
#endregion
|
||
|
||
private long m_selectedVehicleID = 0;
|
||
private long SelectedVehicleID
|
||
{
|
||
get
|
||
{
|
||
return m_selectedVehicleID;
|
||
}
|
||
set
|
||
{
|
||
m_selectedVehicleID = value;
|
||
DebugUtil.Log("SelectedVehicleID: " + m_selectedVehicleID.ToString());
|
||
}
|
||
}
|
||
|
||
private bool isEditTeam;
|
||
private bool m_isVehicleUIShow = false;
|
||
private int AudioID = -1;
|
||
private Vector3 cameraPos;
|
||
|
||
private List<VehicleCultivateData> m_unlockedVehicles = new();
|
||
|
||
private InputInterpreter _inputInterpreter;
|
||
|
||
private class OpenData
|
||
{
|
||
public int ID = -1;
|
||
public bool EditTeam;
|
||
}
|
||
|
||
public async static UniTask<UIWindow> Open(int VehicleID = -1,bool isEditTeam = false)
|
||
{
|
||
var openData = new OpenData
|
||
{
|
||
ID = VehicleID,
|
||
EditTeam = isEditTeam,
|
||
};
|
||
UIWindow uiWindow = await UIManager.Instance.CreateAndOpenWindow(UINameConst.UI_VehicleCultivatePro, openData);
|
||
CommonUtils.ChangeUIScene(Framework.Constants.UI_VEHICLE_CHOOSE_SCENE_PATH);
|
||
var wind = uiWindow as UI_VehicleCultivateProController;
|
||
wind.BindScene();
|
||
|
||
CameraManager.Instance.SetMainCameraActive(true);
|
||
return uiWindow;
|
||
}
|
||
|
||
// deal with input data
|
||
public override void PreLoad(object data = null)
|
||
{
|
||
if(data is not OpenData openData)
|
||
return;
|
||
if (openData.ID != -1)
|
||
{
|
||
m_selectedVehicleID = openData.ID;
|
||
}
|
||
|
||
isEditTeam = openData.EditTeam;
|
||
}
|
||
|
||
// Use this for initialization
|
||
public override void OnInit()
|
||
{
|
||
//bind UI GameObj
|
||
UI_VehicleCultivateProBinder.GetComponents(this);
|
||
|
||
m_isVehicleUIShow = true;
|
||
|
||
var currencyList = GetComponent<UI_CurrencyList>("UI_CurrencyList");
|
||
currencyList.SetData();//GLConfig.Inst.data.DiamondItemId, GLConfig.Inst.data.GoldItemId
|
||
|
||
BindButton(Button_TechTree, OnButton_TreeClick);
|
||
BindButton(Button_Dev, OnButton_DevClick);
|
||
BindButton(Button_Paint, OnButton_PaintClick);
|
||
BindButton(Button_back, OnButton_backClick);
|
||
BindButton(Button_Home, OnButton_HomeClick);
|
||
BindButton(Button_Look, () =>
|
||
{
|
||
ShowUI(false);
|
||
});
|
||
|
||
LoadVehicleList();
|
||
if (m_unlockedVehicles.Count > 0)
|
||
{
|
||
if (m_unlockedVehicles.FirstOrDefault(x => x.Cfg.ID == SelectedVehicleID) == null)
|
||
{
|
||
if (SelectedVehicleID != 0)
|
||
DebugUtil.LogError("无法在已解锁载具中找到ID为{0}的载具!", SelectedVehicleID);
|
||
SelectedVehicleID = m_unlockedVehicles[0].Cfg.ID;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
DebugUtil.LogWarning("None Vehicle");
|
||
|
||
FindObj("UI_LiuHaiLeft/Attributes").gameObject.SetActive(false);
|
||
FindObj("UI_LiuHaiLeft/Terrain").gameObject.SetActive(false);
|
||
Button_Dev.gameObject.SetActive(false);
|
||
Button_Paint.gameObject.SetActive(false);
|
||
Image_VehicleSkill.gameObject.SetActive(false);
|
||
}
|
||
|
||
VehicleInfoRefresh();
|
||
|
||
ScrollView_VehicleList.SetItemCountFunc(() => m_unlockedVehicles.Count);
|
||
ScrollView_VehicleList.SetItemSizeFunc((index) => new Vector2(264, 96));
|
||
ScrollView_VehicleList.SetUpdateFunc(UpdateScrollViewItem);
|
||
ScrollView_VehicleList.UpdateData();
|
||
|
||
AudioManager.Instance.StopAllMusic();
|
||
AudioID = AudioManager.Instance.PlayAudio(Framework.Constants.Sound.TEAM_VEHICLE, AudioCriManager.EPlayType.Sound, null, loop: true, isFade: true);
|
||
|
||
EventManager.Instance.Register(EventManager.EventName.VehecleUpgrade, OnVehicleInfoUpdate);
|
||
|
||
if (_inputInterpreter == null)
|
||
{
|
||
_inputInterpreter = InputInterpreterFactory.CreateInterpreter(InputInterpreterType.AutoPlatform_ExcludeUI, "UI_VehicleCultivatePro", this);
|
||
}
|
||
}
|
||
|
||
//invoke when open window
|
||
protected override void OnShowWindow(object data = null)
|
||
{
|
||
var currencyList = GetComponent<UI_CurrencyList>("UI_CurrencyList");
|
||
currencyList.Refresh();
|
||
|
||
if (_rotateTrans != null)
|
||
{
|
||
_rotateTrans.transform.DOKill();
|
||
_rotateTrans.transform.rotation = Quaternion.Euler(0, 0, 0);
|
||
|
||
_rotateTrans.GetChild(0).localPosition = cameraPos;
|
||
zoomScale = 0f;
|
||
}
|
||
}
|
||
|
||
//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();
|
||
|
||
if (_inputInterpreter != null)
|
||
{
|
||
_inputInterpreter.Destroy(true);
|
||
_inputInterpreter = null;
|
||
}
|
||
|
||
if (_rotateTrans != null)
|
||
{
|
||
_rotateTrans.transform.DOKill();
|
||
_rotateTrans.transform.rotation = Quaternion.Euler(0, 0, 0);
|
||
_rotateTrans.GetChild(0).localPosition = cameraPos;
|
||
zoomScale = 0f;
|
||
}
|
||
|
||
AudioManager.Instance.StopSoundById(AudioID);
|
||
EventManager.Instance.Unregister(EventManager.EventName.VehecleUpgrade, OnVehicleInfoUpdate);
|
||
}
|
||
|
||
public override UniTask<bool> OnBack(object data = null)
|
||
{
|
||
CommonUtils.ChangeUIScene(Framework.Constants.MAIN_SCENE_PATH);
|
||
CloseWindow();
|
||
UIManager.Instance.ShowAllUI();
|
||
return base.OnBack(data);
|
||
}
|
||
|
||
GameObject vRoot = null;//载具根节点
|
||
Transform _rotateTrans;//旋转镜头的Transform
|
||
GameObject _vehicleGo = null;
|
||
Dictionary<string, GameObject> _assetsLoadDic = new Dictionary<string, GameObject>();
|
||
|
||
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;
|
||
cameraPos = _rotateTrans.GetChild(0).transform.localPosition;
|
||
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 OnVehicleInfoUpdate()
|
||
{
|
||
LoadVehicleList();
|
||
VehicleInfoRefresh();
|
||
ScrollView_VehicleList.UpdateData();
|
||
}
|
||
|
||
async void VehicleInfoRefresh()
|
||
{
|
||
var curShownVehicleData = VehicleCultivateDataManager.Instance.GetVehicleCultivateData((uint)SelectedVehicleID);
|
||
if (curShownVehicleData == null)
|
||
{
|
||
DebugUtil.Log("mCurVehicles.Count = 0,载具数量为0将隐藏载具界面");
|
||
Text_VehicleName.text = CommonUtils.GetLocalizeText("vehicle_none");
|
||
return;
|
||
}
|
||
LoadVehicleModel(SelectedVehicleID);
|
||
|
||
Text_VehicleName.text = VehicleDataHelper.GetVehicleLocalizeName((int)SelectedVehicleID);
|
||
//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_Level.text = CommonUtils.GetRomanCode(curShownVehicleData.Cfg.VehicleLevel);
|
||
Text_Organization.text = VehicleDataHelper.GetVehicleOrganization((int)SelectedVehicleID);
|
||
Text_VehicleType.text = VehicleDataHelper.GetVehicleCategory((int)SelectedVehicleID);
|
||
|
||
Text_HpValue.text = curShownVehicleData.Hp().ToString();
|
||
Text_MemberCountValue.text = curShownVehicleData.SeatCount().ToString();
|
||
Text_DefValue.text = curShownVehicleData.Defense().ToString();
|
||
Text_SpeedValue.text = curShownVehicleData.MoveSpeed().ToString();
|
||
Text_AtkValue.text = curShownVehicleData.Attack().ToString();
|
||
Text_BulletCountValue.text = curShownVehicleData.BulletCapacity().ToString();
|
||
#endregion
|
||
|
||
#region 适应性
|
||
Text_GroundAdapt.text = curShownVehicleData.GetTerrainAdapt(BonusType.TerrainPlain);
|
||
Text_SnowAdapt.text = curShownVehicleData.GetTerrainAdapt(BonusType.TerrainSnow);
|
||
Text_MountainAdapt.text = curShownVehicleData.GetTerrainAdapt(BonusType.TerrainMountain);
|
||
Text_WoodAdapt.text = curShownVehicleData.GetTerrainAdapt(BonusType.TerrainForest);
|
||
#endregion
|
||
|
||
#region 技能
|
||
DataSkill nowSkillCfg = TableManager.Instance.Tables.SkillConfig.Get(VehicleDataHelper.GetVehicleSkillId(curShownVehicleData.Cfg.ID, true));
|
||
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_SkillCoolingTimeValue.text = nowSkillCfg.ChargeParam.ToString() + "s";
|
||
Text_SkillName.text = CommonUtils.GetLocalizeText(E_LocalizePrefix.skill, nowSkillCfg.ID);
|
||
|
||
var skillIcon = await LoadAssetAsync<Sprite>(Framework.Constants.UI_Cultivata_skillIconFolder + nowSkillCfg.IconPath);
|
||
Image_SkillIcon.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
|
||
|
||
}
|
||
async void LoadVehicleModel(long id)
|
||
{
|
||
var config = TableManager.Instance.Tables.VehicleConfig.GetOrDefault((int)id);
|
||
|
||
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);
|
||
if(!prefab)
|
||
{
|
||
DebugUtil.LogError("载具模型加载失败!载具ID为{0}", id);
|
||
return;
|
||
}
|
||
go = Instantiate(prefab);
|
||
|
||
// 加载炮台部分
|
||
// 找到炮台挂点
|
||
var allTrans = go.GetComponentsInChildren<Transform>();
|
||
var pointName = "Battery_point01";
|
||
var fireTrans = allTrans.First(t => t.name == pointName);
|
||
|
||
//加载炮台模型
|
||
var curShownVehicleData = VehicleCultivateDataManager.Instance.GetVehicleCultivateData(id);
|
||
var rawConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(curShownVehicleData.WeaponId());
|
||
if (rawConfig == null)
|
||
{
|
||
DebugUtil.LogError("载具炮台配置为空: " + curShownVehicleData.WeaponId());
|
||
return;
|
||
}
|
||
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);
|
||
|
||
//设置涂装
|
||
var paintCfg = Actor.Instance.Character.GetVehicleDevelopment(id).paint_set;
|
||
if (paintCfg != null)
|
||
{
|
||
for (int i = 1; i < (int)PaintType.Max; i++)
|
||
{
|
||
var paintID = paintCfg[i];
|
||
if (paintID == 0)
|
||
continue;
|
||
|
||
var paintPath = PathEx.GetVehiclePaintPath((int)id, (int)paintID);
|
||
|
||
//加载涂装材质球
|
||
var material = await CommonUtils.GetVehiclePaintMaterial(paintPath);//临时方法
|
||
var root = VehicleDataHelper.FindVehiclePartRoot(go, (int)id, (PaintType)i);
|
||
|
||
if (material != null && root != null)
|
||
{
|
||
var renderers = root.GetComponent<SkinnedMeshRenderer>();
|
||
renderers.materials = new Material[] { material };
|
||
}
|
||
}
|
||
}
|
||
else
|
||
DebugUtil.LogError("载具涂装配置为空!");
|
||
|
||
}
|
||
|
||
if (_vehicleGo != null)
|
||
{
|
||
_vehicleGo.SetActive(false);
|
||
}
|
||
_vehicleGo = go;
|
||
_vehicleGo.SetActive(true);
|
||
_assetsLoadDic.TryAdd(prefabPath, go);
|
||
go.SetLayerEx(LayerDefine.UIView);
|
||
|
||
SetVehicleRoot();
|
||
}
|
||
else
|
||
{
|
||
DebugUtil.LogError(id + "载具数据为空!");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
DebugUtil.LogError("载具数据未找到!载具ID为{0}", id);
|
||
}
|
||
}
|
||
|
||
async void SetVehiclePaint(int vehicleID, GameObject vehicleGO)
|
||
{
|
||
for (int i = 0; i < (int)cfg.VihecleCultivateCfg.PaintType.Max; i++)
|
||
{
|
||
var paintCfg = VehicleDataHelper.GetVehiclePartPaint(vehicleID, (cfg.VihecleCultivateCfg.PaintType)i);
|
||
if (paintCfg == null)
|
||
{
|
||
continue;
|
||
}
|
||
|
||
var paintPath = PathEx.GetVehiclePaintPath(vehicleID, paintCfg.PaintID);
|
||
var material = await CommonUtils.GetVehiclePaintMaterial(paintPath);
|
||
|
||
if (material != null)
|
||
{
|
||
switch (i)
|
||
{
|
||
case (int)cfg.VihecleCultivateCfg.PaintType.Entirety:
|
||
|
||
break;
|
||
case (int)cfg.VihecleCultivateCfg.PaintType.CaterpillarBelt:
|
||
|
||
break;
|
||
case (int)cfg.VihecleCultivateCfg.PaintType.Fort:
|
||
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
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 LoadVehicleList()
|
||
{
|
||
m_unlockedVehicles = VehicleCultivateDataManager.Instance.DataList;
|
||
foreach (var vehicle in m_unlockedVehicles)
|
||
{
|
||
//var item = ScrollView_VehicleList.AddItem();
|
||
//item.GetComponent<UI_VehicleItem>("UI_VehicleItem").SetData(vehicle);
|
||
|
||
DebugUtil.Log("LoadVehicleList: " + vehicle.Cfg.ID.ToString());
|
||
}
|
||
m_unlockedVehicles.Sort((a, b) => a.Cfg.ID.CompareTo(b.Cfg.ID));
|
||
}
|
||
|
||
void ShowUI(bool show)
|
||
{
|
||
m_isVehicleUIShow = show;
|
||
FindObj("UI_CurrencyList").SetActive(show);
|
||
FindObj("UI_LiuHaiLeft").SetActive(show);
|
||
FindObj("UI_LiuHaiRight").SetActive(show);
|
||
Button_TechTree.gameObject.SetActive(show);
|
||
FindObj("VehicleList").SetActive(show);
|
||
|
||
ControllInput(!show);
|
||
}
|
||
#region Button Click Event
|
||
public async void OnButton_backClick()
|
||
{
|
||
if (m_isVehicleUIShow)
|
||
{
|
||
CommonUtils.BackToHome();
|
||
}
|
||
else
|
||
{
|
||
if (_rotateTrans != null)
|
||
{
|
||
_rotateTrans.transform.DOKill();
|
||
_rotateTrans.transform.rotation = Quaternion.Euler(0, 0, 0);
|
||
|
||
_rotateTrans.GetChild(0).localPosition = cameraPos;
|
||
zoomScale = 0f;
|
||
}
|
||
ShowUI(true);
|
||
}
|
||
|
||
if (isEditTeam)
|
||
{
|
||
EventManager.Instance.Send(EventManager.EventName.TeamReloadModel);
|
||
}
|
||
}
|
||
|
||
public async void OnButton_HomeClick()
|
||
{
|
||
CommonUtils.BackToHome();
|
||
}
|
||
|
||
public void OnButton_TreeClick()
|
||
{
|
||
UI_VehicleTechTreeController.Open().Forget();
|
||
}
|
||
|
||
public void OnButton_DevClick()
|
||
{
|
||
UI_VehiclePartTreeController.Open(SelectedVehicleID).Forget();
|
||
}
|
||
|
||
public void OnButton_PaintClick()
|
||
{
|
||
//_rotateTrans.transform.DOMove(new Vector3(55, 0, 20), 0.3f);
|
||
//_rotateTrans.transform.DORotate(new Vector3(0, 0, 0), 0.3f);
|
||
|
||
var camera = _rotateTrans.GetChild(0);
|
||
var cameraNextPos = cameraPos + _rotateTrans.InverseTransformDirection(camera.transform.right) * 2;//将世界坐标系向量转换为局部坐标系内的向量
|
||
camera.transform.DOLocalMove(cameraNextPos, 0.25f);
|
||
|
||
UI_VehicleSkinController.Open(SelectedVehicleID, _vehicleGo).Forget();
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region scrollView
|
||
|
||
async void UpdateScrollViewItem(int index, RectTransform item)
|
||
{
|
||
item.gameObject.SetActive(true);
|
||
|
||
var vehicle = m_unlockedVehicles[index];
|
||
var vehicleCfg = vehicle.Cfg;
|
||
string name = vehicle.Name;
|
||
var levelStr = CommonUtils.GetRomanCode(vehicle.Cfg.VehicleLevel);
|
||
|
||
CommonUtils.GetComponent<TMP_Text>(item.gameObject, "Text_VehicleName").text = name;
|
||
CommonUtils.GetComponent<TMP_Text>(item.gameObject, "Text_Level").text = levelStr;
|
||
|
||
GameObject highLight = CommonUtils.GetGameObject(item.gameObject, "Image_CurrentSelection");
|
||
highLight.SetActive(SelectedVehicleID == vehicleCfg.ID);
|
||
|
||
var button = CommonUtils.GetComponent<Button>(item.gameObject);
|
||
if (button != null)
|
||
{
|
||
button.onClick.RemoveAllListeners();
|
||
CommonUtils.BindButton(button, () => OnVehicleSelected(vehicleCfg.ID));
|
||
}
|
||
|
||
var sprite = await AssetManager.Instance.LoadAssetAsync<Sprite>(VehicleDataHelper.GetVehiclePicPath(vehicleCfg.ID));
|
||
CommonUtils.GetComponent<Image>(item.gameObject, "Image_VehicleIcon").sprite = sprite;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 滑动列表Item点击
|
||
/// </summary>
|
||
/// <param name="id"></param>
|
||
void OnVehicleSelected(long id)
|
||
{
|
||
SelectedVehicleID = id;
|
||
ScrollView_VehicleList.UpdateData();
|
||
VehicleInfoRefresh();
|
||
}
|
||
#endregion
|
||
|
||
#region rotation
|
||
private void ControllInput(bool isRegister)
|
||
{
|
||
if (_inputInterpreter != null)
|
||
{
|
||
_inputInterpreter.enabled = isRegister;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
#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)
|
||
{
|
||
|
||
}
|
||
|
||
float scaleStep = 0.1f;
|
||
float maxScale = .9f;
|
||
float minScale = -.9f;
|
||
|
||
float zoomScale = 0f;
|
||
public void OnZoom(float delta)
|
||
{
|
||
var camera = _rotateTrans.GetChild(0);
|
||
var stepvalue = 0f;
|
||
|
||
if (delta > 0)
|
||
{
|
||
if (zoomScale >= maxScale)
|
||
{
|
||
zoomScale = maxScale;
|
||
return;
|
||
}
|
||
stepvalue = scaleStep;
|
||
}
|
||
else
|
||
{
|
||
|
||
if (zoomScale <= minScale)
|
||
{
|
||
zoomScale = minScale;
|
||
return;
|
||
}
|
||
stepvalue = -scaleStep;
|
||
}
|
||
zoomScale += stepvalue;
|
||
camera.transform.localPosition += _rotateTrans.InverseTransformDirection(camera.transform.forward) * stepvalue;//将世界坐标系向量转换为局部坐标系内的向量
|
||
|
||
}
|
||
}
|