| Main/System/Battle/BattleField/BoneBattleField.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Battle/BoneFieldBattleWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/ChallengeTab/ChallengeTabWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Settlement/BattleSettlementManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Settlement/BoneBattleFailWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Settlement/BoneBattleFailWin.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Settlement/BoneBattleVictoryWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Settlement/BoneBattleVictoryWin.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Main/System/Battle/BattleField/BoneBattleField.cs
@@ -1,24 +1,14 @@ using System; using LitJson; using UnityEngine; using System.Collections.Generic; using System.Linq; public class BoneBattleField : BattleField { protected int chapter;// 章节 protected int wave;// 波数 protected int level;// 关卡 protected JsonData extendData; protected MainChapterConfig chapterConfig; protected MainLevelConfig levelConfig; public BoneBattleField(string _guid) : base(_guid) { } public override void Init(int MapID, int FuncLineID, JsonData _extendData, @@ -26,22 +16,12 @@ { base.Init(MapID, FuncLineID, extendData, _redTeamList, _blueTeamList, turnMax); chapter = FuncLineID / 10000; wave = MapID == 1 ? FuncLineID % 100 : 1;//第几波怪 level = (FuncLineID % 10000) / 100; int level = FuncLineID;// 关卡 extendData = _extendData; chapterConfig = MainChapterConfig.Get(chapter); levelConfig = MainLevelConfig.Get(level); SetBattleMode(BattleMode.Record); } public override void Release() { base.Release(); } public override void AutoSetBattleMode() { @@ -81,25 +61,15 @@ public override void WhaleFall() { UIManager.Instance.CloseWindow<StoryBossBattleWin>(); AutoFightModel.Instance.isPause = false; Destroy(); UIManager.Instance.OpenWindow<BoneFieldWin>(); if (UIManager.Instance.IsOpened<BoneFieldBattleWin>()) { UIManager.Instance.CloseWindow<BoneFieldBattleWin>(); UIManager.Instance.OpenWindow<BoneFieldWin>(); } } public override void HaveRest() { // 主线BOSS战斗没有休息 } // public override void OnBattleEnd(JsonData turnFightStateData) // { // base.OnBattleEnd(turnFightStateData); // // HaveRest(); // } public override void Run() { @@ -115,7 +85,7 @@ { if (IsBattleFinish) return; // 不要调用base的函数 BattleManager.Instance.DistributeNextReportPackage(guid); } @@ -128,6 +98,39 @@ fsBattleWin = UIManager.Instance.OpenWindow<BoneFieldBattleWin>(); } fsBattleWin.SetBattleField(this); UIManager.Instance.CloseWindow<BoneFieldWin>(); if (UIManager.Instance.IsOpened<BoneFieldWin>()) { UIManager.Instance.CloseWindow<BoneFieldWin>(); } } public NPCLineupConfig GetBossLineupConfig() { if (!DungeonConfig.TryGetDungeonID(MapID, FuncLineID, out int dungeonID)) return null; if (!DungeonConfig.HasKey(dungeonID)) return null; int[] lineupIDList = DungeonConfig.Get(dungeonID).LineupIDList; if (lineupIDList.IsNullOrEmpty()) return null; int lineupID = lineupIDList[0]; if (!NPCLineupConfig.HasKey(lineupID)) return null; NPCLineupConfig nPCLineupConfig = NPCLineupConfig.Get(lineupID); return nPCLineupConfig; } public override BattleObject FindBoss() { var config = GetBossLineupConfig(); if (config != null) { int bossId = config.BossID; BattleObject bo = battleObjMgr.allBattleObjDict.Values.FirstOrDefault(bo => bo.teamHero.NPCID == bossId); return bo; } return null; } } Main/System/Battle/BoneFieldBattleWin.cs
@@ -1,53 +1,39 @@ using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class BoneFieldBattleWin : UIBase { // 组件引用 [SerializeField] Transform transButtons; public Transform mountPoint; private BattleRootNode battleRootNode = null; private BoneBattleField battleField; [SerializeField] private Button btnSpeed; [SerializeField] private Text textSpeed; private BattleField battleField; [SerializeField] private Button btnPass; [SerializeField] private Button btnSpeed; [SerializeField] private Text textSpeed; [SerializeField] private Button btnPass; [SerializeField] private Button btnPause; [SerializeField] private Button btnPause; public BossLifeBar bossLifeBar; public SkillWordCell[] skillWordCells; public BossHeadCell bossHeadCell; public Text txtBossName; public Text txtBattleRound; public TotalDamageDisplayer totalDamageDisplayer; // public SkillTips skillTipsRed; // public SkillTips skillTipsBlue; private BattleObject bossBattleObject = null; // [SerializeField] public List<BattleBuffCell> buffCells; // 生命周期 protected override void InitComponent() { base.InitComponent(); // 初始化组件引用 绑定按钮等UI组件事件 btnSpeed.AddListener(ChangeSpeed); btnPass.AddListener(OnClickPass); btnPause.AddListener(OnClickPause); } @@ -55,7 +41,6 @@ { if (null == battleField) return; battleField.IsPause = !battleField.IsPause; } @@ -63,7 +48,6 @@ { if (null == battleField) return; battleField.ForceFinish(); } @@ -71,7 +55,6 @@ { if (null == battleField) return; BattleManager.Instance.speedIndex = (BattleManager.Instance.speedIndex + 1) % BattleManager.Instance.speedGear.Length; battleField.SetSpeedRatio(BattleManager.Instance.speedGear[BattleManager.Instance.speedIndex]); textSpeed.text = (BattleManager.Instance.speedIndex + 1).ToString(); @@ -81,32 +64,166 @@ { base.OnPreOpen(); // SetBattleField(BattleManager.Instance.storyBattleField); MainWin.TabChangeEvent += OnTabChangeEvent; BattleManager.Instance.onBattleFieldCreate += OnCreateBattleField; UIManager.Instance.CloseWindow<MainWin>(); EventBroadcast.Instance.AddListener<BattleDmgInfo>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken); EventBroadcast.Instance.AddListener<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, OnCastSkill); BattleManager.Instance.storyBattleField.IsPause = true; bool isOpenBattleChangeTab = IsOpenBattleChangeTab(); transButtons.localPosition = new Vector3(0, isOpenBattleChangeTab ? 200 : 0, 0); if (isOpenBattleChangeTab) { UIManager.Instance.GetUI<MainWin>()?.CloseSubUI(); } else { UIManager.Instance.CloseWindow<MainWin>(); } } protected override void OnPreClose() { base.OnPreClose(); UIManager.Instance.CloseWindow<BattleHUDWin>(); MainWin.TabChangeEvent -= OnTabChangeEvent; BattleManager.Instance.onBattleFieldCreate -= OnCreateBattleField; EventBroadcast.Instance.RemoveListener<BattleDmgInfo>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken); EventBroadcast.Instance.RemoveListener<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, OnCastSkill); UIManager.Instance.CloseWindow<BattleHUDWin>(); if (!UIManager.Instance.IsOpened<MainWin>()) bool isOpenBattleChangeTab = IsOpenBattleChangeTab(); if (isOpenBattleChangeTab) { UIManager.Instance.GetUI<MainWin>()?.RestoreSubUI(); } else { UIManager.Instance.OpenWindow<MainWin>(); } if (bossBattleObject != null) { if (bossBattleObject.buffMgr != null) { bossBattleObject.buffMgr.onBuffChanged -= OnBuffChanged; } bossBattleObject = null; } if (battleField != null) { battleField.OnRoundChange -= OnRoundChange; battleField = null; } } private void OnTabChangeEvent() { UIManager.Instance.CloseWindow<BoneFieldBattleWin>(); } private void OnCastSkill(string guid, SkillConfig skillConfig, TeamHero teamHero) { if (battleField == null) return; if (battleField.guid != guid) return; BattleObject battleObject = battleField.battleObjMgr.GetBattleObject(teamHero.ObjID); bool isRed = battleObject.Camp == BattleCamp.Red; // SkillTips tips = isRed ? skillTipsRed : skillTipsBlue; // tips.PlayMotion(battleField, isRed, teamHero, skillConfig); } private void OnCreateBattleField(string arg1, BattleField field) { if (field.GetType() == battleField.GetType()) { SetBattleField(field); SetBattleField(field as BoneBattleField); } } protected override void OnOpen() public void Display() { base.OnOpen(); NPCLineupConfig lineupConfig = battleField.GetBossLineupConfig(); if (bossBattleObject != null) { if (bossBattleObject.buffMgr != null) { bossBattleObject.buffMgr.onBuffChanged -= OnBuffChanged; } bossBattleObject = null; } bossBattleObject = battleField.FindBoss(); DisplaySkillWordsList(lineupConfig); if (null != bossBattleObject) { TeamHero teamHero = bossBattleObject.teamHero; bossHeadCell.SetTeamHero(teamHero); txtBossName.text = teamHero.name; NPCConfig npcConfig = NPCConfig.Get(teamHero.NPCID); bossLifeBar.SetBaseInfo(Mathf.Max(1, npcConfig.LifeBarCount), (ulong)teamHero.curHp, (ulong)teamHero.maxHp); bossBattleObject.buffMgr.onBuffChanged -= OnBuffChanged; bossBattleObject.buffMgr.onBuffChanged += OnBuffChanged; } else { bossHeadCell.SetTeamHero(null); txtBossName.text = string.Empty; bossLifeBar.SetBaseInfo(2, 2, 2); Debug.LogError("找不到boss"); } OnRoundChange(battleField.round, battleField.turnMax); OnBuffChanged(); totalDamageDisplayer.SetActive(false); // skillTipsBlue.SetActive(false); // skillTipsRed.SetActive(false); } private void OnBuffChanged() { var buffList = new List<HB428_tagSCBuffRefresh>(); if (null != bossBattleObject) { buffList = bossBattleObject.buffMgr.GetBuffList(); } // RefreshBuff(buffList); } private void RefreshHP() { if (null != bossBattleObject) { TeamHero teamHero = bossBattleObject.teamHero; bossLifeBar.Show((ulong)teamHero.curHp, (ulong)teamHero.maxHp); } } private void OnDamageTaken(BattleDmgInfo info) { if (info.battleFieldGuid != battleField.guid) return; if (info.hurtObj.ObjID == bossBattleObject.ObjID) { // Update the boss's health bar RefreshHP(); } totalDamageDisplayer.SetDamage(info); } protected override void OnClose() @@ -132,8 +249,14 @@ base.CompleteClose(); } public void SetBattleField(BattleField _battleField) public void SetBattleField(BoneBattleField _battleField) { if (battleField != null) { battleField.OnRoundChange -= OnRoundChange; battleField = null; } battleField = _battleField; if (battleRootNode != null) { @@ -156,7 +279,70 @@ ui.SetBattleField(battleField); battleField.UpdateCanvas(canvas); Display(); battleField.OnRoundChange += OnRoundChange; textSpeed.text = (BattleManager.Instance.speedIndex + 1).ToString(); } public void DisplaySkillWordsList(NPCLineupConfig lineUPConfig) { if (skillWordCells.IsNullOrEmpty()) return; if (null == lineUPConfig) return; for (int i = 0; i < skillWordCells.Length; i++) { if (i < lineUPConfig.SkillIDExList.Length) { skillWordCells[i].SetActive(true); int skillID = lineUPConfig.SkillIDExList[i]; skillWordCells[i].Init(skillID, () => { SmallTipWin.showText = Language.Get("SmallTipFomat", SkillConfig.Get(skillID)?.SkillName, SkillConfig.Get(skillID)?.Description); SmallTipWin.worldPos = CameraManager.uiCamera.ScreenToWorldPoint(Input.mousePosition); SmallTipWin.isDownShow = true; UIManager.Instance.OpenWindow<SmallTipWin>(); }); } else { skillWordCells[i].SetActive(false); } } } // public void RefreshBuff(List<HB428_tagSCBuffRefresh> datas) // { // if (buffCells.IsNullOrEmpty()) // return; // for (int i = 0; i < buffCells.Count; i++) // { // if (i < datas.Count) // { // buffCells[i].SetActive(true); // HB428_tagSCBuffRefresh buffData = datas[i]; // buffCells[i].Init(buffData, () => // { // // 点击buff图标 显示buff描述/当前身上所有buff // }); // } // else // { // buffCells[i].SetActive(false); // } // } // } private void OnRoundChange(int round, int maxRound) { txtBattleRound.text = string.Format("{0}/{1}", round, maxRound); } bool IsOpenBattleChangeTab() { return FuncOpen.Instance.IsFuncOpen(ArenaManager.Instance.BattleChangeTabFuncId); } } Main/System/ChallengeTab/ChallengeTabWin.cs
@@ -5,7 +5,7 @@ { [SerializeField] ChallengeTabButton btnBoneField; [SerializeField] ChallengeTabButton btnArena; protected override void InitComponent() { base.InitComponent(); @@ -126,7 +126,24 @@ UIManager.Instance.CloseWindow<ChallengeTabWin>(); if (!FuncOpen.Instance.IsFuncOpen(funcId, true)) return; UIManager.Instance.OpenWindow<BoneFieldWin>(); BattleField battleField = BattleManager.Instance.GetBattleFieldByMapID(30010); if (battleField != null) { BoneFieldBattleWin battleWin; if (!UIManager.Instance.IsOpened<BoneFieldBattleWin>()) { battleWin = UIManager.Instance.OpenWindow<BoneFieldBattleWin>(); } else { battleWin = UIManager.Instance.GetUI<BoneFieldBattleWin>(); } battleWin.SetBattleField(battleField as BoneBattleField); } else { UIManager.Instance.OpenWindow<BoneFieldWin>(); } }); } Main/System/Settlement/BattleSettlementManager.cs
@@ -38,6 +38,9 @@ case "ArenaBattleField": PopupWindowsProcessor.Instance.Add(isWin ? "ArenaBattleVictoryWin" : "ArenaBattleFailWin", false); break; case "BoneBattleField": PopupWindowsProcessor.Instance.Add(isWin ? "BoneBattleVictoryWin" : "BoneBattleFailWin", false); break; default: PopupWindowsProcessor.Instance.Add(isWin ? "BattleVictoryWin" : "BattleFailWin", false); break; @@ -59,6 +62,16 @@ UIManager.Instance.OpenWindow<ArenaBattleFailWin>(); } break; case "BoneBattleField": if (isWin) { UIManager.Instance.OpenWindow<BoneBattleVictoryWin>(); } else { UIManager.Instance.OpenWindow<BoneBattleFailWin>(); } break; default: if (isWin) { Main/System/Settlement/BoneBattleFailWin.cs
New file @@ -0,0 +1,41 @@ using System; using System.Collections.Generic; using Cysharp.Threading.Tasks; using LitJson; using UnityEngine; using UnityEngine.UI; //战场结算界面,存在多个的情况 public class BoneBattleFailWin : UIBase { [SerializeField] TextEx txtFuncName; [SerializeField] Button tipEquipBtn; [SerializeField] Button tipHeroPosBtn; string battleName = "BoneBattleField"; protected override void InitComponent() { tipEquipBtn.AddListener(() => { CloseWindow(); }); tipHeroPosBtn.AddListener(() => { CloseWindow(); UIManager.Instance.OpenWindow<HeroPosWin>(); }); } protected override void OnPreOpen() { int funcId = BoneFieldManager.Instance.funcId; txtFuncName.text = FuncOpenLVConfig.HasKey(funcId) ? FuncOpenLVConfig.Get(funcId).Name : string.Empty; } protected override void OnPreClose() { BattleSettlementManager.Instance.WinShowOver(battleName); } } Main/System/Settlement/BoneBattleFailWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 67d3854b366b0f64cb73de975d6aa391 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Settlement/BoneBattleVictoryWin.cs
New file @@ -0,0 +1,76 @@ using System.Collections.Generic; using Cysharp.Threading.Tasks; using UnityEngine; public class BoneBattleVictoryWin : UIBase { [SerializeField] TextEx txtFuncName; [SerializeField] ScrollerController scroller; string battleName = "BoneBattleField"; protected override void OnPreOpen() { scroller.OnRefreshCell += OnRefreshCell; CreateScroller(); int funcId = BoneFieldManager.Instance.funcId; txtFuncName.text = FuncOpenLVConfig.HasKey(funcId) ? FuncOpenLVConfig.Get(funcId).Name : string.Empty; } protected override void OnPreClose() { scroller.OnRefreshCell -= OnRefreshCell; BattleSettlementManager.Instance.WinShowOver(battleName); } List<Item> showItems = new List<Item>(); void CreateScroller() { var jsonData = BattleSettlementManager.Instance.GetBattleSettlement(battleName); if (jsonData == null) { DelayCloseWindow().Forget(); return; } showItems.Clear(); scroller.Refresh(); if (!jsonData.ContainsKey("itemInfo")) { return; } var resultStr = jsonData["itemInfo"]; for (int i = 0; i < resultStr.Count; i++) { showItems.Add(new Item((int)resultStr[i]["ItemID"], (long)resultStr[i]["Count"])); } showItems.Sort(SortItem); for (int i = 0; i < showItems.Count; i++) { scroller.AddCell(ScrollerDataType.Header, i); } scroller.Restart(); } int SortItem(Item itemA, Item itemB) { var itemConfigA = ItemConfig.Get(itemA.id); var itemConfigB = ItemConfig.Get(itemB.id); return itemConfigB.ItemColor - itemConfigA.ItemColor; } void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell as SettlementAwardCell; var item = showItems[cell.index]; _cell?.Display(item.id, item.countEx); } } Main/System/Settlement/BoneBattleVictoryWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 8c57d47824f8a4e4fb5f62b5cbe99f86 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: