lib_unity_purchase/Runtime/Stores/FakeStore/UIFakeStoreWindow.cs

134 lines
3.4 KiB
C#
Raw Normal View History

2025-01-20 12:55:54 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
namespace UnityEngine.Purchasing
{
internal class UIFakeStoreWindow : MonoBehaviour
{
string m_QueryText;
string m_OkText;
string m_CancelText;
string m_LastSelectedOptionText;
Action m_OnOk;
Action m_OnCancel;
Action<int> m_OnDropdown;
bool m_CancelEnabled;
bool m_DropdownEnabled;
bool m_DoDropdown;
readonly UIFakeStoreDropdown m_Dropdown = new UIFakeStoreDropdown();
Vector2 scrollPosition = new Vector2();
const float k_MenuScreenRatio = 0.6f;
void OnGUI()
{
var windowRect = CreateCenteredWindowRect();
if (m_DoDropdown)
{
GUI.Window(1, windowRect, m_Dropdown.DoPopup, "Select Response");
}
else
{
GUI.Window(0, windowRect, DoMainGUI, "Fake Store");
}
}
Rect CreateCenteredWindowRect()
{
var windowWidth = Screen.width * k_MenuScreenRatio;
var windowHeight = Screen.height * k_MenuScreenRatio;
var centeredX = (Screen.width - windowWidth) / 2f;
var centeredY = (Screen.height - windowHeight) / 2f;
return new Rect(centeredX, centeredY, windowWidth, windowHeight);
}
void DoMainGUI(int windowID)
{
scrollPosition = GUILayout.BeginScrollView(scrollPosition, false, false, GUI.skin.horizontalScrollbar,
GUI.skin.verticalScrollbar, GUI.skin.box);
GUILayout.Label(m_QueryText);
if (m_DropdownEnabled)
{
if (GUILayout.Button(m_LastSelectedOptionText))
{
DoDropDown();
}
}
if (GUILayout.Button(m_OkText))
{
OnOkClicked();
}
if (m_CancelEnabled)
{
if (GUILayout.Button(m_CancelText))
{
OnCancelClicked();
}
}
GUILayout.EndScrollView();
}
void DoDropDown()
{
m_DoDropdown = true;
}
void OnOkClicked()
{
m_OnOk?.Invoke();
}
void OnCancelClicked()
{
m_OnCancel?.Invoke();
}
internal void ConfigureMainDialogText(string queryText, string okText, string cancelText)
{
m_QueryText = queryText;
m_OkText = okText;
m_CancelText = cancelText;
}
internal void ConfigureDropdownOptions(List<string> options)
{
m_Dropdown.SetOptions(options);
m_Dropdown.SetSelectionAction(OnDropdown);
if (options.Count > 0)
{
m_LastSelectedOptionText = options.First();
}
}
void OnDropdown(int index, string selectionText)
{
m_LastSelectedOptionText = selectionText;
m_OnDropdown?.Invoke(index);
m_DoDropdown = false;
}
internal void AssignCallbacks(Action onOk, Action onCancel, Action<int> onDropdown)
{
m_OnOk = onOk;
m_CancelEnabled = onCancel != null;
m_OnCancel = onCancel;
m_DropdownEnabled = onDropdown != null;
m_OnDropdown = onDropdown;
}
}
}