You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
312 lines
12 KiB
C#
312 lines
12 KiB
C#
|
4 years ago
|
using System.Collections;
|
||
|
|
using System.Collections.Generic;
|
||
|
|
using UnityEngine;
|
||
|
|
using UnityEngine.UI;
|
||
|
|
using SiegeSong;
|
||
|
|
|
||
|
|
namespace SiegeSong
|
||
|
|
{
|
||
|
|
public class MenuManager : MonoBehaviour
|
||
|
|
{
|
||
|
|
public SaveFileLoader SaveFileLoader;
|
||
|
|
|
||
|
|
public GameObject MenuContainer;
|
||
|
|
public GameObject PauseMenuOptions;
|
||
|
|
public GameObject StartMenuOptions;
|
||
|
|
public GameObject SettingsSubMenuOptions;
|
||
|
|
|
||
|
|
public GameObject SaveLoadContainer;
|
||
|
|
public GameObject SaveLoadListDisplay;
|
||
|
|
public GameObject SaveLoadMetaDataTextDisplay;
|
||
|
|
public GameObject SaveLoadMetaDataImageDisplay;
|
||
|
|
|
||
|
|
public MetaData[] SavedGames;
|
||
|
|
|
||
|
|
private string pauseGamepadInput = "Start";
|
||
|
|
private string menuVerticalGamepadInput = "D-Pad Vertical";
|
||
|
|
private string menuHorizontalGamepadInput = "D-Pad Horizontal";
|
||
|
|
private string menuConfirmGamepadInput = "A";
|
||
|
|
private string menuRejectGamepadInput = "B";
|
||
|
|
|
||
|
|
private bool oldConfirmState;
|
||
|
|
private bool oldRejectState;
|
||
|
|
private float oldVerticalState;
|
||
|
|
private float oldHorizontalState;
|
||
|
|
|
||
|
|
private bool menuOpen = true;
|
||
|
|
private int selectedIndex;
|
||
|
|
private int subMenuSelectedIndex;
|
||
|
|
|
||
|
|
private Color activeColor = Color.white;
|
||
|
|
private Color inactiveColor = Color.grey;
|
||
|
|
|
||
|
|
private int activeFontSize;
|
||
|
|
private int inactiveFontSize;
|
||
|
|
|
||
|
|
private bool saveLoadSubmenuOpen;
|
||
|
|
private bool settingsSubmenuOpen;
|
||
|
|
private bool saveLoadSubmenuInSavingMode;
|
||
|
|
|
||
|
|
private bool startMenu = true;
|
||
|
|
|
||
|
|
void Start() { }
|
||
|
|
|
||
|
|
void Update()
|
||
|
|
{
|
||
|
|
if (!menuOpen && Input.GetButton(pauseGamepadInput))
|
||
|
|
menuOpen = true;
|
||
|
|
|
||
|
|
MenuContainer.active = menuOpen;
|
||
|
|
SaveLoadContainer.active = saveLoadSubmenuOpen;
|
||
|
|
|
||
|
|
if (menuOpen)
|
||
|
|
{
|
||
|
|
Time.timeScale = 0.0f;
|
||
|
|
var menuOptions = startMenu ? StartMenuOptions : PauseMenuOptions;
|
||
|
|
StartMenuOptions.active = startMenu;
|
||
|
|
PauseMenuOptions.active = !startMenu;
|
||
|
|
|
||
|
|
for (var i = 0; i < menuOptions.transform.childCount; i++)
|
||
|
|
{
|
||
|
|
var childObject = menuOptions.transform.GetChild(i);
|
||
|
|
childObject.GetComponent<Text>().text = selectedIndex == i ? $"~ {childObject.name} ~" : childObject.name;
|
||
|
|
childObject.GetComponent<Text>().color = selectedIndex == i ? activeColor : inactiveColor;
|
||
|
|
childObject.GetComponent<Text>().fontSize = selectedIndex == i ? activeFontSize : inactiveFontSize;
|
||
|
|
}
|
||
|
|
var newConfirmState = Input.GetButton(menuConfirmGamepadInput);
|
||
|
|
var newRejectState = Input.GetButton(menuRejectGamepadInput);
|
||
|
|
var newMenuVerticalState = Input.GetAxis(menuVerticalGamepadInput);
|
||
|
|
var newMenuHorizontalState = Input.GetAxis(menuHorizontalGamepadInput);
|
||
|
|
if (oldVerticalState == 0 && newMenuVerticalState < 0)
|
||
|
|
{
|
||
|
|
if (saveLoadSubmenuOpen)
|
||
|
|
{
|
||
|
|
if (SavedGames.Length > (saveLoadSubmenuInSavingMode ? 1 : 0))
|
||
|
|
{
|
||
|
|
if (subMenuSelectedIndex == (saveLoadSubmenuOpen ? SavedGames.Length - 1 + (saveLoadSubmenuInSavingMode ? 1 : 0) : SettingsSubMenuOptions.transform.childCount - 1))
|
||
|
|
subMenuSelectedIndex = 0;
|
||
|
|
else
|
||
|
|
subMenuSelectedIndex++;
|
||
|
|
|
||
|
|
UpdateSaveLoadMetaDataTextDisplay();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
if (selectedIndex == menuOptions.transform.childCount - 1)
|
||
|
|
selectedIndex = 0;
|
||
|
|
else
|
||
|
|
selectedIndex++;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (oldVerticalState == 0 && newMenuVerticalState > 0)
|
||
|
|
{
|
||
|
|
if (saveLoadSubmenuOpen)
|
||
|
|
{
|
||
|
|
if (SavedGames.Length > (saveLoadSubmenuInSavingMode ? 1 : 0))
|
||
|
|
{
|
||
|
|
if (subMenuSelectedIndex == 0)
|
||
|
|
subMenuSelectedIndex = saveLoadSubmenuOpen ? SavedGames.Length - 1 + (saveLoadSubmenuInSavingMode ? 1 : 0) : SettingsSubMenuOptions.transform.childCount - 1;
|
||
|
|
else
|
||
|
|
subMenuSelectedIndex--;
|
||
|
|
|
||
|
|
UpdateSaveLoadMetaDataTextDisplay();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
if (selectedIndex == 0)
|
||
|
|
selectedIndex = menuOptions.transform.childCount - 1;
|
||
|
|
else
|
||
|
|
selectedIndex--;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if ((!oldConfirmState && newConfirmState) || (oldHorizontalState == 0 && newMenuHorizontalState > 0))
|
||
|
|
{
|
||
|
|
if (!saveLoadSubmenuOpen && !settingsSubmenuOpen)
|
||
|
|
{
|
||
|
|
if (startMenu)
|
||
|
|
{
|
||
|
|
switch (selectedIndex)
|
||
|
|
{
|
||
|
|
case 0:
|
||
|
|
StartNewGame();
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
OpenLoadingSubmenu();
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
OpenSettingsSubmenu();
|
||
|
|
break;
|
||
|
|
case 4:
|
||
|
|
ExitGame();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
switch (selectedIndex)
|
||
|
|
{
|
||
|
|
case 0:
|
||
|
|
ResumeGame();
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
OpenSavingSubmenu();
|
||
|
|
break;
|
||
|
|
case 2:
|
||
|
|
OpenLoadingSubmenu();
|
||
|
|
break;
|
||
|
|
case 3:
|
||
|
|
OpenSettingsSubmenu();
|
||
|
|
break;
|
||
|
|
case 4:
|
||
|
|
ExitGame();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else if (saveLoadSubmenuOpen)
|
||
|
|
{
|
||
|
|
if (saveLoadSubmenuInSavingMode)
|
||
|
|
SaveGame();
|
||
|
|
else
|
||
|
|
LoadGame();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if (newRejectState && !oldRejectState)
|
||
|
|
{
|
||
|
|
if (!saveLoadSubmenuOpen && !settingsSubmenuOpen)
|
||
|
|
ResumeGame();
|
||
|
|
else if (saveLoadSubmenuOpen)
|
||
|
|
saveLoadSubmenuOpen = false;
|
||
|
|
}
|
||
|
|
oldConfirmState = newConfirmState;
|
||
|
|
oldRejectState = newRejectState;
|
||
|
|
oldHorizontalState = newMenuHorizontalState;
|
||
|
|
oldVerticalState = newMenuVerticalState;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
StartMenuOptions.active = false;
|
||
|
|
PauseMenuOptions.active = false;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void LoadGame()
|
||
|
|
{
|
||
|
|
SaveFileLoader.ActiveSaveFileLocation = $"{Application.persistentDataPath}\\{SaveFileLoader.DirectoryName}\\{SavedGames[subMenuSelectedIndex].PlayerFullName}_{SavedGames[subMenuSelectedIndex].FileNameSuffix}";
|
||
|
|
SaveFileLoader.LoadGameFile();
|
||
|
|
ResumeGame();
|
||
|
|
SaveFileLoader.RuntimeManager.PlayerInstance.GetComponentInChildren<NotificationManager>().Notify("Game Loaded!");
|
||
|
|
}
|
||
|
|
|
||
|
|
void SaveGame()
|
||
|
|
{
|
||
|
|
if (subMenuSelectedIndex == 0)
|
||
|
|
SaveFileLoader.SaveGameFile();
|
||
|
|
else
|
||
|
|
SaveFileLoader.SaveGameFile($"{Application.persistentDataPath}\\{SaveFileLoader.DirectoryName}\\{SavedGames[subMenuSelectedIndex].PlayerFullName}_{SavedGames[subMenuSelectedIndex].FileNameSuffix}");
|
||
|
|
ResumeGame();
|
||
|
|
SaveFileLoader.RuntimeManager.PlayerInstance.GetComponentInChildren<NotificationManager>().Notify("Game Saved!");
|
||
|
|
}
|
||
|
|
|
||
|
|
void UpdateSaveLoadMetaDataTextDisplay()
|
||
|
|
{
|
||
|
|
var selectedSavedGame = SavedGames != null && SavedGames.Length > 0 ? SavedGames[subMenuSelectedIndex] : new MetaData();
|
||
|
|
SaveLoadMetaDataTextDisplay.GetComponent<Text>().text = $"{selectedSavedGame.PlayerFullName}\n{selectedSavedGame.PlayerLevel}\n{selectedSavedGame.PlayerActiveQuestFriendlyName}\n{selectedSavedGame.InGameDate}\n{selectedSavedGame.LastPlayedOn}";
|
||
|
|
}
|
||
|
|
|
||
|
|
void StartNewGame()
|
||
|
|
{
|
||
|
|
startMenu = false;
|
||
|
|
menuOpen = false;
|
||
|
|
saveLoadSubmenuOpen = false;
|
||
|
|
settingsSubmenuOpen = false;
|
||
|
|
|
||
|
|
Time.timeScale = 1.0f;
|
||
|
|
SaveFileLoader.RunNewGameSetup();
|
||
|
|
}
|
||
|
|
|
||
|
|
void ResumeGame()
|
||
|
|
{
|
||
|
|
menuOpen = false;
|
||
|
|
saveLoadSubmenuOpen = false;
|
||
|
|
saveLoadSubmenuInSavingMode = false;
|
||
|
|
selectedIndex = 0;
|
||
|
|
subMenuSelectedIndex = 0;
|
||
|
|
Time.timeScale = 1.0f;
|
||
|
|
}
|
||
|
|
|
||
|
|
void InitializeSaveLoadSubmenu()
|
||
|
|
{
|
||
|
|
SavedGames = SaveFileLoader.GetSaveFilesMetaData(saveLoadSubmenuInSavingMode);
|
||
|
|
var savedGameListRow = SaveLoadListDisplay.transform.GetChild(0).gameObject;
|
||
|
|
for (var i = 0; i < SavedGames.Length; i++)
|
||
|
|
{
|
||
|
|
var savedGame = SavedGames[i];
|
||
|
|
|
||
|
|
var rowSizeBuffer = 4;
|
||
|
|
var newRow = GameObject.Instantiate(savedGameListRow);
|
||
|
|
var newRowText = newRow.GetComponent<Text>();
|
||
|
|
var newRowRect = newRow.GetComponent<RectTransform>();
|
||
|
|
savedGameListRow.active = false;
|
||
|
|
newRow.active = true;
|
||
|
|
|
||
|
|
if (i == subMenuSelectedIndex)
|
||
|
|
{
|
||
|
|
newRowText.text = $"- {savedGame.Title.Replace("_", " ")} -";
|
||
|
|
newRowText.color = activeColor;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
newRowText.text = $"{savedGame.Title.Replace("_", " ")}";
|
||
|
|
newRowText.color = inactiveColor;
|
||
|
|
}
|
||
|
|
|
||
|
|
newRowText.transform.parent = SaveLoadListDisplay.transform;
|
||
|
|
newRowText.transform.localScale = Vector3.one;
|
||
|
|
|
||
|
|
newRowRect.position = new Vector2(-300, (newRowText.fontSize + rowSizeBuffer) * -(i + 1));
|
||
|
|
newRowRect.offsetMin = new Vector2(-300, (newRowText.fontSize + rowSizeBuffer) * -(i + 1));
|
||
|
|
newRowRect.offsetMax = new Vector2(0, (newRowText.fontSize + rowSizeBuffer) * -(i));
|
||
|
|
newRowRect.sizeDelta = new Vector2(250, (newRowText.fontSize + rowSizeBuffer));
|
||
|
|
}
|
||
|
|
UpdateSaveLoadMetaDataTextDisplay();
|
||
|
|
}
|
||
|
|
|
||
|
|
void OpenLoadingSubmenu()
|
||
|
|
{
|
||
|
|
if (SavedGames == null || SavedGames.Length == 0)
|
||
|
|
InitializeSaveLoadSubmenu();
|
||
|
|
|
||
|
|
saveLoadSubmenuInSavingMode = false;
|
||
|
|
saveLoadSubmenuOpen = true;
|
||
|
|
subMenuSelectedIndex = 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
void OpenSavingSubmenu()
|
||
|
|
{
|
||
|
|
if (SavedGames == null || SavedGames.Length == 0)
|
||
|
|
InitializeSaveLoadSubmenu();
|
||
|
|
|
||
|
|
saveLoadSubmenuInSavingMode = true;
|
||
|
|
saveLoadSubmenuOpen = true;
|
||
|
|
subMenuSelectedIndex = 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
void OpenSettingsSubmenu()
|
||
|
|
{
|
||
|
|
settingsSubmenuOpen = true;
|
||
|
|
subMenuSelectedIndex = 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
void ExitGame()
|
||
|
|
{
|
||
|
|
startMenu = false;
|
||
|
|
if (startMenu)
|
||
|
|
startMenu = false;
|
||
|
|
else
|
||
|
|
Application.Quit();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|