NavigatorScene.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. using System.Collections.Generic;
  2. using UnityEngine;
  3. public class NavigatorScene:MonoBehaviour {
  4. // Parameters
  5. public GameObject cameraTarget;
  6. public bool preferFullscreen;
  7. public string trackingId;
  8. // For tracking
  9. public delegate void NavigatorSceneEvent();
  10. public event NavigatorSceneEvent OnStartedShowing;
  11. public event NavigatorSceneEvent OnFinishedShowing;
  12. public event NavigatorSceneEvent OnPause;
  13. public event NavigatorSceneEvent OnResume;
  14. public event NavigatorSceneEvent OnStartedHiding;
  15. public event NavigatorSceneEvent OnFinishedHiding;
  16. // Properties
  17. private bool isActivated = true;
  18. private bool disableRendering = false;
  19. private Dictionary<string, object> bundle;
  20. // ================================================================================================================
  21. // EXTENDED INTERFACE ---------------------------------------------------------------------------------------------
  22. void Start() {
  23. deActivate();
  24. }
  25. void Update() {
  26. if (Input.GetKeyDown(KeyCode.Escape) && isActivated) {
  27. // Look for all "back" buttons...
  28. var buttons = gameObject.GetComponentsInChildren<RoundedButtonNavigateTo>();
  29. var acted = false;
  30. foreach (var button in buttons) {
  31. if (button.isBackEquivalent) {
  32. acted = true;
  33. button.performActionPublic();
  34. break;
  35. }
  36. }
  37. if (!acted) {
  38. Debug.Log("No back, will quit!");
  39. Application.Quit();
  40. }
  41. }
  42. }
  43. // ================================================================================================================
  44. // PUBLIC INTERFACE ------------------------------------------------------------------------------------------------
  45. public string getBundleParameterAsString(string key, string defaultValue = "") {
  46. object value;
  47. return bundle != null && bundle.TryGetValue(key, out value) ? (string)value : defaultValue;
  48. }
  49. public int getBundleParameterAsInt(string key, int defaultValue = 0) {
  50. object value;
  51. return bundle != null && bundle.TryGetValue(key, out value) ? (int)value : defaultValue;
  52. }
  53. public T getBundleParameterAs<T>(string key, T defaultValue = default(T)) {
  54. object value;
  55. return bundle != null && bundle.TryGetValue(key, out value) ? (T)value : defaultValue;
  56. }
  57. // ================================================================================================================
  58. // EVENT INTERFACE ------------------------------------------------------------------------------------------------
  59. public virtual void initialize(Dictionary<string, object> newBundle) {
  60. bundle = newBundle;
  61. }
  62. public virtual void onStartedShowing() {
  63. // Changes screen
  64. ApplicationChrome.statusBarState = ApplicationChrome.navigationBarState = ApplicationChrome.States.Visible;
  65. ApplicationChrome.dimmed = preferFullscreen;
  66. activate();
  67. // Track page
  68. //Debug.Log("Trying to track ::: [" + "navigation:screen:" + trackingId + "]");
  69. TrackingManager.getInstance().trackScreen(trackingId);
  70. if (OnStartedShowing != null) OnStartedShowing();
  71. }
  72. public virtual void onFinishedShowing() {
  73. if (OnFinishedShowing != null) OnFinishedShowing();
  74. }
  75. public virtual void onPause() {
  76. if (OnPause != null) OnPause();
  77. }
  78. public virtual void onResume() {
  79. if (OnResume != null) OnResume();
  80. }
  81. public virtual void onStartedHiding() {
  82. if (OnStartedHiding != null) OnStartedHiding();
  83. }
  84. public virtual void onFinishedHiding() {
  85. deActivate();
  86. if (OnFinishedHiding != null) OnFinishedHiding();
  87. }
  88. // ================================================================================================================
  89. // INTERNAL INTERFACE ---------------------------------------------------------------------------------------------
  90. private void deActivate() {
  91. //gameObject.SetActive(false);
  92. //renderer.enabled = false;
  93. //gameObject.SetActive(false);
  94. if (isActivated) {
  95. // Disable all rendering
  96. if (disableRendering) {
  97. var renderers = GetComponentsInChildren<Renderer>();
  98. foreach (var renderer in renderers) {
  99. renderer.enabled = false;
  100. }
  101. }
  102. isActivated = false;
  103. }
  104. }
  105. private void activate() {
  106. //gameObject.SetActive(true);
  107. //renderer.enabled = true;
  108. //gameObject.SetActive(true);
  109. if (!isActivated) {
  110. // Disable all rendering
  111. if (disableRendering) {
  112. var renderers = GetComponentsInChildren<Renderer>();
  113. foreach (var renderer in renderers) {
  114. renderer.enabled = true;
  115. }
  116. }
  117. isActivated = true;
  118. }
  119. }
  120. }