UserSelectionManager.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. using Photon.Pun;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Collections;
  5. using UnityEngine;
  6. using System.Linq;
  7. public class UserSelectionManager : MonoBehaviourPunCallbacks
  8. {
  9. bool _endSelect = false;
  10. int _selectedIntValue = 0;
  11. bool _selectedBoolValue => getBoolFromInt(_selectedIntValue);
  12. public int SelectedIntValue => _selectedIntValue;
  13. public bool SelectedBoolValue => _selectedBoolValue;
  14. [PunRPC]
  15. public void SetInt(int value)
  16. {
  17. _selectedIntValue = value;
  18. _endSelect = true;
  19. }
  20. protected void SetInt_RPC(int value)
  21. {
  22. photonView.RPC("SetInt", RpcTarget.All, value);
  23. }
  24. [PunRPC]
  25. public void SetBool(bool value)
  26. {
  27. _selectedIntValue = getIntFromBool(value);
  28. _endSelect = true;
  29. }
  30. protected void SetBool_RPC(bool value)
  31. {
  32. photonView.RPC("SetBool", RpcTarget.All, value);
  33. }
  34. internal int getIntFromBool(bool value)
  35. {
  36. return value ? 0 : 1;
  37. }
  38. internal bool getBoolFromInt(int value)
  39. {
  40. return value == 0;
  41. }
  42. public IEnumerator WaitForEndSelect()
  43. {
  44. yield return new WaitWhile(() => !_endSelect);
  45. _endSelect = false;
  46. GManager.instance.commandText.CloseCommandText();
  47. yield return new WaitWhile(() => GManager.instance.commandText.gameObject.activeSelf);
  48. }
  49. public void SetIntSelection(List<SelectionElement<int>> selectionElements, Player selectPlayer, string selectPlayerMessage, string notSelectPlayerMessage)
  50. {
  51. if (selectPlayer.isYou)
  52. {
  53. GManager.instance.commandText.OpenCommandText(selectPlayerMessage);
  54. List<Command_SelectCommand> command_SelectCommands = new List<Command_SelectCommand>();
  55. foreach (SelectionElement<int> selectionElement in selectionElements)
  56. {
  57. command_SelectCommands.Add(new Command_SelectCommand(selectionElement.Message, () => SetInt_RPC(selectionElement.Value), selectionElement.SpriteIndex));
  58. }
  59. GManager.instance.selectCommandPanel.SetUpCommandButton(command_SelectCommands);
  60. }
  61. else
  62. {
  63. GManager.instance.commandText.OpenCommandText(notSelectPlayerMessage);
  64. #region AIƒ‚�[ƒh
  65. if (GManager.instance.IsAI)
  66. {
  67. List<int> canSelectValue = new List<int>();
  68. foreach (SelectionElement<int> selectionElement in selectionElements)
  69. {
  70. canSelectValue.Add(selectionElement.Value);
  71. }
  72. if (canSelectValue.Count >= 1)
  73. {
  74. SetInt(canSelectValue[UnityEngine.Random.Range(0, canSelectValue.Count)]);
  75. }
  76. else
  77. {
  78. SetInt(0);
  79. }
  80. }
  81. #endregion
  82. }
  83. }
  84. public void SetBoolSelection(List<SelectionElement<bool>> selectionElements, Player selectPlayer, string selectPlayerMessage, string notSelectPlayerMessage)
  85. {
  86. if (selectPlayer.isYou)
  87. {
  88. GManager.instance.commandText.OpenCommandText(selectPlayerMessage);
  89. List<Command_SelectCommand> command_SelectCommands = new List<Command_SelectCommand>();
  90. foreach (SelectionElement<bool> selectionElement in selectionElements)
  91. {
  92. command_SelectCommands.Add(new Command_SelectCommand(selectionElement.Message, () => SetBool_RPC(selectionElement.Value), selectionElement.SpriteIndex));
  93. }
  94. GManager.instance.selectCommandPanel.SetUpCommandButton(command_SelectCommands);
  95. }
  96. else
  97. {
  98. GManager.instance.commandText.OpenCommandText(notSelectPlayerMessage);
  99. #region AIƒ‚�[ƒh
  100. if (GManager.instance.IsAI)
  101. {
  102. List<bool> canSelectValue = new List<bool>();
  103. foreach (SelectionElement<bool> selectionElement in selectionElements)
  104. {
  105. canSelectValue.Add(selectionElement.Value);
  106. }
  107. if (canSelectValue.Count >= 1)
  108. {
  109. SetBool(canSelectValue[UnityEngine.Random.Range(0, canSelectValue.Count)]);
  110. }
  111. else
  112. {
  113. SetBool(false);
  114. }
  115. }
  116. #endregion
  117. }
  118. }
  119. }
  120. public class SelectionElement<T>
  121. {
  122. public SelectionElement(string message, T value, int spriteIndex)
  123. {
  124. this.Message = message;
  125. this.Value = value;
  126. this.SpriteIndex = spriteIndex;
  127. }
  128. public string Message { get; private set; }
  129. public T Value { get; private set; }
  130. public int SpriteIndex { get; private set; }
  131. }