diff --git a/Assets/00_scripts/Events/TurnScripts/Character.cs b/Assets/00_scripts/Events/TurnScripts/Character.cs index 8fbfc24..a89f9f2 100644 --- a/Assets/00_scripts/Events/TurnScripts/Character.cs +++ b/Assets/00_scripts/Events/TurnScripts/Character.cs @@ -8,21 +8,19 @@ public class Character : MonoBehaviour [SerializeField] private int ID; [SerializeField] private List ownedCardList; - private void Awake() - { - TurnManagerEvent.OnSetCardID += SetCardID; - } + private DATACLASS_CHARACTER_RENDER_DATA renderData; + public void SetID(int id) => ID = id; - private void OnDestroy() - { - TurnManagerEvent.OnSetCardID -= SetCardID; - } - private void SetCardID() + public void RecordRenderData(DATACLASS_CHARACTER_RENDER_DATA render_data) => renderData = render_data; + + public List SetCardID() { for (int i = 0; i < ownedCardList.Count; i++) { ownedCardList[i].SetID(int.Parse($"{ID}{i}")); } + + return ownedCardList; } } \ No newline at end of file diff --git a/Assets/00_scripts/Events/TurnScripts/CharacterManager.cs b/Assets/00_scripts/Events/TurnScripts/CharacterManager.cs new file mode 100644 index 0000000..6f5168e --- /dev/null +++ b/Assets/00_scripts/Events/TurnScripts/CharacterManager.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class CharacterManager : MonoBehaviour +{ + // ========== SerializeField ============== + [SerializeField] private Camera mainCamera; + [SerializeField] private Transform characterContainer; + [SerializeField] private float screenOffsetLeft = 8f; + [SerializeField] private float screenOffsetRight = 6f; + + // ========== Private ====================== + private List characterList = new(); + private readonly List characterPositionList = new(); + + private void Start() + { + if (mainCamera == null) mainCamera = Camera.main; + MathWorldPositionPoint(); // 计算每个单位的站位 + } + + + public void SetFightCharacter(List characters) => characterList = characters; + + public List RenderCharacterSprite() + { + List fightCharacterOwnedCard = new(); + for (var i = 0; i < characterList.Count; i++) + { + DATACLASS_CHARACTER_RENDER_DATA render_data; + render_data.IS_ENEMY = false; + render_data.RENDER_POSITION = characterPositionList[i]; + render_data.ROTATION = Quaternion.identity; + GameObject character_prefab = Instantiate( + characterList[i].gameObject, + position: render_data.RENDER_POSITION, + rotation: Quaternion.identity, + parent: characterContainer + ); + character_prefab.name = $"Character_{i}"; + characterList[i].RecordRenderData(render_data); + var character_card = characterList[i].SetCardID(); + fightCharacterOwnedCard.AddRange(character_card); + } + + return fightCharacterOwnedCard; + } + + private void MathWorldPositionPoint() + { + // 计算屏幕边界 + float screen_half = Screen.width / 2f; + float screen_offset_right = screen_half / screenOffsetRight; // 屏幕右边的偏移 + float screen_offset_left = screen_half / screenOffsetLeft; // 屏幕左边的偏移 + float in_fact_space = screen_half - screen_offset_right - screen_offset_left; // 屏幕内实际可用空间 + float sprite_space = in_fact_space / 3f; // 3张牌的实际可用空间 + float sprite_offset = (sprite_space * 0 + sprite_space * 1) / 2f; // 每个角色偏移一个单位 + for (int i = 0; i < 3; i++) + { + float position_x = screen_offset_left + i * sprite_space + sprite_offset; + characterPositionList.Add(switch_screen_position_to_world_position(position_x)); + // float position_x_enemy = screen_half + screen_offset_right + i * sprite_space + _sprite_offset; + // enemyPositionList.Add(switch_screen_position_to_world_position(position_x_enemy)); + } + + Vector3 switch_screen_position_to_world_position(float screen_position_x) + { + Vector3 world_position = mainCamera!.ScreenToWorldPoint( + new Vector3(screen_position_x, Screen.height / 2f, 0)); + world_position.y += characterContainer.transform.position.y; + world_position.z = 0; + return world_position; + } + } +} \ No newline at end of file diff --git a/Assets/00_scripts/Events/TurnScripts/CharacterManager.cs.meta b/Assets/00_scripts/Events/TurnScripts/CharacterManager.cs.meta new file mode 100644 index 0000000..9c2e263 --- /dev/null +++ b/Assets/00_scripts/Events/TurnScripts/CharacterManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: da98c08a0661fd2438aa37c5fba5167b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/00_scripts/Events/TurnScripts/TurnDataClass.cs b/Assets/00_scripts/Events/TurnScripts/TurnDataClass.cs new file mode 100644 index 0000000..cbcf724 --- /dev/null +++ b/Assets/00_scripts/Events/TurnScripts/TurnDataClass.cs @@ -0,0 +1,11 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + + +public struct DATACLASS_CHARACTER_RENDER_DATA +{ + public Vector2 RENDER_POSITION; + public bool IS_ENEMY; + public Quaternion ROTATION; +} \ No newline at end of file diff --git a/Assets/00_scripts/Events/TurnScripts/TurnDataClass.cs.meta b/Assets/00_scripts/Events/TurnScripts/TurnDataClass.cs.meta new file mode 100644 index 0000000..091b4cc --- /dev/null +++ b/Assets/00_scripts/Events/TurnScripts/TurnDataClass.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 72107e3866bfdd845937f7aac68def93 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/00_scripts/Events/TurnScripts/TurnManager.cs b/Assets/00_scripts/Events/TurnScripts/TurnManager.cs index 9ed6502..98991aa 100644 --- a/Assets/00_scripts/Events/TurnScripts/TurnManager.cs +++ b/Assets/00_scripts/Events/TurnScripts/TurnManager.cs @@ -6,17 +6,19 @@ using UnityEngine; public class TurnManager : MonoBehaviour { // ======== serializeField ======== - [SerializeField] private List playerCharacterList; // 玩家操作的角色列表 - + [SerializeField] private List playerCharacterGo; // 玩家队伍列表(应该传入5个角色), 暂时只传3个 [SerializeField] private int defaultHandCardNumber = 5; // 默认手牌数量 [SerializeField] private float everyCardDistributeDuration = 0.25f; // 系统发牌时间 [SerializeField] private float everyCardDiscardDuration = 0.25f; // 系统弃牌时间 + [SerializeField] private CharacterManager characterManager; // ======== private ======== - private List cardDeckList = new(); // 牌组 - private List cardPileList = new(); // 弃牌堆 + private TurnManagerSingleton turnManagerSingleton; + private List cardDeckList; // 牌组 + private readonly List cardPileList = new(); // 弃牌堆 private TurnManagerStateEnum turnManagerState; // 状态机 + private readonly List playerCharacterList = new(); private void Start() { @@ -30,9 +32,9 @@ public class TurnManager : MonoBehaviour if (turnManagerSingleton.GetNeedDebugLog()) Debug.Log("进入设置状态"); cardDeckList.Clear(); cardPileList.Clear(); - foreach (Character character in playerCharacterList) - { - } - // TODO: 创建牌组, 从角色数据中获取牌组列表 + foreach (GameObject go in playerCharacterGo) playerCharacterList.Add(go.GetComponent()); + foreach (var playerCharacter in playerCharacterList) playerCharacter.SetID(playerCharacterList.IndexOf(playerCharacter)); + characterManager.SetFightCharacter(playerCharacterList); // 从5个角色里选出三个, 暂时只选三个 + cardDeckList = characterManager.RenderCharacterSprite(); } } \ No newline at end of file diff --git a/Assets/Scenes/FightScene.unity b/Assets/Scenes/FightScene.unity index b80c6aa..6bba5bc 100644 --- a/Assets/Scenes/FightScene.unity +++ b/Assets/Scenes/FightScene.unity @@ -1026,6 +1026,7 @@ MonoBehaviour: defaultHandCardNumber: 5 everyCardDistributeDuration: 0.15 everyCardDiscardDuration: 0.12 + characterManager: {fileID: 0} --- !u!114 &526573211 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1440,6 +1441,7 @@ GameObject: m_Component: - component: {fileID: 723158417} - component: {fileID: 723158418} + - component: {fileID: 723158419} m_Layer: 0 m_Name: ChararcterManager m_TagString: Untagged @@ -1469,7 +1471,7 @@ MonoBehaviour: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 723158416} - m_Enabled: 1 + m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 30ab4f8291095c347bdf19e4350922ed, type: 3} m_Name: @@ -1484,6 +1486,22 @@ MonoBehaviour: enemyContainer: {fileID: 1358330957} mainCamera: {fileID: 452712464} showDebugObject: 0 +--- !u!114 &723158419 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 723158416} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da98c08a0661fd2438aa37c5fba5167b, type: 3} + m_Name: + m_EditorClassIdentifier: + mainCamera: {fileID: 0} + characterContainer: {fileID: 0} + screenOffsetLeft: 8 + screenOffsetRight: 6 --- !u!1 &893376454 GameObject: m_ObjectHideFlags: 0