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();
}
}
}