From 214fe94eaf7f09741a7857775dfffe8c3b83c75c Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期一, 25 八月 2025 17:38:30 +0800
Subject: [PATCH] 125 【战斗】战斗系统

---
 Assets/Editor/ScriptEditor/TestActionEditorWindow.cs.meta      |   11 ++
 Assets/Editor/ScriptEditor/TestSkillActionEditorWindow.cs      |   73 ++++++++++++++++++
 Assets/Launch/Launch.cs                                        |    2 
 Assets/Editor/ScriptEditor/TestSkillActionEditorWindow.cs.meta |   11 ++
 Assets/Editor/ScriptEditor/TestActionEditorWindow.cs           |  133 +++++++++++++++++++++++++++++++++
 5 files changed, 230 insertions(+), 0 deletions(-)

diff --git a/Assets/Editor/ScriptEditor/TestActionEditorWindow.cs b/Assets/Editor/ScriptEditor/TestActionEditorWindow.cs
new file mode 100644
index 0000000..3865e64
--- /dev/null
+++ b/Assets/Editor/ScriptEditor/TestActionEditorWindow.cs
@@ -0,0 +1,133 @@
+#if UNITY_EDITOR
+using UnityEditor;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class TestActionEditorWindow : EditorWindow
+{
+    protected int targetIndex = 0;
+    protected int selfIndex = 0;
+    protected int distance = 100;
+    protected float duration = 2f;
+
+    [MenuItem("Battle/TestAction鐢熸垚鍣�")]
+    public static void ShowWindow()
+    {
+        GetWindow<TestActionEditorWindow>("TestAction鐢熸垚鍣�");
+    }
+
+    private void OnGUI()
+    {
+        GUILayout.Label("TestAction鍙傛暟璁剧疆", EditorStyles.boldLabel);
+
+        targetIndex = EditorGUILayout.IntField("Target Index", targetIndex);
+        selfIndex = EditorGUILayout.IntField("Self Index", selfIndex);
+        distance = EditorGUILayout.IntField("Distance", distance);
+        duration = EditorGUILayout.FloatField("Duration", duration);
+
+        if (GUILayout.Button("鐢熸垚骞舵挱鏀� TestAction"))
+        {
+            PlayTestAction();
+        }
+
+        if (GUILayout.Button("鏍囪璧风偣鍜岀粓鐐�"))
+        {
+            MarkStartAndEnd();
+        }
+
+        if (GUILayout.Button("澶嶄綅RecordPlayer"))
+        {
+            ResetRecordPlayer();
+        }
+    }
+
+    private void PlayTestAction()
+    {
+        // 杩愯鏃舵墠鎵ц
+        if (!Application.isPlaying)
+        {
+            Debug.LogWarning("璇峰湪杩愯鏃朵娇鐢ㄨ鍔熻兘锛�");
+            return;
+        }
+
+        var battleField = BattleManager.Instance.storyBattleField;
+        if (battleField == null || battleField.recordPlayer == null)
+        {
+            Debug.LogError("BattleManager.storyBattleField 鎴� recordPlayer 鏈垵濮嬪寲锛�");
+            return;
+        }
+
+        var action = new TestAction(battleField, targetIndex, selfIndex, distance, duration);
+        battleField.recordPlayer.PlayRecord(action);
+        Debug.Log($"宸茬敓鎴愬苟鎾斁 TestAction: targetIndex={targetIndex}, selfIndex={selfIndex}, distance={distance}, duration={duration}");
+    }
+
+    private void MarkStartAndEnd()
+    {
+        // 杩愯鏃舵墠鎵ц
+        if (!Application.isPlaying)
+        {
+            Debug.LogWarning("璇峰湪杩愯鏃朵娇鐢ㄨ鍔熻兘锛�");
+            return;
+        }
+
+        var battleField = BattleManager.Instance.storyBattleField;
+        if (battleField == null)
+        {
+            Debug.LogError("BattleManager.storyBattleField 鏈垵濮嬪寲锛�");
+            return;
+        }
+
+        // 鑾峰彇鑺傜偣
+        RectTransform startNode = battleField.GetTeamNode(BattleCamp.Red, selfIndex);
+        RectTransform endNode = battleField.GetTeamNode(BattleCamp.Blue, targetIndex);
+
+        BattleWin battleWin = UIManager.Instance.GetUI<BattleWin>();
+        RectTransform canvasRect = battleWin.transform as RectTransform;
+
+        CreateMarker(canvasRect, startNode, "StartMarker");
+        CreateMarker(canvasRect, endNode, "EndMarker");
+    }
+
+    private void CreateMarker(RectTransform canvasRect, RectTransform targetNode, string markerName)
+    {
+        // 鑾峰彇鐩爣鑺傜偣鐨勪笘鐣屽潗鏍囷紙涓績鐐癸級
+        Vector3 worldPos = targetNode.TransformPoint(targetNode.rect.center);
+
+        // 杞崲鍒癈anvas鏈湴鍧愭爣
+        Vector2 localPoint;
+        RectTransformUtility.ScreenPointToLocalPointInRectangle(
+            canvasRect,
+            RectTransformUtility.WorldToScreenPoint(null, worldPos),
+            null,
+            out localPoint);
+
+        // 鍒涘缓RawImage
+        GameObject marker = new GameObject(markerName, typeof(RawImage));
+        marker.transform.SetParent(canvasRect, false);
+        var rawImage = marker.GetComponent<RawImage>();
+        rawImage.color = Color.white;
+        rawImage.rectTransform.sizeDelta = new Vector2(100, 100);
+        rawImage.rectTransform.anchoredPosition = localPoint;
+    }
+
+    private void ResetRecordPlayer()
+    {
+        if (!Application.isPlaying)
+        {
+            Debug.LogWarning("璇峰湪杩愯鏃朵娇鐢ㄨ鍔熻兘锛�");
+            return;
+        }
+
+        var battleField = BattleManager.Instance.storyBattleField;
+        if (battleField == null || battleField.recordPlayer == null)
+        {
+            Debug.LogError("BattleManager.storyBattleField 鎴� recordPlayer 鏈垵濮嬪寲锛�");
+            return;
+        }
+
+        battleField.recordPlayer.HaveRest();
+        Debug.Log("RecordPlayer宸插浣嶏紒");
+    }
+}
+#endif
\ No newline at end of file
diff --git a/Assets/Editor/ScriptEditor/TestActionEditorWindow.cs.meta b/Assets/Editor/ScriptEditor/TestActionEditorWindow.cs.meta
new file mode 100644
index 0000000..27e944a
--- /dev/null
+++ b/Assets/Editor/ScriptEditor/TestActionEditorWindow.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ec550ea40001db4439cc23b8e873defd
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Editor/ScriptEditor/TestSkillActionEditorWindow.cs b/Assets/Editor/ScriptEditor/TestSkillActionEditorWindow.cs
new file mode 100644
index 0000000..a290c59
--- /dev/null
+++ b/Assets/Editor/ScriptEditor/TestSkillActionEditorWindow.cs
@@ -0,0 +1,73 @@
+#if UNITY_EDITOR
+using UnityEditor;
+using UnityEngine;
+
+public class TestSkillActionEditorWindow : EditorWindow
+{
+    protected int skillId = 1;
+    protected int hurtIndex = 0;
+
+    [MenuItem("Battle/TestSkillAction鐢熸垚鍣�")]
+    public static void ShowWindow()
+    {
+        GetWindow<TestSkillActionEditorWindow>("TestSkillAction鐢熸垚鍣�");
+    }
+
+    private void OnGUI()
+    {
+        GUILayout.Label("TestSkillAction鍙傛暟璁剧疆", EditorStyles.boldLabel);
+
+        skillId = EditorGUILayout.IntField("Skill ID", skillId);
+        hurtIndex = EditorGUILayout.IntField("Hurt Index", hurtIndex);
+
+        if (GUILayout.Button("鐢熸垚骞舵挱鏀� TestSkillAction"))
+        {
+            PlayTestSkillAction();
+        }
+
+        if (GUILayout.Button("澶嶄綅RecordPlayer"))
+        {
+            ResetRecordPlayer();
+        }
+    }
+
+    private void PlayTestSkillAction()
+    {
+        if (!Application.isPlaying)
+        {
+            Debug.LogWarning("璇峰湪杩愯鏃朵娇鐢ㄨ鍔熻兘锛�");
+            return;
+        }
+
+        var battleField = BattleManager.Instance.storyBattleField;
+        if (battleField == null || battleField.recordPlayer == null)
+        {
+            Debug.LogError("BattleManager.storyBattleField 鎴� recordPlayer 鏈垵濮嬪寲锛�");
+            return;
+        }
+
+        var action = new TestSkillAction(battleField, skillId, hurtIndex);
+        battleField.recordPlayer.PlayRecord(action);
+        Debug.Log($"宸茬敓鎴愬苟鎾斁 TestSkillAction: skillId={skillId}, hurtIndex={hurtIndex}");
+    }
+
+    private void ResetRecordPlayer()
+    {
+        if (!Application.isPlaying)
+        {
+            Debug.LogWarning("璇峰湪杩愯鏃朵娇鐢ㄨ鍔熻兘锛�");
+            return;
+        }
+
+        var battleField = BattleManager.Instance.storyBattleField;
+        if (battleField == null || battleField.recordPlayer == null)
+        {
+            Debug.LogError("BattleManager.storyBattleField 鎴� recordPlayer 鏈垵濮嬪寲锛�");
+            return;
+        }
+
+        battleField.recordPlayer.HaveRest();
+        Debug.Log("RecordPlayer宸插浣嶏紒");
+    }
+}
+#endif
\ No newline at end of file
diff --git a/Assets/Editor/ScriptEditor/TestSkillActionEditorWindow.cs.meta b/Assets/Editor/ScriptEditor/TestSkillActionEditorWindow.cs.meta
new file mode 100644
index 0000000..75cebc7
--- /dev/null
+++ b/Assets/Editor/ScriptEditor/TestSkillActionEditorWindow.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4e1ba39e4d98a0740930d1303fe8c1d6
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Launch/Launch.cs b/Assets/Launch/Launch.cs
index 8b88680..a5faf41 100644
--- a/Assets/Launch/Launch.cs
+++ b/Assets/Launch/Launch.cs
@@ -16,6 +16,8 @@
 {
 #if UNITY_EDITOR
     public bool isOpenConfigTesting = false;
+
+    public bool isOpenBattleDebug = false;
 #endif
 
 

--
Gitblit v1.8.0