暫無描述
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PurchasingSettingsProvider.cs 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. #if SERVICES_SDK_CORE_ENABLED
  2. using System.Collections.Generic;
  3. using Unity.Services.Core.Editor;
  4. using UnityEngine;
  5. using UnityEngine.UIElements;
  6. namespace UnityEditor.Purchasing
  7. {
  8. internal class PurchasingSettingsProvider : EditorGameServiceSettingsProvider
  9. {
  10. const string k_ProjectSettingsName = "In-App Purchasing";
  11. const string k_Title = "In-App Purchases";
  12. const string k_Description = "Simplify cross platform In-App Purchasing";
  13. readonly PurchasingGameService m_Service;
  14. bool m_CallbacksInitialized;
  15. SimpleStateMachine<bool> m_StateMachine;
  16. PurchasingDisabledState m_DisabledState;
  17. PurchasingEnabledState m_EnabledState;
  18. internal VisualElement rootVisualElement { get; private set; }
  19. [SettingsProvider]
  20. internal static SettingsProvider CreateServicesProvider()
  21. {
  22. #if ENABLE_EDITOR_GAME_SERVICES
  23. return new PurchasingSettingsProvider(SettingsScope.Project, PurchasingSettingsKeywords.GetKeywords());
  24. #else
  25. return null;
  26. #endif
  27. }
  28. internal PurchasingSettingsProvider(SettingsScope scopes, IEnumerable<string> keywords = null)
  29. : base(GetSettingsPath(), scopes, keywords)
  30. {
  31. m_Service = (PurchasingGameService)EditorGameServiceRegistry.Instance.GetEditorGameService<PurchasingServiceIdentifier>();
  32. ConfigureStateMachine();
  33. }
  34. void ConfigureStateMachine()
  35. {
  36. m_StateMachine = new SimpleStateMachine<bool>();
  37. m_StateMachine.AddEvent(false);
  38. m_StateMachine.AddEvent(true);
  39. m_DisabledState = new PurchasingDisabledState(m_StateMachine);
  40. m_EnabledState = new PurchasingEnabledState(m_StateMachine);
  41. m_StateMachine.AddState(m_DisabledState);
  42. m_StateMachine.AddState(m_EnabledState);
  43. }
  44. internal static string GetSettingsPath()
  45. {
  46. return GenerateProjectSettingsPath(k_ProjectSettingsName);
  47. }
  48. protected override IEditorGameService EditorGameService => m_Service;
  49. protected override string Title => k_Title;
  50. protected override string Description => k_Description;
  51. protected override VisualElement GenerateServiceDetailUI()
  52. {
  53. rootVisualElement = new VisualElement();
  54. InitializeStateMachine();
  55. RefreshDetailUI();
  56. return rootVisualElement;
  57. }
  58. void RefreshDetailUI()
  59. {
  60. rootVisualElement.Clear();
  61. var clonedContainer = SettingsUIUtils.CloneUIFromTemplate(UIResourceUtils.purchasingServicesRootUxmlPath);
  62. rootVisualElement.Add(clonedContainer);
  63. var uiState = (BasePurchasingState)m_StateMachine.currentState;
  64. foreach (var uiStateElement in uiState.GetStateUI())
  65. {
  66. rootVisualElement.Add(uiStateElement);
  67. }
  68. }
  69. public override void OnActivate(string searchContext, VisualElement rootElement)
  70. {
  71. base.OnActivate(searchContext, rootElement);
  72. InitializeStateMachine();
  73. InitializeServiceCallbacks();
  74. }
  75. void InitializeStateMachine()
  76. {
  77. if (m_StateMachine.currentState == null)
  78. {
  79. if (m_Service.Enabler.IsEnabled())
  80. {
  81. m_StateMachine.Initialize(m_EnabledState);
  82. }
  83. else
  84. {
  85. m_StateMachine.Initialize(m_DisabledState);
  86. }
  87. }
  88. }
  89. public override void OnDeactivate()
  90. {
  91. base.OnDeactivate();
  92. FinalizeStateMachine();
  93. FinalizeServiceCallbacks();
  94. }
  95. void FinalizeStateMachine()
  96. {
  97. m_StateMachine.ClearCurrentState();
  98. }
  99. void InitializeServiceCallbacks()
  100. {
  101. if (!m_CallbacksInitialized)
  102. {
  103. m_Service.AddEnableAction(EnableOperationCompleted);
  104. m_Service.AddDisableAction(DisableOperationCompleted);
  105. m_CallbacksInitialized = true;
  106. }
  107. }
  108. void FinalizeServiceCallbacks()
  109. {
  110. if (m_CallbacksInitialized)
  111. {
  112. m_Service.RemoveEnableAction(EnableOperationCompleted);
  113. m_Service.RemoveDisableAction(DisableOperationCompleted);
  114. m_CallbacksInitialized = false;
  115. }
  116. }
  117. void EnableOperationCompleted()
  118. {
  119. m_StateMachine.ProcessEvent(true);
  120. RefreshDetailUI();
  121. }
  122. void DisableOperationCompleted()
  123. {
  124. m_StateMachine.ProcessEvent(false);
  125. RefreshDetailUI();
  126. }
  127. }
  128. }
  129. #endif