471 lines
15 KiB
C#
471 lines
15 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using UnityEngine;
|
|||
|
|
|||
|
namespace FairyGUI
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Global configs. These options should be set before any UI construction.
|
|||
|
/// </summary>
|
|||
|
[AddComponentMenu("FairyGUI/UI Config")]
|
|||
|
public class UIConfig : MonoBehaviour
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Dynamic Font Support.
|
|||
|
/// 4.x: Put the xxx.ttf into /Resources or /Resources/Fonts, and set defaultFont="xxx".
|
|||
|
/// 5.x: set defaultFont to system font name(or names joint with comma). e.g. defaultFont="Microsoft YaHei, SimHei"
|
|||
|
/// </summary>
|
|||
|
public static string defaultFont = "";
|
|||
|
|
|||
|
[Obsolete("No use anymore")]
|
|||
|
public static bool renderingTextBrighterOnDesktop = true;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Resource using in Window.ShowModalWait for locking the window.
|
|||
|
/// </summary>
|
|||
|
public static string windowModalWaiting;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Resource using in GRoot.ShowModalWait for locking the screen.
|
|||
|
/// </summary>
|
|||
|
public static string globalModalWaiting;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// When a modal window is in front, the background becomes dark.
|
|||
|
/// </summary>
|
|||
|
public static Color modalLayerColor = new Color(0f, 0f, 0f, 0.4f);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Default button click sound.
|
|||
|
/// </summary>
|
|||
|
public static NAudioClip buttonSound;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Default button click sound volume.
|
|||
|
/// </summary>
|
|||
|
public static float buttonSoundVolumeScale = 1f;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Resource url of horizontal scrollbar
|
|||
|
/// </summary>
|
|||
|
public static string horizontalScrollBar;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Resource url of vertical scrollbar
|
|||
|
/// </summary>
|
|||
|
public static string verticalScrollBar;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Scrolling step in pixels
|
|||
|
/// 当调用ScrollPane.scrollUp/Down/Left/Right时,或者点击滚动条的上下箭头时,滑动的距离。
|
|||
|
/// 鼠标滚轮触发一次滚动的距离设定为defaultScrollStep*2
|
|||
|
/// </summary>
|
|||
|
public static float defaultScrollStep = 25;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Deceleration ratio of scrollpane when its in touch dragging.
|
|||
|
/// 当手指拖动并释放滚动区域后,内容会滑动一定距离后停下,这个速率就是减速的速率。
|
|||
|
/// 越接近1,减速越慢,意味着滑动的时间和距离更长。
|
|||
|
/// 这个是全局设置,也可以通过ScrollPane.decelerationRate进行个性设置。
|
|||
|
/// </summary>
|
|||
|
public static float defaultScrollDecelerationRate = 0.967f;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Scrollbar display mode. Recommended 'Auto' for mobile and 'Visible' for web.
|
|||
|
/// </summary>
|
|||
|
public static ScrollBarDisplayType defaultScrollBarDisplay = ScrollBarDisplayType.Default;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Allow dragging anywhere in container to scroll.
|
|||
|
/// </summary>
|
|||
|
public static bool defaultScrollTouchEffect = true;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// The "rebound" effect in the scolling container.
|
|||
|
/// </summary>
|
|||
|
public static bool defaultScrollBounceEffect = true;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// When the scrolling container is set to "snap to the item", the rolling distance threshold of which item is close to is determined.
|
|||
|
/// </summary>
|
|||
|
public static float defaultScrollSnappingThreshold = 0.5f;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// When the scrolling container is set to "page mode", it determines the scrolling distance threshold to which page to turn.
|
|||
|
/// </summary>
|
|||
|
public static float defaultScrollPagingThreshold = 0.3f;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Resources url of PopupMenu.
|
|||
|
/// </summary>
|
|||
|
public static string popupMenu;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Resource url of menu seperator.
|
|||
|
/// </summary>
|
|||
|
public static string popupMenu_seperator;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// In case of failure of loading content for GLoader, use this sign to indicate an error.
|
|||
|
/// </summary>
|
|||
|
public static string loaderErrorSign;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Resource url of tooltips.
|
|||
|
/// </summary>
|
|||
|
public static string tooltipsWin;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// The number of visible items in ComboBox.
|
|||
|
/// </summary>
|
|||
|
public static int defaultComboBoxVisibleItemCount = 10;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Pixel offsets of finger to trigger scrolling
|
|||
|
/// </summary>
|
|||
|
public static int touchScrollSensitivity = 20;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Pixel offsets of finger to trigger dragging
|
|||
|
/// </summary>
|
|||
|
public static int touchDragSensitivity = 10;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Pixel offsets of mouse pointer to trigger dragging.
|
|||
|
/// </summary>
|
|||
|
public static int clickDragSensitivity = 2;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Allow softness on top or left side for scrollpane.
|
|||
|
/// </summary>
|
|||
|
public static bool allowSoftnessOnTopOrLeftSide = true;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// When click the window, brings to front automatically.
|
|||
|
/// </summary>
|
|||
|
public static bool bringWindowToFrontOnClick = true;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
///
|
|||
|
/// </summary>
|
|||
|
public static float inputCaretSize = 1;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
///
|
|||
|
/// </summary>
|
|||
|
public static Color inputHighlightColor = new Color32(255, 223, 141, 128);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
///
|
|||
|
/// </summary>
|
|||
|
public static float frameTimeForAsyncUIConstruction = 0.002f;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// if RenderTexture using in painting mode has depth support.
|
|||
|
/// </summary>
|
|||
|
public static bool depthSupportForPaintingMode = true;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Indicates whether to draw extra 4 or 8 times to achieve stroke effect for textfield.
|
|||
|
/// If it is true, that is the 8 times, otherwise it is the 4 times.
|
|||
|
/// </summary>
|
|||
|
public static bool enhancedTextOutlineEffect = false;
|
|||
|
|
|||
|
[Obsolete("No use anymore.")]
|
|||
|
public static VertAlignType richTextRowVerticalAlign = VertAlignType.Bottom;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Suggest to enable it on low dpi (e.g. 96dpi) screens.
|
|||
|
/// </summary>
|
|||
|
public static bool makePixelPerfect = false;
|
|||
|
|
|||
|
public enum ConfigKey
|
|||
|
{
|
|||
|
DefaultFont,
|
|||
|
ButtonSound,
|
|||
|
ButtonSoundVolumeScale,
|
|||
|
HorizontalScrollBar,
|
|||
|
VerticalScrollBar,
|
|||
|
DefaultScrollStep,
|
|||
|
DefaultScrollBarDisplay,
|
|||
|
DefaultScrollTouchEffect,
|
|||
|
DefaultScrollBounceEffect,
|
|||
|
TouchScrollSensitivity,
|
|||
|
WindowModalWaiting,
|
|||
|
GlobalModalWaiting,
|
|||
|
PopupMenu,
|
|||
|
PopupMenu_seperator,
|
|||
|
LoaderErrorSign,
|
|||
|
TooltipsWin,
|
|||
|
DefaultComboBoxVisibleItemCount,
|
|||
|
TouchDragSensitivity,
|
|||
|
ClickDragSensitivity,
|
|||
|
ModalLayerColor,
|
|||
|
RenderingTextBrighterOnDesktop,
|
|||
|
AllowSoftnessOnTopOrLeftSide,
|
|||
|
InputCaretSize,
|
|||
|
InputHighlightColor,
|
|||
|
EnhancedTextOutlineEffect,
|
|||
|
DepthSupportForPaintingMode,
|
|||
|
RichTextRowVerticalAlign,
|
|||
|
Branch,
|
|||
|
|
|||
|
PleaseSelect = 100
|
|||
|
}
|
|||
|
|
|||
|
[Serializable]
|
|||
|
public class ConfigValue
|
|||
|
{
|
|||
|
public bool valid;
|
|||
|
public string s;
|
|||
|
public int i;
|
|||
|
public float f;
|
|||
|
public bool b;
|
|||
|
public Color c;
|
|||
|
|
|||
|
public void Reset()
|
|||
|
{
|
|||
|
valid = false;
|
|||
|
s = null;
|
|||
|
i = 0;
|
|||
|
f = 0;
|
|||
|
b = false;
|
|||
|
c = Color.black;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public List<ConfigValue> Items = new List<ConfigValue>();
|
|||
|
public List<string> PreloadPackages = new List<string>();
|
|||
|
|
|||
|
void Awake()
|
|||
|
{
|
|||
|
if (Application.isPlaying)
|
|||
|
{
|
|||
|
foreach (string packagePath in PreloadPackages)
|
|||
|
{
|
|||
|
UIPackage.AddPackage(packagePath);
|
|||
|
}
|
|||
|
|
|||
|
Load();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void Load()
|
|||
|
{
|
|||
|
int cnt = Items.Count;
|
|||
|
for (int i = 0; i < cnt; i++)
|
|||
|
{
|
|||
|
ConfigValue value = Items[i];
|
|||
|
if (!value.valid)
|
|||
|
continue;
|
|||
|
|
|||
|
switch ((UIConfig.ConfigKey)i)
|
|||
|
{
|
|||
|
case ConfigKey.ButtonSound:
|
|||
|
if (Application.isPlaying)
|
|||
|
UIConfig.buttonSound = UIPackage.GetItemAssetByURL(value.s) as NAudioClip;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.ButtonSoundVolumeScale:
|
|||
|
UIConfig.buttonSoundVolumeScale = value.f;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.ClickDragSensitivity:
|
|||
|
UIConfig.clickDragSensitivity = value.i;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.DefaultComboBoxVisibleItemCount:
|
|||
|
UIConfig.defaultComboBoxVisibleItemCount = value.i;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.DefaultFont:
|
|||
|
UIConfig.defaultFont = value.s;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.DefaultScrollBarDisplay:
|
|||
|
UIConfig.defaultScrollBarDisplay = (ScrollBarDisplayType)value.i;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.DefaultScrollBounceEffect:
|
|||
|
UIConfig.defaultScrollBounceEffect = value.b;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.DefaultScrollStep:
|
|||
|
UIConfig.defaultScrollStep = value.i;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.DefaultScrollTouchEffect:
|
|||
|
UIConfig.defaultScrollTouchEffect = value.b;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.GlobalModalWaiting:
|
|||
|
UIConfig.globalModalWaiting = value.s;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.HorizontalScrollBar:
|
|||
|
UIConfig.horizontalScrollBar = value.s;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.LoaderErrorSign:
|
|||
|
UIConfig.loaderErrorSign = value.s;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.ModalLayerColor:
|
|||
|
UIConfig.modalLayerColor = value.c;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.PopupMenu:
|
|||
|
UIConfig.popupMenu = value.s;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.PopupMenu_seperator:
|
|||
|
UIConfig.popupMenu_seperator = value.s;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.TooltipsWin:
|
|||
|
UIConfig.tooltipsWin = value.s;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.TouchDragSensitivity:
|
|||
|
UIConfig.touchDragSensitivity = value.i;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.TouchScrollSensitivity:
|
|||
|
UIConfig.touchScrollSensitivity = value.i;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.VerticalScrollBar:
|
|||
|
UIConfig.verticalScrollBar = value.s;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.WindowModalWaiting:
|
|||
|
UIConfig.windowModalWaiting = value.s;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.AllowSoftnessOnTopOrLeftSide:
|
|||
|
UIConfig.allowSoftnessOnTopOrLeftSide = value.b;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.InputCaretSize:
|
|||
|
UIConfig.inputCaretSize = value.i;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.InputHighlightColor:
|
|||
|
UIConfig.inputHighlightColor = value.c;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.DepthSupportForPaintingMode:
|
|||
|
UIConfig.depthSupportForPaintingMode = value.b;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.EnhancedTextOutlineEffect:
|
|||
|
UIConfig.enhancedTextOutlineEffect = value.b;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.Branch:
|
|||
|
UIPackage.branch = value.s;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static void SetDefaultValue(ConfigKey key, ConfigValue value)
|
|||
|
{
|
|||
|
switch (key)
|
|||
|
{
|
|||
|
case ConfigKey.ButtonSoundVolumeScale:
|
|||
|
value.f = 1;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.ClickDragSensitivity:
|
|||
|
value.i = 2;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.DefaultComboBoxVisibleItemCount:
|
|||
|
value.i = 10;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.DefaultScrollBarDisplay:
|
|||
|
value.i = (int)ScrollBarDisplayType.Default;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.DefaultScrollBounceEffect:
|
|||
|
case ConfigKey.DefaultScrollTouchEffect:
|
|||
|
value.b = true;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.DefaultScrollStep:
|
|||
|
value.i = 25;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.ModalLayerColor:
|
|||
|
value.c = new Color(0f, 0f, 0f, 0.4f);
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.RenderingTextBrighterOnDesktop:
|
|||
|
value.b = true;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.TouchDragSensitivity:
|
|||
|
value.i = 10;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.TouchScrollSensitivity:
|
|||
|
value.i = 20;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.InputCaretSize:
|
|||
|
value.i = 1;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.InputHighlightColor:
|
|||
|
value.c = new Color32(255, 223, 141, 128);
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.DepthSupportForPaintingMode:
|
|||
|
value.b = false;
|
|||
|
break;
|
|||
|
|
|||
|
case ConfigKey.Branch:
|
|||
|
value.s = "";
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static void ClearResourceRefs()
|
|||
|
{
|
|||
|
UIConfig.defaultFont = "";
|
|||
|
UIConfig.buttonSound = null;
|
|||
|
UIConfig.globalModalWaiting = null;
|
|||
|
UIConfig.horizontalScrollBar = null;
|
|||
|
UIConfig.loaderErrorSign = null;
|
|||
|
UIConfig.popupMenu = null;
|
|||
|
UIConfig.popupMenu_seperator = null;
|
|||
|
UIConfig.tooltipsWin = null;
|
|||
|
UIConfig.verticalScrollBar = null;
|
|||
|
UIConfig.windowModalWaiting = null;
|
|||
|
UIConfig.soundLoader = null;
|
|||
|
}
|
|||
|
|
|||
|
public void ApplyModifiedProperties()
|
|||
|
{
|
|||
|
EMRenderSupport.Reload();
|
|||
|
}
|
|||
|
|
|||
|
public delegate NAudioClip SoundLoader(string url);
|
|||
|
|
|||
|
/// <summary>
|
|||
|
///
|
|||
|
/// </summary>
|
|||
|
public static SoundLoader soundLoader = null;
|
|||
|
|
|||
|
#if UNITY_2019_3_OR_NEWER
|
|||
|
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
|
|||
|
static void InitializeOnLoad()
|
|||
|
{
|
|||
|
ClearResourceRefs();
|
|||
|
}
|
|||
|
#endif
|
|||
|
}
|
|||
|
}
|