259 lines
9.3 KiB
C#
259 lines
9.3 KiB
C#
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace Passer {
|
|
|
|
public class SitesUI : MonoBehaviour {
|
|
|
|
public VisitorSites.SiteList sites;
|
|
|
|
private Canvas canvas;
|
|
|
|
public GameObject mainMenuUI;
|
|
public SiteDetailsUI siteDetailsUI;
|
|
|
|
#region Init
|
|
|
|
private void Awake() {
|
|
canvas = GetComponent<Canvas>();
|
|
|
|
sites = VisitorSites.GetSiteList();
|
|
}
|
|
|
|
private void OnEnable() {
|
|
GenerateMenu();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Stop
|
|
|
|
protected void OnDisable() {
|
|
Debug.Log("Save Sitelist when disable");
|
|
VisitorSites.SaveSiteList(sites);
|
|
}
|
|
|
|
protected virtual void OnDestroy() {
|
|
Debug.Log("Save Sitelist");
|
|
VisitorSites.SaveSiteList(sites);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region UI
|
|
|
|
protected void ClearMenu() {
|
|
if (canvas == null)
|
|
return;
|
|
|
|
Button[] buttons = canvas.GetComponentsInChildren<Button>();
|
|
foreach (Button button in buttons)
|
|
Destroy(button.gameObject);
|
|
InputField[] inputs = canvas.GetComponentsInChildren<InputField>();
|
|
foreach (InputField input in inputs)
|
|
Destroy(input.gameObject);
|
|
}
|
|
|
|
protected void GenerateMenu() {
|
|
if (canvas == null)
|
|
return;
|
|
|
|
int lineNr = 0;
|
|
ShowAddSite(lineNr++);
|
|
ShowSetHome(lineNr++);
|
|
#if pUNITYXR
|
|
Humanoid.HumanoidControl humanoid = GetComponentInParent<Humanoid.HumanoidControl>();
|
|
if (humanoid != null && humanoid.unityXR.enabled == false)
|
|
#endif
|
|
ShowEnterURL(lineNr++);
|
|
ShowSites(lineNr);
|
|
}
|
|
|
|
protected void RefreshMenu() {
|
|
ClearMenu();
|
|
GenerateMenu();
|
|
}
|
|
|
|
protected void ShowAddSite(int position) {
|
|
if (SiteNavigator.currentSite == null)
|
|
return;
|
|
|
|
GameObject menuButtonPrefab = (GameObject)Resources.Load("MenuButton");
|
|
if (menuButtonPrefab == null)
|
|
Debug.LogError("MenuButton prefab is not found in a Resources folder");
|
|
|
|
GameObject menuButton = Instantiate(menuButtonPrefab);
|
|
menuButton.transform.SetParent(canvas.transform);
|
|
menuButton.transform.localPosition = new Vector3(0, 125 - position * 75, 0);
|
|
menuButton.transform.localRotation = Quaternion.identity;
|
|
menuButton.transform.localScale = Vector3.one;
|
|
menuButton.name = "Add Site";
|
|
|
|
Text text = menuButton.GetComponentInChildren<Text>();
|
|
text.text = "Add this Site";
|
|
|
|
string siteName = SiteNavigator.currentSite.siteName;
|
|
string siteLocation = SiteNavigator.currentSite.siteLocation;
|
|
|
|
Button button = menuButton.GetComponent<Button>();
|
|
button.onClick.AddListener(() => AddSite(siteName, siteLocation));
|
|
}
|
|
|
|
protected void ShowSetHome(int position) {
|
|
if (SiteNavigator.currentSite == null)
|
|
return;
|
|
|
|
GameObject menuButtonPrefab = (GameObject)Resources.Load("MenuButton");
|
|
if (menuButtonPrefab == null)
|
|
Debug.LogError("MenuButton prefab is not found in a Resources folder");
|
|
|
|
GameObject menuButton = Instantiate(menuButtonPrefab);
|
|
menuButton.transform.SetParent(canvas.transform);
|
|
menuButton.transform.localPosition = new Vector3(0, 125 - position * 75, 0);
|
|
menuButton.transform.localRotation = Quaternion.identity;
|
|
menuButton.transform.localScale = Vector3.one;
|
|
menuButton.name = "Set Home";
|
|
|
|
Text text = menuButton.GetComponentInChildren<Text>();
|
|
text.text = "Set Home";
|
|
|
|
string siteName = SiteNavigator.currentSite.siteName;
|
|
string siteLocation = SiteNavigator.currentSite.siteLocation;
|
|
|
|
Button button = menuButton.GetComponent<Button>();
|
|
button.onClick.AddListener(() => SetHome(siteName, siteLocation));
|
|
}
|
|
|
|
protected void ShowEnterURL(int position) {
|
|
GameObject inputFieldPrefab = (GameObject)Resources.Load("InputField");
|
|
if (inputFieldPrefab == null)
|
|
Debug.LogError("InputField prefab is not found in a Resources folder");
|
|
|
|
GameObject inputField = Instantiate(inputFieldPrefab);
|
|
inputField.transform.SetParent(canvas.transform);
|
|
inputField.transform.localPosition = new Vector3(0, 125 - position * 75, 0);
|
|
inputField.transform.localRotation = Quaternion.identity;
|
|
inputField.transform.localScale = Vector3.one;
|
|
|
|
InputField field = inputField.GetComponent<InputField>();
|
|
field.onEndEdit.AddListener(value => {
|
|
string siteLocation = value;
|
|
string siteName = siteLocation.Substring(siteLocation.LastIndexOf('/') + 1);
|
|
AddSite(siteName, siteLocation);
|
|
}
|
|
);
|
|
}
|
|
|
|
protected void ShowSites(int position) {
|
|
foreach (VisitorSites.Site site in sites)
|
|
ShowSite(site, position++);
|
|
}
|
|
|
|
protected void ShowSite(VisitorSites.Site site, int position) {
|
|
SiteNavigator siteNavigator = FindObjectOfType<SiteNavigator>();
|
|
if (siteNavigator == null)
|
|
Debug.LogError("Could not find a site navigator");
|
|
|
|
GameObject menuButtonPrefab = (GameObject)Resources.Load("MenuButton");
|
|
if (menuButtonPrefab == null)
|
|
Debug.LogError("MenuButton prefab is not found in a Resources folder");
|
|
|
|
int yPosition = 125 - position * 75;
|
|
|
|
GameObject menuButton = Instantiate(menuButtonPrefab);
|
|
menuButton.transform.SetParent(canvas.transform);
|
|
menuButton.transform.localPosition = new Vector3(0, yPosition, 0);
|
|
menuButton.transform.localRotation = Quaternion.identity;
|
|
menuButton.transform.localScale = Vector3.one;
|
|
menuButton.name = site.name;
|
|
|
|
Text text = menuButton.GetComponentInChildren<Text>();
|
|
text.text = site.name;
|
|
|
|
Button button = menuButton.GetComponent<Button>();
|
|
button.onClick.AddListener(() => GoToSite(site));
|
|
|
|
GameObject deleteButton = Instantiate(menuButtonPrefab);
|
|
deleteButton.transform.SetParent(canvas.transform);
|
|
RectTransform rectTransform = deleteButton.GetComponent<RectTransform>();
|
|
deleteButton.transform.localPosition = new Vector3(-210, yPosition, 20);
|
|
deleteButton.transform.localRotation = Quaternion.identity;
|
|
deleteButton.transform.localScale = Vector3.one;
|
|
rectTransform.sizeDelta = new Vector2(60, 60);
|
|
deleteButton.name = "Delete_" + site.name;
|
|
|
|
text = deleteButton.GetComponentInChildren<Text>();
|
|
text.text = "X";
|
|
|
|
button = deleteButton.GetComponent<Button>();
|
|
button.onClick.AddListener(() => DeleteSite(site));
|
|
|
|
/*
|
|
GameObject shareButton = Instantiate(menuButtonPrefab);
|
|
shareButton.transform.SetParent(canvas.transform);
|
|
shareButton.transform.localPosition = new Vector3(250, yPosition, 20);
|
|
shareButton.transform.localRotation = Quaternion.identity;
|
|
shareButton.transform.localScale = Vector3.one;
|
|
RectTransform shareRect = shareButton.GetComponent<RectTransform>();
|
|
shareRect.sizeDelta = new Vector2(140, 60);
|
|
shareButton.name = "Delete_" + site.name;
|
|
|
|
text = shareButton.GetComponentInChildren<Text>();
|
|
text.text = "Share";
|
|
*/
|
|
}
|
|
|
|
private void ShowDetails(VisitorSites.Site site) {
|
|
canvas.gameObject.SetActive(false);
|
|
siteDetailsUI.SetSite(site);
|
|
siteDetailsUI.gameObject.SetActive(true);
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
public void AddSite(string siteName, string siteLocation) {
|
|
//Debug.Log("Add site " + siteName);
|
|
VisitorSites.Site foundSite = sites.Find(site => site.siteLocation == siteLocation);
|
|
if (foundSite != null)
|
|
return;
|
|
|
|
VisitorSites.Site newSite = new VisitorSites.Site() {
|
|
name = siteName,
|
|
siteLocation = siteLocation,
|
|
};
|
|
sites.Add(newSite);
|
|
RefreshMenu();
|
|
}
|
|
|
|
public void SetHome(string siteName, string siteLocation) {
|
|
Debug.Log("Set home " + siteName);
|
|
|
|
VisitorConfiguration.configuration.startSite = siteLocation;
|
|
}
|
|
|
|
private void GoToSite(VisitorSites.Site site) {
|
|
SiteNavigator siteNavigator = FindObjectOfType<SiteNavigator>();
|
|
if (siteNavigator == null) {
|
|
Debug.LogError("Could not find a site navigator");
|
|
return;
|
|
}
|
|
|
|
this.gameObject.SetActive(false);
|
|
//transform.parent.gameObject.SetActive(false);
|
|
transform.parent.parent.gameObject.SetActive(false); // HumanoidMenu
|
|
if (mainMenuUI != null)
|
|
mainMenuUI.SetActive(true);
|
|
siteNavigator.LoadSiteFromURL(site.siteLocation);
|
|
}
|
|
|
|
|
|
private void DeleteSite(VisitorSites.Site site) {
|
|
sites.Remove(site);
|
|
RefreshMenu();
|
|
}
|
|
|
|
}
|
|
|
|
|
|
} |