Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB424_tagSCTurnFightInit.cs
@@ -66,10 +66,25 @@ BattleDebug.LogError("创建战场 guid:" + guid + " MapID:" + vNetData.MapID + " FuncLineID:" + vNetData.FuncLineID + " " + battleField.GetType().ToString()); if (vNetData.MapID == 1) { BattleWin battleWin = UIManager.Instance.GetUI<BattleWin>(); if (null != battleWin) { battleWin.SetBattleField(battleField); } } else { FullScreenBattleWin fsBattleWin = UIManager.Instance.GetUI<FullScreenBattleWin>(); if (null == fsBattleWin) { fsBattleWin = UIManager.Instance.OpenWindow<FullScreenBattleWin>(); } fsBattleWin.SetBattleField(battleField); } } } Main/System/Battle/BattleConst.cs
@@ -25,6 +25,13 @@ // 激活英雄后特效|激活英雄|激活英雄前特效 // 应该如何管理层级? // RendererAdjuster如何替换EffectPenetrationBlocker? // RendererAdjuster应该不参与管理子RendererAdjuster // RendererAdjuster怎么联系起来 public const int BattleBlackTransparentMaskOffset = 100; @@ -38,6 +45,11 @@ { return battleWin.GetSortingOrder(); } FullScreenBattleWin fsBattleWin = UIManager.Instance.GetUI<FullScreenBattleWin>(); if (fsBattleWin != null) { return fsBattleWin.GetSortingOrder(); } return 0; } } Main/System/Battle/BattleField/BattleField.cs
@@ -3,6 +3,7 @@ using System; using LitJson; using DG.Tweening; using Codice.Client.BaseCommands; public class BattleField { @@ -121,6 +122,7 @@ SetBattleStartState(); SetSpeedRatio(speedRatio); SetRootNodePosition(); } public void SetSpeedRatio(float ratio) @@ -326,6 +328,7 @@ public virtual void Destroy() { ForceFinish(); // 销毁全部内容 BattleManager.Instance.DestroyBattleField(this); } @@ -571,4 +574,22 @@ Debug.LogError($"BattleObject with ID {vNetData.ObjID} not found for buff refresh."); } } public void SetRootNodePosition() { if (1 == MapID) { battleRootNode.imgBackground.rectTransform.anchoredPosition = new Vector2(0, -335f); } else { battleRootNode.imgBackground.rectTransform.anchoredPosition = new Vector2(0, -750f); // (battleRootNode.transform as RectTransform).anchoredPosition = new Vector2(100, 100); } } public void ForceFinish() { recordPlayer.HaveRest(); } } Main/System/Battle/BattleField/BattleRootNode.cs
@@ -55,4 +55,6 @@ public Transform skillFrontNode; public GameObject skillMaskNode; public GameObject battleStartNode; } Main/System/Battle/BattleField/RecordActions/BattleEndAction.cs
@@ -23,14 +23,16 @@ base.Run(); Debug.Log("Battle Ended"); onComplete?.Invoke(); isFinish = true; onComplete?.Invoke(); } public override void ForceFinish() { onComplete?.Invoke(); if (isFinish) return; base.ForceFinish(); onComplete?.Invoke(); } public override bool IsFinished() Main/System/Battle/BattleField/RecordActions/BattleStartAction.cs
@@ -29,12 +29,16 @@ battleField.StartBattle(() => { isFinish = true; // 完成就开始显示UI EventBroadcast.Instance.Broadcast(EventName.DISPLAY_BATTLE_UI, battleField.guid, true); battleField.battleRootNode.battleStartNode.SetActive(true); UniTaskExtension.DelayTime((GameObject)null, 1f, () => { isFinish = true; battleField.battleRootNode.battleStartNode.SetActive(false); EventBroadcast.Instance.Broadcast(EventName.DISPLAY_BATTLE_UI, battleField.guid, true); battleField.DistributeNextPackage(); }); }); isRun = true; } Main/System/Battle/BattleField/StoryBossBattleField.cs
@@ -77,9 +77,50 @@ protected override void OnSettlement(JsonData turnFightStateData) { base.OnSettlement(turnFightStateData); AutoFightModel.Instance.isPause = false; } private void WhaleFall() { // YYL TODO 应该需要一个结算界面来做这些内容 UIManager.Instance.CloseWindow<FullScreenBattleWin>(); AutoFightModel.Instance.isPause = false; Destroy(); } public override void OnBattleEnd(JsonData turnFightStateData) { BattleEndAction battleEndAction = new BattleEndAction(this, turnFightStateData, () => { BattleDebug.LogError(turnFightStateData.ToJson()); // 这里可以添加战斗结束的具体逻辑 OnSettlement(turnFightStateData); int winFaction = (int)turnFightStateData["winFaction"]; //获胜阵营: 一般为1或者2,当玩家发起的战斗时,如果获胜阵营不等于1代表玩家失败了 if (winFaction == 1) { Debug.LogError(guid + " : 战斗胜利"); // 战斗胜利 } else { // 战斗失败 Debug.LogError(guid + " : 战斗失败"); } IsBattleFinish = true; //提供外部 胜利等奖励显示 EventBroadcast.Instance.Broadcast<string, JsonData>(EventName.BATTLE_END, guid, turnFightStateData); WhaleFall(); }); recordPlayer.PlayRecord(battleEndAction); } public override void HaveRest() { Main/System/Battle/BattleManager.cs
@@ -485,9 +485,11 @@ { try { foreach (var battleField in battleFields) List<string> keys = new List<string>(battleFields.Keys); for (int i = keys.Count - 1; i >= 0; i--) { battleField.Value?.Run(); var battleField = battleFields[keys[i]]; battleField?.Run(); } } catch (System.Exception ex) @@ -496,4 +498,16 @@ } } public BattleField GetBattleFieldByMapID(int v) { foreach (var battleField in battleFields) { if (battleField.Value.MapID == v) { return battleField.Value; } } return null; } } Main/System/Battle/FullScreenBattleWin.cs
New file @@ -0,0 +1,169 @@ using System; using UnityEngine; using UnityEngine.UI; public class FullScreenBattleWin : UIBase { float[] speedGear = { 1.1f, 1.3f, 1.5f }; // 组件引用 public Transform mountPoint; private BattleRootNode battleRootNode = null; public Button btnStop; private BattleField battleField; [SerializeField] private Button btnSpeed; [SerializeField] private Text textSpeed; [SerializeField] private Button btnPass; [SerializeField] private Button btnPause; // 生命周期 protected override void InitComponent() { base.InitComponent(); // 初始化组件引用 绑定按钮等UI组件事件 btnStop.AddListener(PauseGame); btnSpeed.AddListener(ChangeSpeed); btnPass.AddListener(OnClickPass); btnPause.AddListener(OnClickPause); } private void OnClickPause() { if (null == battleField) return; battleField.IsPause = !battleField.IsPause; } private void OnClickPass() { if (null == battleField) return; battleField.ForceFinish(); } private void ChangeSpeed() { if (null == battleField) return; int index = Array.IndexOf(speedGear, battleField.speedRatio); index = (index + 1) % speedGear.Length; battleField.SetSpeedRatio(speedGear[index]); textSpeed.text = (index + 1).ToString(); } private void PauseGame() { // BattleDebug.LogError("PauseeGame"); if (null == battleField) return; battleField.IsPause = !battleField.IsPause; BattleDebug.LogError(" is pause " + battleField.IsPause.ToString()); // if (battleField != null) // { // battleField.operationAgent.DoNext(); // } } protected override void OnPreOpen() { base.OnPreOpen(); // SetBattleField(BattleManager.Instance.storyBattleField); BattleManager.Instance.onBattleFieldCreate += OnCreateBattleField; UIManager.Instance.CloseWindow<MainWin>(); } protected override void OnPreClose() { base.OnPreClose(); UIManager.Instance.CloseWindow<BattleHUDWin>(); BattleManager.Instance.onBattleFieldCreate -= OnCreateBattleField; UIManager.Instance.OpenWindow<MainWin>(0); } private void OnCreateBattleField(string arg1, BattleField field) { if (field.GetType() == battleField.GetType()) { SetBattleField(field); } } protected override void OnOpen() { base.OnOpen(); } protected override void OnClose() { base.OnClose(); if (battleRootNode != null) { battleRootNode.transform.SetParent(Launch.Instance.transform); battleRootNode.transform.localPosition = new Vector3(-10000, -10000, 0); } battleField = null; } protected override void NextFrameAfterOpen() { base.NextFrameAfterOpen(); } protected override void CompleteClose() { base.CompleteClose(); } public void SetBattleField(BattleField _battleField) { battleField = _battleField; if (battleRootNode != null) { battleRootNode.transform.localPosition = Vector3.zero; battleRootNode.transform.SetParent(Launch.Instance.transform); } battleRootNode = battleField.battleRootNode; battleRootNode.transform.SetParent(mountPoint); battleRootNode.transform.localPosition = Vector3.zero; battleRootNode.transform.localScale = Vector3.one; BattleHUDWin ui = UIManager.Instance.GetUI<BattleHUDWin>(); if (null == ui) { ui = UIManager.Instance.OpenWindow<BattleHUDWin>(); } ui.SetBattleField(battleField); battleField.UpdateCanvas(canvas); textSpeed.text = (Array.IndexOf(speedGear, battleField.speedRatio) + 1).ToString(); } } Main/System/Battle/FullScreenBattleWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: b6123261c7e438e46a128ac22a8dbf9b MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Battle/RecordPlayer/RecordPlayer.cs
@@ -156,6 +156,11 @@ public void HaveRest() { ForceFinish(); } public void ForceFinish() { for (int i = 0; i < immediatelyActionList.Count; i++) { immediatelyActionList[i].ForceFinish(); Main/System/Main/HomeWin.cs
@@ -59,10 +59,7 @@ protected override void InitComponent() { taskButton.AddListener(OnClickTaskButton); bossBtn.AddListener(() => { UIManager.Instance.OpenWindow<MainBossEnterWin>(); }); bossBtn.AddListener(OnClickEnterBoss); changeHeroPosBtn.AddListener(() => { @@ -146,6 +143,20 @@ UIManager.Instance.CloseWindow<BattleWin>(); } private void OnClickEnterBoss() { BattleField battleField = BattleManager.Instance.GetBattleFieldByMapID(2); //BOSS战斗 if (null != battleField) { FullScreenBattleWin fsBattleWin = UIManager.Instance.OpenWindow<FullScreenBattleWin>(); fsBattleWin.SetBattleField(battleField); return; } UIManager.Instance.OpenWindow<MainBossEnterWin>(); } void PlayerDataRefresh(PlayerDataType type) { switch (type) Main/System/Team/TeamHero.cs
@@ -22,11 +22,10 @@ public int positionNum; //注意服务端的1号位是1,客户端在使用时是0,通信和策划沟通用1 // 战场数据 public int ObjID = 0;// 战斗单位唯一ID public int NPCID = 0;// 战斗NPCID,不同的实例ID对应的NPCID可能一样 public int NPCID = 0;// 战斗NPCID,不同的实例ID对应的NPCID可能一样 (目前只用来区别玩家跟NPC) // 服务器来的构造 @@ -56,16 +55,6 @@ SkinID = (int)fightObj.SkinID; modelScale = 1f; name = heroConfig.Name; } else if (fightObj.NPCID > 0) { //走NPC的逻辑 NPCConfig npcConfig = NPCConfig.Get((int)fightObj.NPCID); Country = (HeroCountry)npcConfig.Country; SkinID = npcConfig.SkinID; modelScale = npcConfig.ModelScale; name = npcConfig.NPCName; } else