Files

286 lines
11 KiB
C#
Raw Permalink Normal View History

2022-06-14 19:38:09 +02:00
using System;
2021-08-26 22:36:18 +02:00
using System.Collections;
2022-08-04 00:53:54 +03:00
using System.Text.RegularExpressions;
2021-08-26 22:36:18 +02:00
using TMPro;
2021-08-25 16:15:09 +02:00
using UnityEngine;
2021-12-30 00:52:58 +01:00
using UnityEngine.EventSystems;
2022-08-15 10:39:44 +03:00
using UnityEngine.InputSystem;
2022-06-14 19:38:09 +02:00
using UnityEngine.SceneManagement;
2021-12-30 02:26:49 +01:00
using UnityEngine.UI;
2021-08-25 16:15:09 +02:00
public class CharacterMenu : BaseMenu
{
2022-09-25 16:08:45 +03:00
[SerializeField] private PlayerInput _playerInput = default;
[SerializeField] private GameObject _rebindOnePrompt = default;
[SerializeField] private GameObject _assistOne = default;
[SerializeField] private GameObject _assistTwo = default;
[SerializeField] private GameObject _iconsOne = default;
[SerializeField] private GameObject _iconsTwo = default;
[SerializeField] private InputManager _inputManager = default;
2022-09-25 16:08:45 +03:00
[SerializeField] private PlayerUIRender _assistOneUIRenderer = default;
[SerializeField] private PlayerUIRender _assistTwoUIRenderer = default;
[SerializeField] private ChangeStageMenu _changeStageMenu = default;
[SerializeField] private AnimationSO _randomAnimation = default;
2022-09-25 16:08:45 +03:00
[SerializeField] private Button _firstCharacterButton = default;
[SerializeField] private PlayerUIRender _playerUIRenderOne = default;
[SerializeField] private PlayerUIRender _playerUIRenderTwo = default;
2023-10-15 15:55:38 +03:00
[SerializeField] private TextMeshProUGUI _menuText = default;
2022-09-25 16:08:45 +03:00
[SerializeField] private TextMeshProUGUI _playerOneName = default;
[SerializeField] private TextMeshProUGUI _playerTwoName = default;
[SerializeField] private TextMeshProUGUI _hpTextOne = default;
[SerializeField] private TextMeshProUGUI _arcanaTextOne = default;
[SerializeField] private TextMeshProUGUI _speedTextOne = default;
[SerializeField] private TextMeshProUGUI _hpTextTwo = default;
[SerializeField] private TextMeshProUGUI _arcanaTextTwo = default;
[SerializeField] private TextMeshProUGUI _speedTextTwo = default;
2023-09-22 16:54:55 +03:00
[SerializeField] private FadeHandler _fadeHandler = default;
2023-09-24 11:02:44 +02:00
[SerializeField] private Button[] _characterButtons = default;
2022-09-25 16:08:45 +03:00
[SerializeField] private PlayerStatsSO[] _playerStatsArray = default;
[SerializeField] private RebindMenu[] _rebindMenues = default;
private PlayerStatsSO _playerStats;
private EventSystem _currentEventSystem;
2022-10-15 14:34:31 +02:00
private Coroutine _tauntCoroutine;
2023-09-22 16:54:55 +03:00
private AsyncOperation _asyncLoad;
2022-09-25 16:08:45 +03:00
public bool FirstCharacterSelected { get; private set; }
2023-09-24 11:02:44 +02:00
public bool FirstCharacterLocked { get; private set; }
public bool SecondCharacterLocked { get; private set; }
2021-12-30 00:21:11 +01:00
2022-09-25 16:08:45 +03:00
void Awake()
{
_currentEventSystem = EventSystem.current;
}
2021-12-30 00:52:58 +01:00
2022-10-12 23:30:09 +02:00
public void SetCharacterImage(PlayerStatsSO playerStats, bool isRandomizer)
2022-09-25 16:08:45 +03:00
{
_playerStats = playerStats;
if (!FirstCharacterSelected)
{
_playerOneName.enabled = true;
if (!isRandomizer)
{
_playerUIRenderOne.gameObject.SetActive(true);
_iconsOne.gameObject.SetActive(true);
_playerOneName.text = Regex.Replace(playerStats.characterName.ToString(), "([a-z])([A-Z])", "$1 $2");
2023-01-17 00:02:29 +02:00
_playerUIRenderOne.SetPlayerStat(playerStats);
2022-10-12 23:30:09 +02:00
_playerUIRenderOne.SetAnimator(_playerStats._animation);
2022-09-25 16:08:45 +03:00
_hpTextOne.text = $"LV{_playerStats.defenseLevel}";
_arcanaTextOne.text = $"LV{_playerStats.arcanaLevel}";
_speedTextOne.text = $"LV{_playerStats.speedLevel}";
}
else
{
_playerUIRenderOne.SetAnimator(_randomAnimation);
2022-09-25 16:08:45 +03:00
_hpTextOne.text = "?";
_arcanaTextOne.text = "?";
_speedTextOne.text = "?";
_playerOneName.text = "Random";
}
}
else
{
UsedController();
_playerTwoName.enabled = true;
if (!isRandomizer)
{
_playerUIRenderTwo.gameObject.SetActive(true);
_iconsTwo.gameObject.SetActive(true);
_playerTwoName.text = Regex.Replace(playerStats.characterName.ToString(), "([a-z])([A-Z])", "$1 $2");
2023-01-17 00:02:29 +02:00
_playerUIRenderTwo.SetPlayerStat(playerStats);
2022-10-12 23:30:09 +02:00
_playerUIRenderTwo.SetAnimator(_playerStats._animation);
2022-09-25 16:08:45 +03:00
_hpTextTwo.text = $"LV{_playerStats.defenseLevel}";
_arcanaTextTwo.text = $"LV{_playerStats.arcanaLevel}";
_speedTextTwo.text = $"LV{_playerStats.speedLevel}";
}
else
{
2022-10-15 14:34:31 +02:00
_playerUIRenderTwo.SetAnimator(_randomAnimation);
2022-09-25 16:08:45 +03:00
_hpTextTwo.text = "?";
_arcanaTextTwo.text = "?";
_speedTextTwo.text = "?";
_playerTwoName.text = "Random";
}
}
}
2021-08-25 16:15:09 +02:00
2022-09-25 16:08:45 +03:00
public void SelectCharacterImage()
{
2023-09-24 11:02:44 +02:00
for (int i = 0; i < _characterButtons.Length; i++)
_characterButtons[i].enabled = false;
2022-09-25 16:08:45 +03:00
_currentEventSystem.sendNavigationEvents = false;
_playerOneName.enabled = true;
_playerTwoName.enabled = true;
if (!FirstCharacterSelected)
{
2023-09-24 11:02:44 +02:00
FirstCharacterLocked = true;
2022-09-25 16:08:45 +03:00
_assistOneUIRenderer.gameObject.SetActive(true);
_assistOne.SetActive(true);
if (_playerStats == null)
{
int randomPlayer = UnityEngine.Random.Range(0, _playerStatsArray.Length);
_playerStats = _playerStatsArray[randomPlayer];
string characterName = Regex.Replace(_playerStats.characterName.ToString(), "([a-z])([A-Z])", "$1 $2");
_playerOneName.text = characterName;
2023-01-17 00:02:29 +02:00
_playerUIRenderOne.SetPlayerStat(_playerStats);
_playerUIRenderOne.SetAnimator(_playerStats._animation);
2022-09-25 16:08:45 +03:00
}
_hpTextOne.text = $"LV{_playerStats.defenseLevel}";
_arcanaTextOne.text = $"LV{_playerStats.arcanaLevel}";
_speedTextOne.text = $"LV{_playerStats.speedLevel}";
SceneSettings.PlayerOne = _playerStats.characterIndex;
}
else
{
2023-09-24 11:02:44 +02:00
SecondCharacterLocked = true;
2022-09-25 16:08:45 +03:00
_assistTwoUIRenderer.gameObject.SetActive(true);
_assistTwo.SetActive(true);
if (_playerStats == null)
{
int randomPlayer = UnityEngine.Random.Range(0, _playerStatsArray.Length);
_playerStats = _playerStatsArray[randomPlayer];
string characterName = Regex.Replace(_playerStats.characterName.ToString(), "([a-z])([A-Z])", "$1 $2");
_playerOneName.text = characterName;
2023-01-17 00:02:29 +02:00
_playerUIRenderTwo.SetPlayerStat(_playerStats);
_playerUIRenderTwo.SetAnimator(_playerStats._animation);
2022-09-25 16:08:45 +03:00
}
_hpTextTwo.text = $"LV{_playerStats.defenseLevel}";
_arcanaTextTwo.text = $"LV{_playerStats.arcanaLevel}";
_speedTextTwo.text = $"LV{_playerStats.speedLevel}";
SceneSettings.PlayerTwo = _playerStats.characterIndex;
}
}
2021-10-19 21:06:56 +02:00
2022-09-25 16:08:45 +03:00
public void SetCharacter(bool isPlayerOne)
{
if (isPlayerOne)
_playerUIRenderOne.Taunt();
else
_playerUIRenderTwo.Taunt();
2022-10-14 23:03:29 +02:00
if (FirstCharacterSelected)
EventSystem.current.gameObject.SetActive(false);
2022-10-15 14:34:31 +02:00
_tauntCoroutine = StartCoroutine(TauntEndCoroutine());
2022-09-25 16:08:45 +03:00
}
2021-08-26 22:36:18 +02:00
2022-09-25 16:08:45 +03:00
IEnumerator TauntEndCoroutine()
{
2023-09-22 16:54:55 +03:00
yield return new WaitForSeconds(1.5f);
2022-09-25 16:08:45 +03:00
_currentEventSystem.sendNavigationEvents = true;
if (!FirstCharacterSelected)
{
2023-09-24 11:02:44 +02:00
for (int i = 0; i < _characterButtons.Length; i++)
_characterButtons[i].enabled = true;
2022-09-25 16:08:45 +03:00
FirstCharacterSelected = true;
_currentEventSystem.SetSelectedGameObject(null);
_firstCharacterButton.Select();
}
else
{
2022-12-11 02:21:16 +02:00
SceneSettings.IsOnline = false;
2022-09-25 16:08:45 +03:00
SceneSettings.SceneSettingsDecide = true;
if (SceneSettings.RandomStage)
SceneSettings.StageIndex = UnityEngine.Random.Range(0, Enum.GetNames(typeof(StageTypeEnum)).Length - 1);
2023-10-09 12:39:56 +03:00
StartCoroutine(LoadYourAsyncScene());
2023-09-22 16:54:55 +03:00
_fadeHandler.onFadeEnd.AddListener(() => _asyncLoad.allowSceneActivation = true);
_fadeHandler.StartFadeTransition(true, 0.35f);
2022-09-25 16:08:45 +03:00
}
}
2022-06-14 21:38:44 +02:00
2023-09-22 16:54:55 +03:00
IEnumerator LoadYourAsyncScene()
{
_asyncLoad = SceneManager.LoadSceneAsync(1);
_asyncLoad.allowSceneActivation = false;
while (!_asyncLoad.isDone)
yield return null;
}
2022-09-25 16:08:45 +03:00
public void GoBack(BaseMenu otherMenu)
{
if (_changeStageMenu.IsOpen)
_changeStageMenu.ChangeStageClose();
else
{
if (!_rebindMenues[0].gameObject.activeSelf && !_rebindMenues[1].gameObject.activeSelf)
{
OpenMenuHideCurrent(otherMenu);
ResetControllerInput();
}
}
}
2021-09-14 20:55:54 +02:00
2022-09-25 16:08:45 +03:00
public void ResetControllerInput()
{
//SceneSettings.ControllerOne = "Cpu";
//SceneSettings.ControllerTwo = "Cpu";
}
2022-08-13 00:03:16 +03:00
2022-09-25 16:08:45 +03:00
public void OpenRebind()
{
if (UsedController())
if (!_changeStageMenu.IsOpen)
{
if (!FirstCharacterSelected && SceneSettings.ControllerOne != null)
{
_rebindMenues[0].PreviousPromptsInput = _inputManager.CurrentPrompts;
2022-09-25 16:08:45 +03:00
_rebindMenues[0].Show();
}
else if (SceneSettings.ControllerTwo != null)
{
_rebindMenues[1].PreviousPromptsInput = _inputManager.CurrentPrompts;
2022-09-25 16:08:45 +03:00
_rebindMenues[1].Show();
}
_currentEventSystem.sendNavigationEvents = true;
}
}
2022-08-15 10:39:44 +03:00
2022-09-25 16:08:45 +03:00
private bool UsedController()
{
InputDevice device;
if (!FirstCharacterSelected)
device = SceneSettings.ControllerOne;
else
device = SceneSettings.ControllerTwo;
if (device == _playerInput.devices[0])
{
_rebindOnePrompt.SetActive(true);
return true;
}
_rebindOnePrompt.SetActive(false);
return false;
}
2023-10-15 15:55:38 +03:00
protected override void OnEnable()
{
base.OnEnable();
if (SceneSettings.IsTrainingMode)
_menuText.text = "Training";
else
_menuText.text = "Versus";
}
2022-09-25 16:08:45 +03:00
private void OnDisable()
{
2023-03-06 23:26:04 +02:00
_currentEventSystem.sendNavigationEvents = true;
2022-09-25 16:08:45 +03:00
if (!SceneSettings.SceneSettingsDecide)
{
2022-10-15 14:34:31 +02:00
if (_tauntCoroutine != null)
StopCoroutine(_tauntCoroutine);
2022-09-25 16:08:45 +03:00
_iconsOne.gameObject.SetActive(false);
_iconsTwo.gameObject.SetActive(false);
_currentEventSystem.SetSelectedGameObject(null);
_currentEventSystem.sendNavigationEvents = true;
FirstCharacterSelected = false;
2023-09-24 11:02:44 +02:00
FirstCharacterLocked = false;
SecondCharacterLocked = false;
2022-09-25 16:08:45 +03:00
_hpTextOne.text = "";
_arcanaTextOne.text = "";
_speedTextOne.text = "";
_hpTextTwo.text = "";
_arcanaTextTwo.text = "";
_speedTextTwo.text = "";
_playerOneName.text = "";
_playerTwoName.text = "";
_assistOneUIRenderer.gameObject.SetActive(false);
_assistTwoUIRenderer.gameObject.SetActive(false);
}
}
2021-08-25 16:15:09 +02:00
}