Files
FueraDeEscala/Assets/Game Kit Controller/Scripts/Level Manager/travelStationUISystem.cs
Robii Aragon fd87a6ffd5 add ckg
plantilla base para movimiento básico
2026-02-05 05:07:55 -08:00

328 lines
9.6 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Events;
public class travelStationUISystem : MonoBehaviour
{
[Header ("Main Settings")]
[Space]
public bool travelStationUIActive = true;
public bool menuOpened;
public bool useBlurUIPanel;
public bool saveCurrentTravelStationToSaveFile = true;
public bool allStationsUnlocked;
public bool showTravelStationFoundPanel;
public float showTraveStationPanelDuration = 1;
public string travelStationFoundExtraMessage = "Travel Station Found";
[Space]
public string menuPanelName = "Travel Station System";
[Space]
[Header ("Debug")]
[Space]
public bool showDebugPrint;
public List<foundTravelStationInfo> foundTravelStationInfoList = new List<foundTravelStationInfo> ();
public travelStationSystem currentTravelStationSystem;
[Space]
[Header ("Events Settings")]
[Space]
public bool useEventIfSystemDisabled;
public UnityEvent eventIfSystemDisabled;
[Space]
[Header ("Components")]
[Space]
public GameObject travelStationMenu;
public GameObject travelStationPanelPrefab;
public Transform travelStationPanelParent;
public GameObject travelStationFoundPanel;
public Text travelStationFoundPanelText;
public menuPause pauseManager;
public playerController playerControllerManager;
public saveGameSystem mainSaveGameSystem;
public usingDevicesSystem usingDevicesManager;
List<travelStationSystem.travelStationInfo> currentTravelStationInfoList = new List<travelStationSystem.travelStationInfo> ();
List<travelStationPanelInfo> travelStationPanelInfoList = new List<travelStationPanelInfo> ();
travelStationPanelInfo currentTravelStationPanelInfo;
public void initializeTravelStationValues ()
{
if (!travelStationUIActive) {
checkEventOnSystemDisabled ();
return;
}
}
public void checkEventOnSystemDisabled ()
{
if (useEventIfSystemDisabled) {
eventIfSystemDisabled.Invoke ();
}
}
public void checkPressedButton (GameObject buttonToCheck)
{
if (currentTravelStationPanelInfo != null) {
currentTravelStationPanelInfo.pressedPanelIcon.SetActive (false);
}
for (int i = 0; i < travelStationPanelInfoList.Count; i++) {
if (travelStationPanelInfoList [i].panelGameObject == buttonToCheck) {
travelStationPanelInfoList [i].pressedPanelIcon.SetActive (true);
currentTravelStationPanelInfo = travelStationPanelInfoList [i];
return;
}
}
}
public void confirmTravelToStationSelected ()
{
if (currentTravelStationInfoList.Count > 0 && currentTravelStationPanelInfo != null && currentTravelStationPanelInfo.travelStationInfoIndex < currentTravelStationInfoList.Count) {
travelStationSystem.travelStationInfo currentTravelStationInfo = currentTravelStationInfoList [currentTravelStationPanelInfo.travelStationInfoIndex];
if (currentTravelStationInfo.sceneNumberToLoad != currentTravelStationSystem.sceneNumberToLoad ||
currentTravelStationInfo.levelManagerIDToLoad != currentTravelStationSystem.levelManagerIDToLoad) {
mainSaveGameSystem.saveGameCheckpoint (null, currentTravelStationInfo.levelManagerIDToLoad,
currentTravelStationInfo.sceneNumberToLoad, true, true, true);
mainSaveGameSystem.activateAutoLoad ();
} else {
if (showDebugPrint) {
print ("trying to travel to this station system");
}
}
}
}
public void setCurrentTravelStationSystem (travelStationSystem newTravelStationSystem, bool settingPhysicalStation)
{
currentTravelStationSystem = newTravelStationSystem;
currentTravelStationInfoList = currentTravelStationSystem.getTravelStationInfoList ();
int sceneNumberToLoad = currentTravelStationSystem.sceneNumberToLoad;
int levelManagerIDToLoad = currentTravelStationSystem.levelManagerIDToLoad;
bool travelStationFound = false;
if (settingPhysicalStation) {
for (int i = 0; i < foundTravelStationInfoList.Count; i++) {
if (foundTravelStationInfoList [i].sceneNumberToLoad == sceneNumberToLoad && foundTravelStationInfoList [i].levelManagerIDToLoad == levelManagerIDToLoad) {
travelStationFound = true;
}
}
if (!travelStationFound) {
if (showDebugPrint) {
print ("new station");
}
foundTravelStationInfo newFoundTravelStationInfo = new foundTravelStationInfo ();
newFoundTravelStationInfo.sceneNumberToLoad = sceneNumberToLoad;
newFoundTravelStationInfo.levelManagerIDToLoad = levelManagerIDToLoad;
foundTravelStationInfoList.Add (newFoundTravelStationInfo);
}
}
if (currentTravelStationSystem.allStationsUnlocked || allStationsUnlocked) {
for (int i = 0; i < currentTravelStationInfoList.Count; i++) {
currentTravelStationInfoList [i].zoneFound = true;
}
} else {
for (int i = 0; i < currentTravelStationInfoList.Count; i++) {
for (int j = 0; j < foundTravelStationInfoList.Count; j++) {
if (currentTravelStationInfoList [i].sceneNumberToLoad == foundTravelStationInfoList [j].sceneNumberToLoad &&
currentTravelStationInfoList [i].levelManagerIDToLoad == foundTravelStationInfoList [j].levelManagerIDToLoad) {
currentTravelStationInfoList [i].zoneFound = true;
}
}
if (currentTravelStationInfoList [i].sceneNumberToLoad == sceneNumberToLoad) {
if (!travelStationFound && settingPhysicalStation) {
showTravelStationFound (currentTravelStationInfoList [i].Name);
}
}
}
}
}
public void openOrCloseTravelStationMenu (bool state)
{
if (state) {
if (!pauseManager.checkIfMenuCanBeUsedByName (menuPanelName)) {
return;
}
}
menuOpened = state;
pauseManager.openOrClosePlayerMenu (menuOpened, travelStationMenu.transform, useBlurUIPanel);
travelStationMenu.SetActive (menuOpened);
pauseManager.setIngameMenuOpenedState (menuPanelName, menuOpened, false);
pauseManager.enableOrDisablePlayerMenu (menuOpened, true, false);
if (menuOpened) {
setTravelStationInfoList ();
if (travelStationPanelInfoList.Count > 0) {
GameObject panelButtonToCheck = travelStationPanelInfoList [0].panelGameObject;
if (currentTravelStationSystem) {
for (int i = 0; i < currentTravelStationInfoList.Count; i++) {
if (currentTravelStationInfoList [i].sceneNumberToLoad == currentTravelStationSystem.sceneNumberToLoad) {
if (i < travelStationPanelInfoList.Count) {
panelButtonToCheck = travelStationPanelInfoList [i].panelGameObject;
}
}
}
}
checkPressedButton (panelButtonToCheck);
}
}
}
public void setTravelStationInfoList ()
{
for (int i = 0; i < travelStationPanelInfoList.Count; i++) {
Destroy (travelStationPanelInfoList [i].panelGameObject);
}
travelStationPanelInfoList.Clear ();
if (currentTravelStationSystem == null || currentTravelStationInfoList.Count == 0) {
currentTravelStationSystem = FindObjectOfType<travelStationSystem> ();
if (currentTravelStationSystem != null) {
setCurrentTravelStationSystem (currentTravelStationSystem, false);
}
}
for (int i = 0; i < currentTravelStationInfoList.Count; i++) {
if (currentTravelStationInfoList [i].zoneFound) {
GameObject newtravelStationPanelPrefab = (GameObject)Instantiate (travelStationPanelPrefab, travelStationPanelPrefab.transform.position, Quaternion.identity, travelStationPanelParent);
if (!newtravelStationPanelPrefab.activeSelf) {
newtravelStationPanelPrefab.SetActive (true);
}
newtravelStationPanelPrefab.transform.localScale = Vector3.one;
newtravelStationPanelPrefab.transform.localPosition = Vector3.zero;
travelStationPanel currentTravelStationPanel = newtravelStationPanelPrefab.GetComponent<travelStationPanel> ();
travelStationPanelInfo currentTravelStationPanelInfo = currentTravelStationPanel.mainTravelStationPanelInfo;
currentTravelStationPanelInfo.panelText.text = currentTravelStationInfoList [i].Name;
currentTravelStationPanelInfo.travelStationInfoIndex = i;
travelStationPanelInfoList.Add (currentTravelStationPanelInfo);
}
}
}
public void openOrCloseTravelStationMenuFromTouch ()
{
if (!menuOpened) {
if (!pauseManager.checkIfMenuCanBeUsedByName (menuPanelName)) {
return;
}
}
openOrCloseTravelStationMenu (!menuOpened);
pauseManager.setIngameMenuOpenedState (menuPanelName, menuOpened, true);
}
public void checkOpenOrCloseTravelStationMenuByButton ()
{
if (pauseManager.isOpenOrClosePlayerOpenMenuByNamePaused ()) {
return;
}
oopenOrCloseTravelStationMenuByButton ();
}
public void oopenOrCloseTravelStationMenuByButton ()
{
if (playerControllerManager.isUsingDevice ()) {
usingDevicesManager.useDevice ();
if (currentTravelStationSystem) {
currentTravelStationSystem.setUsingTravelStationSystemState (menuOpened);
}
} else {
openOrCloseTravelStationMenuFromTouch ();
}
}
Coroutine showTravelStationCoroutine;
public void showTravelStationFound (string travelStationName)
{
if (!showTravelStationFoundPanel) {
return;
}
if (showTravelStationCoroutine != null) {
StopCoroutine (showTravelStationCoroutine);
}
showTravelStationCoroutine = StartCoroutine (showTravelStationFoundCoroutine (travelStationName));
}
IEnumerator showTravelStationFoundCoroutine (string travelStationName)
{
travelStationFoundPanel.SetActive (true);
travelStationFoundPanelText.text = travelStationName + " " + travelStationFoundExtraMessage;
yield return new WaitForSeconds (showTraveStationPanelDuration);
travelStationFoundPanel.SetActive (false);
}
[System.Serializable]
public class foundTravelStationInfo
{
public int sceneNumberToLoad;
public int levelManagerIDToLoad;
}
}