Main/Component/UI/Core/ButtonEx.cs
@@ -9,12 +9,12 @@ public event Action ableTimeChangeEvent; public float interval = 0.5f; public float interval = 0.1f; public bool customPositiveSound = false; public bool customNegativeSound = false; public int positiveSound = 0; public int negativeSound = 0; public float pressedScale = 1.1f; public float pressedScale = 1.05f; float m_AbleTime = 0f; private Vector3 originalScale; Main/Config/ConfigManager.cs
@@ -70,6 +70,7 @@ typeof(OrderInfoConfig), typeof(PlayerAttrConfig), typeof(PlayerFaceConfig), typeof(PriorBundleConfig), typeof(RandomNameConfig), typeof(SignInConfig), typeof(StoreConfig), @@ -296,6 +297,8 @@ ClearConfigDictionary<PlayerAttrConfig>(); // 清空 PlayerFaceConfig 字典 ClearConfigDictionary<PlayerFaceConfig>(); // 清空 PriorBundleConfig 字典 ClearConfigDictionary<PriorBundleConfig>(); // 清空 RandomNameConfig 字典 ClearConfigDictionary<RandomNameConfig>(); // 清空 SignInConfig 字典 Main/Config/Configs/HorseSkinConfig.cs
@@ -1,6 +1,6 @@ //-------------------------------------------------------- // [Author]: YYL // [ Date ]: 2025年11月20日 // [ Date ]: 2025年11月23日 //-------------------------------------------------------- using System.Collections.Generic; @@ -30,6 +30,7 @@ public string Spine; public int[] Poses; public int heroFirst; public string getWay; public override int LoadKey(string _key) { @@ -116,6 +117,8 @@ } int.TryParse(tables[13],out heroFirst); getWay = tables[14]; } catch (Exception exception) { Main/Config/PartialConfigs/HorseSkinConfig.cs
New file @@ -0,0 +1,26 @@ using System.Collections.Generic; public partial class HorseSkinConfig : ConfigBase<int, HorseSkinConfig> { public static List<int> rankLVList = new List<int>(); //升阶解锁 public static List<int> itemsList = new List<int>(); //皮肤道具解锁/升星 protected override void OnConfigParseCompleted() { if (UnlockWay == 1) { if (UnlockValue != 0 && !rankLVList.Contains(UnlockValue)) { rankLVList.Add(UnlockValue); } } else if (UnlockWay == 2) { if (UnlockValue != 0 && !itemsList.Contains(UnlockValue)) { itemsList.Add(UnlockValue); } } } } Main/Config/PartialConfigs/HorseSkinConfig.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 638692d04a615ba408293c0eec4e450e MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Arena/ArenaPlayerTop3Cell.cs
@@ -8,7 +8,7 @@ [SerializeField] Text nameText; [SerializeField] OfficialTitleCell officialTitleCell; [SerializeField] Button queryPlayerBtn; //后续添加点击查看玩家详情 [SerializeField] UIHeroController model; [SerializeField] HorseController model; public void Display(int rankType, int rank, string valueFormat = "{0}") { @@ -24,7 +24,7 @@ rankValueText.text = string.Format(valueFormat, UIHelper.ReplaceLargeNum(rankData.cmpValue)); nameText.text = rankData.name1; officialTitleCell.InitUI((int)rankData.value1, (int)rankData.value2); model.Create((int)rankData.value5, 1); model.Create(HorseManager.Instance.GetOtherPlayerHorseSkinID((int)rankData.value6), (int)rankData.value5, 1); } Main/System/BillboardRank/PlayerTop3Cell.cs
@@ -13,7 +13,7 @@ [SerializeField] Text nameText; [SerializeField] OfficialTitleCell officialTitleCell; [SerializeField] Button queryPlayerBtn; //后续添加点击查看玩家详情 [SerializeField] UIHeroController model; [SerializeField] HorseController model; public void Display(int rankType, int rank, string valueFormat = "{0}") { @@ -30,7 +30,7 @@ rankValueText.text = RankModel.Instance.GetStoryInfo(rankData.cmpValue); nameText.text = rankData.name1; officialTitleCell.InitUI((int)rankData.value1, (int)rankData.value2); model.Create((int)rankData.value5, 1); model.Create(HorseManager.Instance.GetOtherPlayerHorseSkinID((int)rankData.value6), (int)rankData.value5, 1); } Main/System/Horse/HorseController.cs
@@ -52,7 +52,16 @@ instanceGO.transform.localRotation = Quaternion.identity; } skeletonGraphic = instanceGO.GetComponentInChildren<SkeletonGraphic>(true); // skeletonGraphic = instanceGO.GetComponentInChildren<SkeletonGraphic>(true); skeletonGraphic = instanceGO.transform.Find("Horse").GetComponent<SkeletonGraphic>(); if (string.IsNullOrEmpty(skinConfig.Spine)) { //卸下坐骑的情况 skeletonGraphic.enabled = false; spineAnimationState = null; CreateHero(_heroSkinID); return; } skeletonGraphic.skeletonDataAsset = ResManager.Instance.LoadAsset<SkeletonDataAsset>("UIEffect/Spine/Horse", skinConfig.Spine); if (skeletonGraphic.skeletonDataAsset == null) @@ -66,6 +75,7 @@ Debug.LogError("未配置spine"); return; } skeletonGraphic.enabled = true; skeletonGraphic.Initialize(true); skeletonGraphic.transform.localPosition = new Vector3(skinConfig.Poses[0], skinConfig.Poses[1], 0); @@ -83,9 +93,17 @@ public void CreateHero(int heroSkinID) { if (instanceGO == null) { { return; } } if (heroSkinID == 0) { if (hero != null && hero.gameObject.activeSelf) { hero.SetActive(false); } return; } hero = instanceGO.GetComponentInChildren<UIHeroController>(true); if (hero == null) { @@ -98,8 +116,25 @@ } hero.SetActive(true); hero.Create(heroSkinID); //约定骑乘点骨骼名 hero.GetComponent<BoneFollowerGraphic>().boneName = "mountPoint"; // 确保 BoneFollowerGraphic 引用到正确的坐骑 SkeletonGraphic var boneFollower = hero.GetComponent<BoneFollowerGraphic>(); if (boneFollower != null && skeletonGraphic != null && skeletonGraphic.enabled) { boneFollower.enabled = true; // 设置 SkeletonGraphic 引用 boneFollower.SkeletonGraphic = skeletonGraphic; // 约定骑乘点骨骼名 boneFollower.boneName = "mountPoint"; // 强制重新初始化 BoneFollowerGraphic 以应用新的设置 boneFollower.Initialize(); } else { boneFollower.enabled = false; hero.transform.localPosition = new Vector3(0, -50, 0); } if (isHeroShowBefore) { hero.transform.SetAsLastSibling(); @@ -112,6 +147,8 @@ public void HeroPlay(string motionName, bool loop = false, bool replay=true) { if (hero == null) return; hero.PlayAnimation(motionName, loop, replay); } @@ -143,6 +180,8 @@ // 直接使用 ToString() 而不是调用 GetAnimationName spineAnimationState.SetAnimation(0, motionName.ToString(), loop); HeroPlay(motionName, loop, replay); } // 播放第一个动画(作为默认动画) Main/System/Horse/HorseManager.cs
@@ -11,13 +11,27 @@ public int exp; //当前阶等级经验,每级从0开始 public event Action OnHorseUpdateEvent; public Dictionary<int, HorseSkin> skinDic = new Dictionary<int, HorseSkin>(); public int lastClassLV; //皮肤界面点击后红点刷新 Dictionary<int, HorseSkin> skinDic = new Dictionary<int, HorseSkin>(); public event Action OnSkinUpdateEvent; //升级/升阶属性 public Dictionary<int, long> specialAttrDic = new Dictionary<int, long>(); public Dictionary<int, long> attrDic = new Dictionary<int, long>(); public Dictionary<int, long> skinAttrDic = new Dictionary<int, long>(); int m_selectSkinID; public event Action OnSelectEvent; public int selectSkinID { get { return m_selectSkinID; } set { m_selectSkinID = value; OnSelectEvent?.Invoke(); } } //配置 public int lvUPItemID; public int rankUPItemID; @@ -27,6 +41,7 @@ { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitialize; PackManager.Instance.RefreshItemEvent += OnRefreshItemEvent; DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk; ParseConfig(); } @@ -35,6 +50,7 @@ { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= OnBeforePlayerDataInitialize; PackManager.Instance.RefreshItemEvent -= OnRefreshItemEvent; DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= OnPlayerLoginOk; } void ParseConfig() @@ -51,6 +67,12 @@ horseLV = 0; exp = 0; skinDic.Clear(); lastClassLV = 0; } void OnPlayerLoginOk() { UpdateSkinRedpoint(); } void OnRefreshItemEvent(PackType type, int index, int itemID) @@ -61,18 +83,34 @@ { UpdateRedpoint(); } if (HorseSkinConfig.itemsList.Contains(itemID)) { UpdateSkinRedpoint(); } } } public int GetHorseSkinID() //获取当前使用坐骑皮肤ID public int GetUsingHorseSkinID(bool useDefault = false) { var id = (int)PlayerDatas.Instance.baseData.equipShowSwitch % 1000; if (id == 0) { id = 1; if (useDefault) { return 1; } } return id; } //获取其他玩家使用坐骑皮肤ID public int GetOtherPlayerHorseSkinID(int value) { return value % 1000; } public void UpdateHorseInfo(HA303_tagSCHorseClassInfo netPack) { @@ -85,11 +123,17 @@ horseLV = netPack.HorseLV; exp = netPack.Exp; UpdateRedpoint(); UpdateSkinRedpoint(); RefreshAttr(); OnHorseUpdateEvent?.Invoke(); if (isOpenSuccess) { UIManager.Instance.OpenWindow<HorseSuccessWin>(); } if (!DTC0403_tagPlayerLoginLoadOK.finishedLogin) { lastClassLV = classLV; } } @@ -107,19 +151,23 @@ } RefreshSkinAttr(); UpdateRedpoint(); OnHorseUpdateEvent?.Invoke(); UpdateSkinRedpoint(); OnSkinUpdateEvent?.Invoke(); } Redpoint redpoint = new Redpoint(MainRedDot.RedPoint_HorseKey); #region 红点 Redpoint redpoint = new Redpoint(MainRedDot.RedPoint_HorseKey, MainRedDot.RedPoint_HorseKey * 10 + 1); Redpoint skinRedpoint = new Redpoint(MainRedDot.RedPoint_HorseKey, MainRedDot.RedPoint_HorseKey * 10 + 2); void UpdateRedpoint() { redpoint.state = RedPointState.None; if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Horse)) { return; } redpoint.state = RedPointState.None; var state = GetHorseState(); if (state == 0) { @@ -139,6 +187,128 @@ } } } //皮肤红点 public void UpdateSkinRedpoint() { skinRedpoint.state = RedPointState.None; if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Horse)) { return; } if (!DTC0403_tagPlayerLoginLoadOK.finishedLogin) { return; } //升阶解锁红点 foreach (var lv in HorseSkinConfig.rankLVList) { if (classLV >= lv && lastClassLV < lv) { skinRedpoint.state = RedPointState.Simple; return; } } //升星解锁红点 foreach (var skin in HorseSkinConfig.GetValues()) { if (skin.UnlockWay != 2) continue; if (IsSkinActive(skin.SkinID)) { if (skin.StarMax > 0) { //皮肤升星红点 int itemID = skin.UnlockValue; var count = PackManager.Instance.GetItemCountByID(PackType.Item, itemID); if (count >= skin.UpNeedCnt && skinDic[skin.SkinID].Star < skin.StarMax) { skinRedpoint.state = RedPointState.Simple; return; } } } else { //皮肤解锁红点 int itemID = skin.UnlockValue; var count = PackManager.Instance.GetItemCountByID(PackType.Item, itemID); if (count >= skin.UnlockNeedCnt) { skinRedpoint.state = RedPointState.Simple; return; } } } } public bool IsSkinActive(int id) { if (skinDic.TryGetValue(id, out var skin)) { if (skin.State == 1 && skin.EndTime == 0) { return true; } else if (skin.State == 1 && skin.EndTime > 0 && skin.EndTime > TimeUtility.AllSeconds) { return true; } } var skinConfig = HorseSkinConfig.Get(id); if (skinConfig.UnlockWay == 1) { return classLV >= skinConfig.UnlockValue; } return false; } public bool IsShowTheHorseRedImg(int skinID) { var skin = HorseSkinConfig.Get(skinID); int lv = skin.UnlockWay == 1 ? skin.UnlockValue : 0; //升阶解锁红点 if (classLV >= lv && lastClassLV < lv) { return true; } //升星解锁红点 if (skin.UnlockWay != 2) return false; if (IsSkinActive(skin.SkinID)) { if (skin.StarMax > 0) { //皮肤升星红点 int itemID = skin.UnlockValue; var count = PackManager.Instance.GetItemCountByID(PackType.Item, itemID); if (count >= skin.UpNeedCnt && skinDic[skinID].Star < skin.StarMax) { return true; } } } else { //皮肤解锁红点 int itemID = skin.UnlockValue; var count = PackManager.Instance.GetItemCountByID(PackType.Item, itemID); if (count >= skin.UnlockNeedCnt) { return true; } } return false; } //0 升级 1 升阶 2 满级 public int GetHorseState() @@ -163,8 +333,9 @@ return 2; } #endregion #region 属性 public void RefreshAttr() { specialAttrDic.Clear(); @@ -184,7 +355,7 @@ specialAttrDic[config.ClassSpecAttrIDList[i]] += config.ClassSpecAttrValueList[i]; } } if (!config.ClassAttrValueList.IsNullOrEmpty()) { for (int i = 0; i < config.AttrIDList.Length; i++) @@ -206,9 +377,9 @@ { attrDic[config.AttrIDList[i]] = 0; } var tmpHorseLV = lv != classLV ? config.MaxLV :horseLV; var tmpHorseLV = lv != classLV ? config.MaxLV : horseLV; attrDic[config.AttrIDList[i]] += config.PerLVAttrValueList[i]*tmpHorseLV; attrDic[config.AttrIDList[i]] += config.PerLVAttrValueList[i] * tmpHorseLV; } } } @@ -218,16 +389,16 @@ void RefreshSkinAttr() { skinAttrDic.Clear(); foreach(var skinID in skinDic.Keys) foreach (var skinID in skinDic.Keys) { var skin = skinDic[skinID]; if (skin.State != 1) { continue; } var config = HorseSkinConfig.Get(skinID); if (config.AttrIDList.IsNullOrEmpty()) { continue; @@ -243,7 +414,7 @@ skinAttrDic[config.AttrIDList[i]] += config.InitAttrValueList[i]; } } if (!config.AttrPerStarAddList.IsNullOrEmpty()) { for (int i = 0; i < config.AttrIDList.Length; i++) @@ -252,7 +423,7 @@ { skinAttrDic[config.AttrIDList[i]] = 0; } skinAttrDic[config.AttrIDList[i]] += config.AttrPerStarAddList[i]*skin.Star; skinAttrDic[config.AttrIDList[i]] += config.AttrPerStarAddList[i] * skin.Star; } } } @@ -280,6 +451,75 @@ return 0; } #endregion public List<int> sortSkinList = new List<int>(); public void SortHorseSkinList() { sortSkinList = HorseSkinConfig.GetKeys(); sortSkinList.Sort((a, b) => { var isActiveA = IsSkinActive(a); var isActiveB = IsSkinActive(b); if (isActiveA != isActiveB) { return isActiveA ? -1 : 1; } var skinA = HorseSkinConfig.Get(a); var skinB = HorseSkinConfig.Get(b); return skinA.SkinID - skinB.SkinID; }); } public Dictionary<int, long> GetAttrBySkinID(HorseSkinConfig config) { skinAttrDic.Clear(); if (!config.InitAttrValueList.IsNullOrEmpty()) { for (int i = 0; i < config.AttrIDList.Length; i++) { if (!skinAttrDic.ContainsKey(config.AttrIDList[i])) { skinAttrDic[config.AttrIDList[i]] = 0; } skinAttrDic[config.AttrIDList[i]] += config.InitAttrValueList[i]; } } if (!config.AttrPerStarAddList.IsNullOrEmpty()) { var star = 0; if (skinDic.TryGetValue(config.SkinID, out var skin)) { star = skin.Star; } for (int i = 0; i < config.AttrIDList.Length; i++) { if (!skinAttrDic.ContainsKey(config.AttrIDList[i])) { skinAttrDic[config.AttrIDList[i]] = 0; } skinAttrDic[config.AttrIDList[i]] += config.AttrPerStarAddList[i] * star; } } return skinAttrDic; } public HorseSkin GetSkinData(int skinID) { skinDic.TryGetValue(skinID, out var skin); return skin; } //// 操作 1-激活;2-佩戴;3-升星 public void SendSkinOP(int opType, int skinID) { var pack = new CB203_tagCSHorseSkinOP(); pack.OPType = (byte)opType; pack.SkinID = (ushort)skinID; GameNetSystem.Instance.SendInfo(pack); } } public class HorseSkin { Main/System/Horse/HorseSkinCell.cs
New file @@ -0,0 +1,54 @@ using UnityEngine; using UnityEngine.UI; public class HorseSkinCell : MonoBehaviour { [SerializeField] HorseController horseModel; [SerializeField] Image emptyImg; [SerializeField] Transform usingObj; [SerializeField] Transform redObj; [SerializeField] Transform timeObj; [SerializeField] Transform lockMaskObj; [SerializeField] Transform canLockObj; [SerializeField] Transform selectObj; [SerializeField] ButtonEx selectBtn; int skinID; void Start() { selectBtn.AddListener(OnClickFunc); } void OnClickFunc() { HorseManager.Instance.selectSkinID = skinID; var skinConfig = HorseSkinConfig.Get(skinID); if (skinConfig.UnlockWay == 1 && HorseManager.Instance.lastClassLV != HorseManager.Instance.classLV) { HorseManager.Instance.lastClassLV = HorseManager.Instance.classLV; HorseManager.Instance.UpdateSkinRedpoint(); } } public void Display(int _skinID) { skinID = _skinID; horseModel.Create(skinID, 0, 0.6f); emptyImg.SetActive(skinID == 0); usingObj.SetActive(HorseManager.Instance.GetUsingHorseSkinID() == skinID); bool isShowRed = HorseManager.Instance.IsShowTheHorseRedImg(skinID); redObj.SetActive(isShowRed); var skinConfig = HorseSkinConfig.Get(skinID); timeObj.SetActive(skinConfig.ExpireMinutes > 0); bool isActive = HorseManager.Instance.IsSkinActive(skinID); lockMaskObj.SetActive(!isActive); canLockObj.SetActive(!isActive && isShowRed); selectObj.SetActive(HorseManager.Instance.selectSkinID == skinID); } } Main/System/Horse/HorseSkinCell.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: d24ae9e9d748eab47b668e4dc44a24a1 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Horse/HorseSkinLineCell.cs
New file @@ -0,0 +1,26 @@ using UnityEngine; using UnityEngine.UI; public class HorseSkinLineCell : CellView { [SerializeField] HorseSkinCell[] horseSkinCells; public void Display(int _index) { for (int i = 0; i < horseSkinCells.Length; i++) { int index = _index + i; if (index < HorseManager.Instance.sortSkinList.Count) { horseSkinCells[i].SetActive(true); horseSkinCells[i].Display(HorseManager.Instance.sortSkinList[index]); } else { horseSkinCells[i].SetActive(false); } } } } Main/System/Horse/HorseSkinLineCell.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 359483a78848f49409e92f6757c41607 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Horse/HorseSkinWin.cs
@@ -8,21 +8,275 @@ /// </summary> public class HorseSkinWin : UIBase { [SerializeField] Button bagBtn; [SerializeField] Button seeAttrBtn; [SerializeField] HorseController horseModel; [SerializeField] Text horseName; [SerializeField] Text getWayText; [SerializeField] Text attrText; [SerializeField] ScrollerController scroller; [SerializeField] Transform changeOPObj; [SerializeField] Button lvUpBtn; [SerializeField] Text lvUpText; [SerializeField] Text lvUpCostText; [SerializeField] Image lvUpItemImg; [SerializeField] Button changeSkinBtn; [SerializeField] Text timeText; [SerializeField] Transform inSkinMarkObj; //幻化中 [SerializeField] Button unlockBtn; [SerializeField] Text unlockCostText; [SerializeField] Image unlockItemImg; protected override void InitComponent() { seeAttrBtn.AddListener(OnSeeAttrBtnClick); lvUpBtn.AddListener(OnLvUpBtnClick); changeSkinBtn.AddListener(OnChangeSkinBtnClick); unlockBtn.AddListener(OnUnlockBtnClick); } protected override void OnPreOpen() { HorseManager.Instance.selectSkinID = HorseManager.Instance.GetUsingHorseSkinID(); HorseManager.Instance.SortHorseSkinList(); HorseManager.Instance.OnSkinUpdateEvent += OnSkinUpdateEvent; HorseManager.Instance.OnSelectEvent += OnSelectEvent; scroller.OnRefreshCell += OnRefreshCell; GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; PlayerDatas.Instance.playerDataRefreshEvent += OnRefreshPlayerData; CreateScroller(); Display(); } protected override void OnPreClose() { HorseManager.Instance.lastClassLV = HorseManager.Instance.classLV; HorseManager.Instance.UpdateSkinRedpoint(); HorseManager.Instance.OnSkinUpdateEvent -= OnSkinUpdateEvent; HorseManager.Instance.OnSelectEvent -= OnSelectEvent; scroller.OnRefreshCell -= OnRefreshCell; GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; PlayerDatas.Instance.playerDataRefreshEvent -= OnRefreshPlayerData; } void OnSkinUpdateEvent() { HorseManager.Instance.SortHorseSkinList(); Display(); } void OnRefreshPlayerData(PlayerDataType type) { if (type == PlayerDataType.EquipShowSwitch) { Display(); } } void OnSelectEvent() { Display(); } void Display() { var skinConfig = HorseSkinConfig.Get(HorseManager.Instance.selectSkinID); horseModel.Create(HorseManager.Instance.selectSkinID, PhantasmPavilionManager.Instance.GetMyModelSkinID()); if (string.IsNullOrEmpty(skinConfig.getWay)) { getWayText.text = ""; } else { getWayText.text = Language.Get("PhantasmPavilion06", skinConfig.getWay); } if (skinConfig.AttrIDList.Length == 0) { attrText.text = ""; } else { attrText.text = GetSkinAttrSring(skinConfig); } scroller.m_Scorller.RefreshActiveCellViews(); bool isActive = HorseManager.Instance.IsSkinActive(HorseManager.Instance.selectSkinID); var skinData = HorseManager.Instance.GetSkinData(HorseManager.Instance.selectSkinID); if (skinConfig.StarMax > 0 && skinData.Star > 0) { horseName.text = skinConfig.Name + "+" + skinData.Star; } else { horseName.text = skinConfig.Name; } if (isActive) { changeOPObj.SetActive(true); unlockBtn.SetActive(false); if (skinConfig.StarMax > 0) { lvUpBtn.SetActive(true); if (skinData.Star >= skinConfig.StarMax) { lvUpCostText.SetActive(false); lvUpText.text = Language.Get("L1055"); lvUpBtn.SetInteractable(false); } else { lvUpBtn.SetInteractable(true); lvUpText.text = Language.Get("L1109"); lvUpCostText.SetActive(true); lvUpCostText.text = UIHelper.ShowUseItem(PackType.Item, skinConfig.UnlockValue, skinConfig.UpNeedCnt); lvUpItemImg.SetItemSprite(skinConfig.UnlockValue); } } else { lvUpBtn.SetActive(false); } if (HorseManager.Instance.selectSkinID == HorseManager.Instance.GetUsingHorseSkinID()) { changeSkinBtn.SetActive(false); inSkinMarkObj.SetActive(true); } else { changeSkinBtn.SetActive(true); inSkinMarkObj.SetActive(false); } ShowTime(); } else { changeOPObj.SetActive(false); if (skinConfig.UnlockWay == 1) { unlockBtn.SetActive(false); } else { unlockBtn.SetActive(true); unlockCostText.SetActive(true); unlockCostText.text = UIHelper.ShowUseItem(PackType.Item, skinConfig.UnlockValue, skinConfig.UnlockNeedCnt); unlockItemImg.SetItemSprite(skinConfig.UnlockValue); } } } void ShowTime() { bool isActive = HorseManager.Instance.IsSkinActive(HorseManager.Instance.selectSkinID); var skinData = HorseManager.Instance.GetSkinData(HorseManager.Instance.selectSkinID); var skinConfig = HorseSkinConfig.Get(HorseManager.Instance.selectSkinID); if (isActive) { if (skinConfig.ExpireMinutes > 0) { timeText.SetActive(true); timeText.text = Language.Get("PhantasmPavilion10", TimeUtility.SecondsToShortDHMS(skinData.EndTime - TimeUtility.AllSeconds)); } else { timeText.SetActive(false); } } } void OnSecondEvent() { ShowTime(); } void CreateScroller() { scroller.Refresh(); for (int i = 0; i < HorseManager.Instance.sortSkinList.Count; i++) { if (i % 3 == 0) { scroller.AddCell(ScrollerDataType.Header, i); } } scroller.Restart(); } void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell as HorseSkinLineCell; _cell.Display(cell.index); } void OnSeeAttrBtnClick() { AttributeManager.Instance.OpenTotalAttributeWin(HorseManager.Instance.skinAttrDic); } string GetSkinAttrSring(HorseSkinConfig config) { var dict = HorseManager.Instance.GetAttrBySkinID(config); var attrList = new List<string>(); var skinData = HorseManager.Instance.GetSkinData(config.SkinID); if (skinData != null) { //升星 if (skinData.Star == 0 || skinData.Star >= config.StarMax) { foreach (var kv in dict) { attrList.Add(UIHelper.AppendColor(TextColType.itemchuanqi, PlayerPropertyConfig.GetFullDescription(kv.Key, kv.Value))); } return Language.Get("PhantasmPavilion07") + string.Join(Language.Get("L1112"), attrList); } else { int i = 0; foreach (var kv in dict) { attrList.Add(UIHelper.AppendColor(TextColType.itemchuanqi, PlayerPropertyConfig.GetFullDescription(kv.Key, kv.Value)) + Language.Get("PhantasmPavilion12", UIHelper.AppendColor(TextColType.Green, "+" + PlayerPropertyConfig.GetValueDescription(kv.Key, config.AttrPerStarAddList[i])))); i++; } return Language.Get("PhantasmPavilion07") + string.Join(Language.Get("L1112"), attrList); } } else { foreach (var kv in dict) { attrList.Add(UIHelper.AppendColor(TextColType.itemchuanqi, PlayerPropertyConfig.GetFullDescription(kv.Key, kv.Value))); } return Language.Get("PhantasmPavilion07") + string.Join(Language.Get("L1112"), attrList); } } void OnLvUpBtnClick() { var skinConfig = HorseSkinConfig.Get(HorseManager.Instance.selectSkinID); if (ItemLogicUtility.CheckItemCount(PackType.Item, skinConfig.UnlockValue, skinConfig.UpNeedCnt, 2)) { HorseManager.Instance.SendSkinOP(3, HorseManager.Instance.selectSkinID); } } void OnChangeSkinBtnClick() { HorseManager.Instance.SendSkinOP(2, HorseManager.Instance.selectSkinID); } void OnUnlockBtnClick() { var skinConfig = HorseSkinConfig.Get(HorseManager.Instance.selectSkinID); if (ItemLogicUtility.CheckItemCount(PackType.Item, skinConfig.UnlockValue, skinConfig.UnlockNeedCnt, 2)) { HorseManager.Instance.SendSkinOP(1, HorseManager.Instance.selectSkinID); } } } Main/System/Horse/HorseWin.cs
@@ -34,7 +34,10 @@ protected override void InitComponent() { skinBtn.AddListener(()=>{ UIManager.Instance.OpenWindow<HorseSkinWin>();}); skinBtn.AddListener(() => { UIManager.Instance.OpenWindow<HorseSkinWin>(); }); lvupBtn.AddListener(HorseUpgrade); lvupBtn.onPress.AddListener(HorseUpgrade); quickUpToggle.onValueChanged.AddListener((bool value)=>{ OnToggle(value);}); @@ -47,12 +50,14 @@ //默认勾选 quickUpToggle.isOn = !LocalSave.GetBool("HorseQuickUp" + PlayerDatas.Instance.baseData.PlayerID); HorseManager.Instance.OnHorseUpdateEvent += OnHorseUpdateEvent; PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh; Display(); } protected override void OnPreClose() { HorseManager.Instance.OnHorseUpdateEvent -= OnHorseUpdateEvent; PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefresh; } void OnHorseUpdateEvent() @@ -99,7 +104,7 @@ void Display() { var skinConfig = HorseSkinConfig.Get(HorseManager.Instance.GetHorseSkinID()); var skinConfig = HorseSkinConfig.Get(HorseManager.Instance.GetUsingHorseSkinID()); modelImg.Create(skinConfig.SkinID, PhantasmPavilionManager.Instance.GetMyModelSkinID()); nameText.text = skinConfig.Name; specialAttrText.text = GetSpecialAttr(); @@ -207,6 +212,19 @@ costText.text = UIHelper.ShowUseItem(PackType.Item, HorseManager.Instance.lvUPItemID, useCnt); } } void PlayerDataRefresh(PlayerDataType type) { switch (type) { case PlayerDataType.EquipShowSwitch: var skinConfig = HorseSkinConfig.Get(HorseManager.Instance.GetUsingHorseSkinID()); modelImg.Create(skinConfig.SkinID, PhantasmPavilionManager.Instance.GetMyModelSkinID()); break; } } } Main/System/Main/HomeWin.cs
@@ -165,6 +165,7 @@ OfficialRankManager.Instance.OnOfficialCanLVUpEvent += OnOfficialCanLVUpEvent; FirstChargeManager.Instance.OnFirstChargeTaskUpdateEvent += OnFirstChargeTaskUpdateEvent; OfficialRankManager.Instance.RealmMissionRefreshEvent += OnOfficialCanLVUpEvent; HorseManager.Instance.OnHorseUpdateEvent += DisplayHorse; Display(); DisplayFirstChargeBtn(); @@ -190,6 +191,7 @@ OfficialRankManager.Instance.OnOfficialCanLVUpEvent -= OnOfficialCanLVUpEvent; FirstChargeManager.Instance.OnFirstChargeTaskUpdateEvent -= OnFirstChargeTaskUpdateEvent; OfficialRankManager.Instance.RealmMissionRefreshEvent -= OnOfficialCanLVUpEvent; HorseManager.Instance.OnHorseUpdateEvent -= DisplayHorse; // 关闭的时候把战斗界面也给关了 虽然是在外面开的 UIManager.Instance.CloseWindow<BattleWin>(); } @@ -239,6 +241,9 @@ case PlayerDataType.RealmLevel: OnOfficialCanLVUpEvent(); break; case PlayerDataType.EquipShowSwitch: DisplayHorse(); break; } @@ -504,7 +509,7 @@ { horseBGImg.SetActive(true); //equipShowSwitch;//当前配置的坐骑外观ID存储在(最大支持 1~999) var skinConfig = HorseSkinConfig.Get(HorseManager.Instance.GetHorseSkinID()); var skinConfig = HorseSkinConfig.Get(HorseManager.Instance.GetUsingHorseSkinID(true)); horseImg.Create(skinConfig.SkinID, 0, 0.6f); horseLVText.text = Language.Get("Horse8",HorseManager.Instance.classLV, HorseManager.Instance.horseLV); } Main/System/Redpoint/MainRedDot.cs
@@ -61,6 +61,8 @@ //坐骑 public const int RedPoint_HorseKey = 108; Redpoint redPointHorse = new Redpoint(RedPoint_HorseKey); //特权卡 public const int RedPoint_PrivilegeCard = 109; Redpoint pcardRedpoint = new Redpoint(RedPoint_PrivilegeCard); Main/System/TianziBillborad/TianziBillboradPlayerTop3Cell.cs
@@ -13,7 +13,7 @@ [SerializeField] Text nameText; [SerializeField] OfficialTitleCell officialTitleCell; [SerializeField] Button queryPlayerBtn; //后续添加点击查看玩家详情 [SerializeField] UIHeroController model; [SerializeField] HorseController model; public void Display(int rankType, int rank, string valueFormat = "{0}") { @@ -29,7 +29,7 @@ rankValueText.text = string.Format(valueFormat, UIHelper.ReplaceLargeNum(rankData.cmpValue2 + rankData.cmpValue * Constants.ExpPointValue)); nameText.text = rankData.name1; officialTitleCell.InitUI((int)rankData.value1, (int)rankData.value2); model.Create((int)rankData.value5, 1); model.Create(HorseManager.Instance.GetOtherPlayerHorseSkinID((int)rankData.value6), (int)rankData.value5, 1); } Main/System/UIBase/UIBase.cs
@@ -150,7 +150,11 @@ } if (screenMask != null) { screenMask.GetComponent<Image>().color = new Color(0, 0, 0, 0.7f); screenMask.transform.SetAsFirstSibling(); } InitClickEmptySpaceBtn(); }