BattleSetupMenuUI.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using System.Collections.Generic;
  2. using System.Threading.Tasks;
  3. using UnityEngine;
  4. using UnityEngine.SceneManagement;
  5. using UnityEngine.UIElements;
  6. public class BattleSetupMenuUI : MonoBehaviour
  7. {
  8. public VisualTreeAsset characterEntryTemplate; // Assign in the inspector
  9. private List<VisualElement> playerEntries = new();
  10. private List<VisualElement> enemyEntries = new();
  11. private VisualElement root;
  12. private Button startButton;
  13. void OnEnable()
  14. {
  15. root = GetComponent<UIDocument>().rootVisualElement;
  16. var playerList = root.Q<ScrollView>("PlayerList");
  17. var enemyList = root.Q<ScrollView>("EnemyList");
  18. var addPlayerButton = root.Q<Button>("AddPlayerButton");
  19. var addEnemyButton = root.Q<Button>("AddEnemyButton");
  20. startButton = root.Q<Button>("StartBattleButton");
  21. addPlayerButton.clicked += () => AddCharacterEntry(playerList, true);
  22. addEnemyButton.clicked += () => AddCharacterEntry(enemyList, false);
  23. startButton.clicked += StartBattle;
  24. UpdateStartButton();
  25. }
  26. void AddCharacterEntry(ScrollView list, bool isPlayer)
  27. {
  28. var entry = characterEntryTemplate.Instantiate();
  29. var nameText = entry.Q<TextField>("CharacterName");
  30. var weaponDropdown = entry.Q<DropdownField>("WeaponDropdown");
  31. var removeButton = entry.Q<Button>("RemoveButton");
  32. nameText.value = isPlayer ? "Player" : "Enemy";
  33. weaponDropdown.choices = new List<string> { "Sword", "Bow" };
  34. weaponDropdown.value = "Sword";
  35. removeButton.clicked += () =>
  36. {
  37. list.Remove(entry);
  38. if (isPlayer) playerEntries.Remove(entry);
  39. else enemyEntries.Remove(entry);
  40. UpdateStartButton();
  41. };
  42. list.Add(entry);
  43. if (isPlayer) playerEntries.Add(entry);
  44. else enemyEntries.Add(entry);
  45. UpdateStartButton();
  46. }
  47. void UpdateStartButton()
  48. {
  49. startButton.SetEnabled(playerEntries.Count > 0 && enemyEntries.Count > 0);
  50. }
  51. void StartBattle()
  52. {
  53. BattleSetupData.playerSelections.Clear();
  54. BattleSetupData.enemySelections.Clear();
  55. foreach (var entry in playerEntries)
  56. {
  57. BattleSetupData.playerSelections.Add(GetSelectionFromEntry(entry, true));
  58. }
  59. foreach (var entry in enemyEntries)
  60. {
  61. BattleSetupData.enemySelections.Add(GetSelectionFromEntry(entry, false));
  62. }
  63. SceneManager.LoadScene("BattleScene");
  64. }
  65. CharacterSelection GetSelectionFromEntry(VisualElement entry, bool isPlayer)
  66. {
  67. var dropdown = entry.Q<DropdownField>("WeaponDropdown");
  68. var nameText = entry.Q<TextField>("CharacterName");
  69. return new CharacterSelection
  70. {
  71. characterName = nameText.value,
  72. weaponType = dropdown.value
  73. };
  74. }
  75. }