From eb2fcb2536a8cce0b971f827c9232a138262b219 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期三, 17 九月 2025 17:34:57 +0800
Subject: [PATCH] 125 【战斗】战斗系统 boss战&战斗开始 倍速 跳过 暂停
---
Main/System/Battle/BattleConst.cs | 12 ++
Main/System/Battle/BattleField/BattleRootNode.cs | 2
Main/System/Battle/BattleManager.cs | 18 ++
Main/System/Battle/BattleField/StoryBossBattleField.cs | 45 +++++++
Main/System/Battle/BattleField/BattleField.cs | 21 +++
Main/System/Battle/RecordPlayer/RecordPlayer.cs | 5
Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB424_tagSCTurnFightInit.cs | 23 +++
Main/System/Battle/BattleField/RecordActions/BattleEndAction.cs | 6
Main/System/Battle/BattleField/RecordActions/BattleStartAction.cs | 12 +
Main/System/Main/HomeWin.cs | 19 ++
Main/System/Battle/FullScreenBattleWin.cs | 169 ++++++++++++++++++++++++++++
Main/System/Battle/FullScreenBattleWin.cs.meta | 11 +
Main/System/Team/TeamHero.cs | 13 --
13 files changed, 326 insertions(+), 30 deletions(-)
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB424_tagSCTurnFightInit.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB424_tagSCTurnFightInit.cs
index 42d74c0..7a819b7 100644
--- a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB424_tagSCTurnFightInit.cs
+++ b/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());
- BattleWin battleWin = UIManager.Instance.GetUI<BattleWin>();
- if (null != battleWin)
+
+ if (vNetData.MapID == 1)
{
- battleWin.SetBattleField(battleField);
+ 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);
+ }
+ }
}
diff --git a/Main/System/Battle/BattleConst.cs b/Main/System/Battle/BattleConst.cs
index 0f46bc4..07c2e1c 100644
--- a/Main/System/Battle/BattleConst.cs
+++ b/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;
}
}
diff --git a/Main/System/Battle/BattleField/BattleField.cs b/Main/System/Battle/BattleField/BattleField.cs
index 4ec0e1b..da5622d 100644
--- a/Main/System/Battle/BattleField/BattleField.cs
+++ b/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();
+ }
}
diff --git a/Main/System/Battle/BattleField/BattleRootNode.cs b/Main/System/Battle/BattleField/BattleRootNode.cs
index 128b941..848d704 100644
--- a/Main/System/Battle/BattleField/BattleRootNode.cs
+++ b/Main/System/Battle/BattleField/BattleRootNode.cs
@@ -55,4 +55,6 @@
public Transform skillFrontNode;
public GameObject skillMaskNode;
+
+ public GameObject battleStartNode;
}
\ No newline at end of file
diff --git a/Main/System/Battle/BattleField/RecordActions/BattleEndAction.cs b/Main/System/Battle/BattleField/RecordActions/BattleEndAction.cs
index 453baad..bb9bcea 100644
--- a/Main/System/Battle/BattleField/RecordActions/BattleEndAction.cs
+++ b/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()
diff --git a/Main/System/Battle/BattleField/RecordActions/BattleStartAction.cs b/Main/System/Battle/BattleField/RecordActions/BattleStartAction.cs
index 879d478..8ffa9d1 100644
--- a/Main/System/Battle/BattleField/RecordActions/BattleStartAction.cs
+++ b/Main/System/Battle/BattleField/RecordActions/BattleStartAction.cs
@@ -29,11 +29,15 @@
battleField.StartBattle(() =>
{
- isFinish = true;
- // 瀹屾垚灏卞紑濮嬫樉绀篣I
- EventBroadcast.Instance.Broadcast(EventName.DISPLAY_BATTLE_UI, battleField.guid, true);
+ battleField.battleRootNode.battleStartNode.SetActive(true);
- battleField.DistributeNextPackage();
+ 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;
diff --git a/Main/System/Battle/BattleField/StoryBossBattleField.cs b/Main/System/Battle/BattleField/StoryBossBattleField.cs
index 386bdc1..4719ed4 100644
--- a/Main/System/Battle/BattleField/StoryBossBattleField.cs
+++ b/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浠h〃鐜╁澶辫触浜�
+
+ 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()
{
diff --git a/Main/System/Battle/BattleManager.cs b/Main/System/Battle/BattleManager.cs
index e801634..a21db8a 100644
--- a/Main/System/Battle/BattleManager.cs
+++ b/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;
+ }
}
\ No newline at end of file
diff --git a/Main/System/Battle/FullScreenBattleWin.cs b/Main/System/Battle/FullScreenBattleWin.cs
new file mode 100644
index 0000000..854af97
--- /dev/null
+++ b/Main/System/Battle/FullScreenBattleWin.cs
@@ -0,0 +1,169 @@
+锘縰sing 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();
+ // 鍒濆鍖栫粍浠跺紩鐢� 缁戝畾鎸夐挳绛塙I缁勪欢浜嬩欢
+
+ 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();
+ }
+}
diff --git a/Main/System/Battle/FullScreenBattleWin.cs.meta b/Main/System/Battle/FullScreenBattleWin.cs.meta
new file mode 100644
index 0000000..d46b4fa
--- /dev/null
+++ b/Main/System/Battle/FullScreenBattleWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b6123261c7e438e46a128ac22a8dbf9b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Battle/RecordPlayer/RecordPlayer.cs b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
index aff4442..7523f2c 100644
--- a/Main/System/Battle/RecordPlayer/RecordPlayer.cs
+++ b/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();
diff --git a/Main/System/Main/HomeWin.cs b/Main/System/Main/HomeWin.cs
index 4b6d0cd..6572837 100644
--- a/Main/System/Main/HomeWin.cs
+++ b/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)
diff --git a/Main/System/Team/TeamHero.cs b/Main/System/Team/TeamHero.cs
index 2c11b2a..5949d96 100644
--- a/Main/System/Team/TeamHero.cs
+++ b/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瀵瑰簲鐨凬PCID鍙兘涓�鏍�
+ public int NPCID = 0;// 鎴樻枟NPCID锛屼笉鍚岀殑瀹炰緥ID瀵瑰簲鐨凬PCID鍙兘涓�鏍� (鐩墠鍙敤鏉ュ尯鍒帺瀹惰窡NPC)
// 鏈嶅姟鍣ㄦ潵鐨勬瀯閫�
@@ -57,16 +56,6 @@
modelScale = 1f;
name = heroConfig.Name;
- }
- else if (fightObj.NPCID > 0)
- {
- //璧癗PC鐨勯�昏緫
- NPCConfig npcConfig = NPCConfig.Get((int)fightObj.NPCID);
- Country = (HeroCountry)npcConfig.Country;
- SkinID = npcConfig.SkinID;
- modelScale = npcConfig.ModelScale;
- name = npcConfig.NPCName;
-
}
else
{
--
Gitblit v1.8.0