Files
gamer147 0d9d8acae0 feat(battle-engine): M1 auto-copy closure (782 battle-logic files)
Compile-driven bulk-copy loop (tools/engine-port/m1_copy_loop.py) pulled the precise reference closure of the battle-core roots, stopping at the classify god-object/View-VFX-UI boundary. 782 files; no re-explosion (M0 had estimated ~order 1000). Residual frontier = 52 shim-classified + 80 external (Unity/BCL) types to author next.
2026-06-05 16:57:20 -04:00

1364 lines
28 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
[AddComponentMenu("NGUI/UI/Input Field")]
public class UIInput : MonoBehaviour
{
public enum InputType
{
Standard,
AutoCorrect,
Password
}
public enum Validation
{
None,
Integer,
Float,
Alphanumeric,
Username,
Name,
Filename
}
public enum KeyboardType
{
Default,
ASCIICapable,
NumbersAndPunctuation,
URL,
NumberPad,
PhonePad,
NamePhonePad,
EmailAddress
}
public enum OnReturnKey
{
Default,
Submit,
NewLine
}
public delegate char OnValidate(string text, int charIndex, char addedChar);
private bool isAfterPaste;
public static UIInput current;
public static UIInput selection;
public UILabel label;
public InputType inputType;
public OnReturnKey onReturnKey;
public KeyboardType keyboardType;
public bool hideInput;
[NonSerialized]
public bool selectAllTextOnFocus = true;
public Validation validation;
public int characterLimit;
public string savedAs;
[HideInInspector]
[SerializeField]
private GameObject selectOnTab;
public Color activeTextColor = Color.white;
public Color caretColor = new Color(1f, 1f, 1f, 0.8f);
public Color selectionColor = new Color(1f, 0.8745098f, 47f / 85f, 0.5f);
public List<EventDelegate> onSubmit = new List<EventDelegate>();
public List<EventDelegate> onChange = new List<EventDelegate>();
public OnValidate onValidate;
[SerializeField]
[HideInInspector]
protected string mValue;
[NonSerialized]
protected string mDefaultText = "";
[NonSerialized]
protected Color mDefaultColor = Color.white;
[NonSerialized]
protected float mPosition;
[NonSerialized]
protected bool mDoInit = true;
[NonSerialized]
protected NGUIText.Alignment mAlignment = NGUIText.Alignment.Left;
[NonSerialized]
protected bool mLoadSavedValue = true;
protected string _imeString = "";
private bool _wasComposingBeforeDeselection;
protected static int mDrawStart = 0;
protected static string mLastIME = "";
[NonSerialized]
protected int mSelectionStart;
[NonSerialized]
protected int mSelectionEnd;
[NonSerialized]
protected UITexture mHighlight;
[NonSerialized]
protected UITexture mCaret;
[NonSerialized]
protected Texture2D mBlankTex;
[NonSerialized]
protected float mNextBlink;
[NonSerialized]
protected float mLastAlpha;
[NonSerialized]
protected string mCached = "";
[NonSerialized]
protected int mSelectMe = -1;
[NonSerialized]
protected int mSelectTime = -1;
[NonSerialized]
private UIInputOnGUI mOnGUI;
[NonSerialized]
private UICamera mCam;
[NonSerialized]
private bool mEllipsis;
private static int mIgnoreKey = 0;
public string defaultText
{
get
{
if (mDoInit)
{
Init();
}
return mDefaultText;
}
set
{
if (mDoInit)
{
Init();
}
mDefaultText = value;
UpdateLabel();
}
}
public bool inputShouldBeHidden
{
get
{
if (hideInput && label != null && !label.multiLine)
{
return inputType != InputType.Password;
}
return false;
}
}
[Obsolete("Use UIInput.value instead")]
public string text
{
get
{
return value;
}
set
{
this.value = value;
}
}
public string value
{
get
{
if (mDoInit)
{
Init();
}
return mValue;
}
set
{
if (mDoInit)
{
Init();
}
mDrawStart = 0;
if (Application.platform == RuntimePlatform.BlackBerryPlayer)
{
value = value.Replace("\\b", "\b");
}
value = Validate(value);
if (!(mValue != value))
{
return;
}
mValue = value;
mLoadSavedValue = false;
if (isSelected)
{
if (string.IsNullOrEmpty(value))
{
mSelectionStart = 0;
mSelectionEnd = 0;
}
else
{
mSelectionStart = value.Length;
mSelectionEnd = mSelectionStart;
}
}
else
{
SaveToPlayerPrefs(value);
}
UpdateLabel();
ExecuteOnChange();
}
}
[Obsolete("Use UIInput.isSelected instead")]
public bool selected
{
get
{
return isSelected;
}
set
{
isSelected = value;
}
}
public bool isSelected
{
get
{
return selection == this;
}
set
{
if (!value)
{
if (isSelected)
{
UICamera.selectedObject = null;
}
}
else
{
UICamera.selectedObject = base.gameObject;
}
}
}
public int cursorPosition
{
get
{
if (!isSelected)
{
return value.Length;
}
return mSelectionEnd;
}
set
{
if (isSelected)
{
mSelectionEnd = value;
UpdateLabel();
}
}
}
public int selectionStart
{
get
{
if (!isSelected)
{
return value.Length;
}
return mSelectionStart;
}
set
{
if (isSelected)
{
mSelectionStart = value;
UpdateLabel(dontAddCompositionString: true);
}
}
}
public int selectionEnd
{
get
{
if (!isSelected)
{
return value.Length;
}
return mSelectionEnd;
}
set
{
if (isSelected)
{
mSelectionEnd = value;
UpdateLabel(dontAddCompositionString: true);
}
}
}
public UITexture caret => mCaret;
public string Validate(string val)
{
if (string.IsNullOrEmpty(val))
{
return "";
}
StringBuilder stringBuilder = new StringBuilder(val.Length);
for (int i = 0; i < val.Length; i++)
{
char c = val[i];
if (onValidate != null)
{
c = onValidate(stringBuilder.ToString(), stringBuilder.Length, c);
}
else if (validation != Validation.None)
{
c = Validate(stringBuilder.ToString(), stringBuilder.Length, c);
}
if (c != 0)
{
stringBuilder.Append(c);
}
}
if (characterLimit > 0 && stringBuilder.Length > characterLimit)
{
return stringBuilder.ToString(0, characterLimit);
}
return stringBuilder.ToString();
}
private void Start()
{
if (selectOnTab != null)
{
if (GetComponent<UIKeyNavigation>() == null)
{
base.gameObject.AddComponent<UIKeyNavigation>().onDown = selectOnTab;
}
selectOnTab = null;
NGUITools.SetDirty(this);
}
if (mLoadSavedValue && !string.IsNullOrEmpty(savedAs))
{
LoadValue();
}
else
{
value = mValue.Replace("\\n", "\n");
}
}
protected void Init()
{
if (mDoInit && label != null)
{
mDoInit = false;
mDefaultText = label.text;
mDefaultColor = label.color;
label.supportEncoding = false;
mEllipsis = label.overflowEllipsis;
if (label.alignment == NGUIText.Alignment.Justified)
{
label.alignment = NGUIText.Alignment.Left;
}
mAlignment = label.alignment;
mPosition = label.cachedTransform.localPosition.x;
UpdateLabel();
}
}
protected void SaveToPlayerPrefs(string val)
{
if (!string.IsNullOrEmpty(savedAs))
{
if (string.IsNullOrEmpty(val))
{
PlayerPrefs.DeleteKey(savedAs);
}
else
{
PlayerPrefs.SetString(savedAs, val);
}
}
}
protected virtual void OnSelect(bool isSelected)
{
if (isSelected)
{
if (mOnGUI == null)
{
mOnGUI = base.gameObject.AddComponent<UIInputOnGUI>();
}
OnSelectEvent();
return;
}
if (mOnGUI != null)
{
UnityEngine.Object.Destroy(mOnGUI);
mOnGUI = null;
}
OnDeselectEvent();
}
protected virtual void OnSelectEvent()
{
mSelectTime = Time.frameCount;
selection = this;
if (mDoInit)
{
Init();
}
if (label != null)
{
mEllipsis = label.overflowEllipsis;
label.overflowEllipsis = false;
}
if (label != null && NGUITools.GetActive(this) && !_wasComposingBeforeDeselection)
{
mSelectMe = Time.frameCount;
}
if (_wasComposingBeforeDeselection)
{
_wasComposingBeforeDeselection = false;
}
}
protected virtual void OnDeselectEvent()
{
if (mDoInit)
{
Init();
}
if (label != null)
{
label.overflowEllipsis = mEllipsis;
}
if (label != null && NGUITools.GetActive(this))
{
mValue = value;
if (!string.IsNullOrEmpty(_imeString))
{
UpdateFromInput(_imeString, "");
_wasComposingBeforeDeselection = true;
selection = null;
return;
}
if (string.IsNullOrEmpty(mValue))
{
label.text = mDefaultText;
label.color = mDefaultColor;
}
else
{
label.text = mValue;
}
Input.imeCompositionMode = IMECompositionMode.Auto;
label.alignment = mAlignment;
}
selection = null;
UpdateLabel();
}
protected virtual void Update()
{
if (!isSelected || mSelectTime == Time.frameCount)
{
return;
}
if (mDoInit)
{
Init();
}
if (_wasComposingBeforeDeselection)
{
_imeString = null;
mSelectMe = -1;
return;
}
if (mSelectMe != -1 && mSelectMe != Time.frameCount)
{
mSelectMe = -1;
mSelectionEnd = ((!string.IsNullOrEmpty(mValue)) ? mValue.Length : 0);
mDrawStart = 0;
mSelectionStart = ((!selectAllTextOnFocus) ? mSelectionEnd : 0);
label.color = activeTextColor;
Vector2 compositionCursorPos = ((UICamera.current != null && UICamera.current.cachedCamera != null) ? UICamera.current.cachedCamera.WorldToScreenPoint(label.worldCorners[0]) : label.worldCorners[0]);
compositionCursorPos.y = (float)Screen.height - compositionCursorPos.y;
Input.imeCompositionMode = IMECompositionMode.On;
Input.compositionCursorPos = compositionCursorPos;
UpdateLabel();
if (string.IsNullOrEmpty(Input.inputString))
{
return;
}
}
bool flag = false;
if (!string.IsNullOrEmpty(Input.inputString) && Input.inputString != "\n" && !string.IsNullOrEmpty(Input.compositionString))
{
UpdateFromInput(Input.inputString, "");
}
flag |= UpdateFromInput(Input.inputString, Input.compositionString);
if (mCaret != null && mNextBlink < RealTime.time)
{
mNextBlink = RealTime.time + 0.5f;
mCaret.enabled = !mCaret.enabled;
}
if (isSelected && mLastAlpha != label.finalAlpha)
{
UpdateLabel();
}
if (mCam == null)
{
mCam = UICamera.FindCameraForLayer(base.gameObject.layer);
}
if (!(mCam != null))
{
return;
}
if (UICamera.GetKeyDown(mCam.submitKey0))
{
if ((onReturnKey == OnReturnKey.NewLine && !flag) || (onReturnKey == OnReturnKey.Default && label.multiLine && !Input.GetKey(KeyCode.LeftControl) && !Input.GetKey(KeyCode.RightControl) && label.overflowMethod != UILabel.Overflow.ClampContent && validation == Validation.None))
{
Insert("\n");
}
else
{
if (UICamera.controller.current != null)
{
UICamera.controller.clickNotification = UICamera.ClickNotification.None;
}
UICamera.currentKey = mCam.submitKey0;
Submit();
}
}
if (UICamera.GetKeyDown(mCam.submitKey1))
{
if (onReturnKey == OnReturnKey.NewLine || (onReturnKey == OnReturnKey.Default && label.multiLine && !Input.GetKey(KeyCode.LeftControl) && !Input.GetKey(KeyCode.RightControl) && label.overflowMethod != UILabel.Overflow.ClampContent && validation == Validation.None))
{
Insert("\n");
}
else
{
if (UICamera.controller.current != null)
{
UICamera.controller.clickNotification = UICamera.ClickNotification.None;
}
UICamera.currentKey = mCam.submitKey1;
Submit();
}
}
if (!mCam.useKeyboard && UICamera.GetKeyUp(KeyCode.Tab))
{
OnKey(KeyCode.Tab);
}
}
private void OnKey(KeyCode key)
{
int frameCount = Time.frameCount;
if (mIgnoreKey == frameCount)
{
return;
}
if (mCam != null && (key == mCam.cancelKey0 || key == mCam.cancelKey1))
{
mIgnoreKey = frameCount;
isSelected = false;
}
else if (key == KeyCode.Tab)
{
mIgnoreKey = frameCount;
isSelected = false;
UIKeyNavigation component = GetComponent<UIKeyNavigation>();
if (component != null)
{
component.OnKey(KeyCode.Tab);
}
}
}
protected void DoBackspace()
{
if (string.IsNullOrEmpty(mValue))
{
return;
}
if (mSelectionStart == mSelectionEnd)
{
if (mSelectionStart < 1)
{
return;
}
mSelectionEnd--;
}
Insert("");
}
public virtual bool ProcessEvent(Event ev)
{
if (label == null)
{
return false;
}
RuntimePlatform platform = Application.platform;
bool flag = ((platform == RuntimePlatform.OSXEditor || platform == RuntimePlatform.OSXPlayer) ? ((ev.modifiers & EventModifiers.Command) != 0) : ((ev.modifiers & EventModifiers.Control) != 0));
if ((ev.modifiers & EventModifiers.Alt) != EventModifiers.None)
{
flag = false;
}
bool flag2 = (ev.modifiers & EventModifiers.Shift) != 0;
switch (ev.keyCode)
{
case KeyCode.Backspace:
ev.Use();
DoBackspace();
return true;
case KeyCode.Delete:
ev.Use();
if (!string.IsNullOrEmpty(mValue))
{
if (mSelectionStart == mSelectionEnd)
{
if (mSelectionStart >= mValue.Length)
{
return true;
}
mSelectionEnd++;
}
Insert("");
}
return true;
case KeyCode.LeftArrow:
ev.Use();
if (!string.IsNullOrEmpty(mValue))
{
mSelectionEnd = Mathf.Max(mSelectionEnd - 1, 0);
if (!flag2)
{
mSelectionStart = mSelectionEnd;
}
UpdateLabel();
}
return true;
case KeyCode.RightArrow:
ev.Use();
if (!string.IsNullOrEmpty(mValue))
{
mSelectionEnd = Mathf.Min(mSelectionEnd + 1, mValue.Length);
if (!flag2)
{
mSelectionStart = mSelectionEnd;
}
UpdateLabel();
}
return true;
case KeyCode.PageUp:
ev.Use();
if (!string.IsNullOrEmpty(mValue))
{
mSelectionEnd = 0;
if (!flag2)
{
mSelectionStart = mSelectionEnd;
}
UpdateLabel();
}
return true;
case KeyCode.PageDown:
ev.Use();
if (!string.IsNullOrEmpty(mValue))
{
mSelectionEnd = mValue.Length;
if (!flag2)
{
mSelectionStart = mSelectionEnd;
}
UpdateLabel();
}
return true;
case KeyCode.Home:
ev.Use();
if (!string.IsNullOrEmpty(mValue))
{
if (label.multiLine)
{
mSelectionEnd = label.GetCharacterIndex(mSelectionEnd, KeyCode.Home);
}
else
{
mSelectionEnd = 0;
}
if (!flag2)
{
mSelectionStart = mSelectionEnd;
}
UpdateLabel();
}
return true;
case KeyCode.End:
ev.Use();
if (!string.IsNullOrEmpty(mValue))
{
if (label.multiLine)
{
mSelectionEnd = label.GetCharacterIndex(mSelectionEnd, KeyCode.End);
}
else
{
mSelectionEnd = mValue.Length;
}
if (!flag2)
{
mSelectionStart = mSelectionEnd;
}
UpdateLabel();
}
return true;
case KeyCode.UpArrow:
ev.Use();
if (!string.IsNullOrEmpty(mValue))
{
mSelectionEnd = label.GetCharacterIndex(mSelectionEnd, KeyCode.UpArrow);
if (mSelectionEnd != 0)
{
mSelectionEnd += mDrawStart;
}
if (!flag2)
{
mSelectionStart = mSelectionEnd;
}
UpdateLabel();
}
return true;
case KeyCode.DownArrow:
ev.Use();
if (!string.IsNullOrEmpty(mValue))
{
mSelectionEnd = label.GetCharacterIndex(mSelectionEnd, KeyCode.DownArrow);
if (mSelectionEnd != label.processedText.Length)
{
mSelectionEnd += mDrawStart;
}
else
{
mSelectionEnd = mValue.Length;
}
if (!flag2)
{
mSelectionStart = mSelectionEnd;
}
UpdateLabel();
}
return true;
case KeyCode.A:
if (flag)
{
ev.Use();
mSelectionStart = 0;
mSelectionEnd = mValue.Length;
UpdateLabel();
}
return true;
case KeyCode.C:
if (flag)
{
ev.Use();
NGUITools.clipboard = GetSelection();
}
return true;
case KeyCode.V:
if (flag)
{
ev.Use();
Insert(NGUITools.clipboard);
isAfterPaste = true;
}
return true;
case KeyCode.X:
if (flag)
{
ev.Use();
NGUITools.clipboard = GetSelection();
Insert("");
}
return true;
default:
return false;
}
}
protected virtual void Insert(string text, bool dontAddCompositionString = false)
{
string leftText = GetLeftText();
string rightText = GetRightText();
int length = rightText.Length;
StringBuilder stringBuilder = new StringBuilder(leftText.Length + rightText.Length + text.Length);
stringBuilder.Append(leftText);
int i = 0;
for (int length2 = text.Length; i < length2; i++)
{
char c = text[i];
if (c == '\b')
{
DoBackspace();
continue;
}
if (characterLimit > 0 && stringBuilder.Length + length >= characterLimit)
{
break;
}
if (onValidate != null)
{
c = onValidate(stringBuilder.ToString(), stringBuilder.Length, c);
}
else if (validation != Validation.None)
{
c = Validate(stringBuilder.ToString(), stringBuilder.Length, c);
}
if (c != 0)
{
stringBuilder.Append(c);
}
}
mSelectionStart = stringBuilder.Length;
mSelectionEnd = mSelectionStart;
int j = 0;
for (int length3 = rightText.Length; j < length3; j++)
{
char c2 = rightText[j];
if (onValidate != null)
{
c2 = onValidate(stringBuilder.ToString(), stringBuilder.Length, c2);
}
else if (validation != Validation.None)
{
c2 = Validate(stringBuilder.ToString(), stringBuilder.Length, c2);
}
if (c2 != 0)
{
stringBuilder.Append(c2);
}
}
mValue = stringBuilder.ToString();
UpdateLabel(dontAddCompositionString);
ExecuteOnChange();
}
protected string GetLeftText()
{
int num = Mathf.Min(mSelectionStart, mSelectionEnd, mValue.Length);
if (!string.IsNullOrEmpty(mValue) && num >= 0)
{
return mValue.Substring(0, num);
}
return "";
}
protected string GetRightText()
{
int num = Mathf.Max(mSelectionStart, mSelectionEnd);
if (!string.IsNullOrEmpty(mValue) && num < mValue.Length)
{
return mValue.Substring(num);
}
return "";
}
protected string GetSelection()
{
if (string.IsNullOrEmpty(mValue) || mSelectionStart == mSelectionEnd)
{
return "";
}
int num = Mathf.Min(mSelectionStart, mSelectionEnd);
int num2 = Mathf.Max(mSelectionStart, mSelectionEnd);
return mValue.Substring(num, num2 - num);
}
protected int GetCharUnderMouse()
{
if (string.IsNullOrEmpty(label.text))
{
return 0;
}
Vector3[] worldCorners = label.worldCorners;
Ray currentRay = UICamera.currentRay;
if (!new Plane(worldCorners[0], worldCorners[1], worldCorners[2]).Raycast(currentRay, out var enter))
{
return 0;
}
return mDrawStart + label.GetCharacterIndexAtPosition(currentRay.GetPoint(enter), precise: false);
}
protected virtual void OnPress(bool isPressed)
{
if (isPressed && isSelected && label != null && string.IsNullOrEmpty(_imeString) && !_wasComposingBeforeDeselection && (UICamera.currentScheme == UICamera.ControlScheme.Mouse || UICamera.currentScheme == UICamera.ControlScheme.Touch))
{
selectionEnd = GetCharUnderMouse();
if (!Input.GetKey(KeyCode.LeftShift) && !Input.GetKey(KeyCode.RightShift))
{
selectionStart = mSelectionEnd;
}
}
}
protected virtual void OnDrag(Vector2 delta)
{
if (label != null && (UICamera.currentScheme == UICamera.ControlScheme.Mouse || UICamera.currentScheme == UICamera.ControlScheme.Touch))
{
selectionEnd = GetCharUnderMouse();
}
}
private void OnDisable()
{
Cleanup();
}
protected virtual void Cleanup()
{
if ((bool)mHighlight)
{
mHighlight.enabled = false;
}
if ((bool)mCaret)
{
mCaret.enabled = false;
}
if ((bool)mBlankTex)
{
NGUITools.Destroy(mBlankTex);
mBlankTex = null;
}
}
public void Submit()
{
if (NGUITools.GetActive(this))
{
mValue = value;
if (current == null)
{
current = this;
EventDelegate.Execute(onSubmit);
current = null;
}
SaveToPlayerPrefs(mValue);
}
}
public void UpdateLabel(bool dontAddCompositionString = false, bool isIme = false)
{
if (!(label != null))
{
return;
}
if (mDoInit)
{
Init();
}
bool flag = isSelected;
string text = value;
bool flag2 = string.IsNullOrEmpty(text) && string.IsNullOrEmpty(Input.compositionString);
label.color = ((flag2 && !flag) ? mDefaultColor : activeTextColor);
string text2;
if (flag2)
{
text2 = (flag ? "" : mDefaultText);
label.alignment = mAlignment;
}
else
{
if (inputType == InputType.Password)
{
text2 = "";
string text3 = "*";
if (label.bitmapFont != null && label.bitmapFont.bmFont != null && label.bitmapFont.bmFont.GetGlyph(42) == null)
{
text3 = "x";
}
int i = 0;
for (int length = text.Length; i < length; i++)
{
text2 += text3;
}
}
else
{
text2 = text;
}
int num = (flag ? Mathf.Min(text2.Length, cursorPosition) : 0);
string text4 = text2.Substring(0, num);
if (flag && !dontAddCompositionString)
{
text4 += Input.compositionString;
}
text2 = text4 + text2.Substring(num, text2.Length - num);
if (flag && label.overflowMethod == UILabel.Overflow.ClampContent && label.maxLineCount == 1)
{
int num2 = label.CalculateOffsetToFit(text2);
if (num2 == 0)
{
mDrawStart = 0;
label.alignment = mAlignment;
}
else if (num < mDrawStart)
{
mDrawStart = num;
label.alignment = NGUIText.Alignment.Left;
}
else if (num2 < mDrawStart)
{
mDrawStart = num2;
label.alignment = NGUIText.Alignment.Left;
}
else
{
num2 = label.CalculateOffsetToFit(text2.Substring(0, num));
if (num2 > mDrawStart)
{
mDrawStart = num2;
label.alignment = NGUIText.Alignment.Right;
}
}
if (mDrawStart != 0)
{
text2 = text2.Substring(mDrawStart, text2.Length - mDrawStart);
}
}
else
{
mDrawStart = 0;
label.alignment = mAlignment;
}
}
label.text = text2;
if (flag)
{
int num3 = mSelectionStart - mDrawStart;
int num4 = mSelectionEnd - mDrawStart;
if (isIme && !string.IsNullOrEmpty(Input.compositionString))
{
num4 += Input.compositionString.Length;
}
if (mBlankTex == null)
{
mBlankTex = new Texture2D(2, 2, TextureFormat.ARGB32, mipChain: false);
for (int j = 0; j < 2; j++)
{
for (int k = 0; k < 2; k++)
{
mBlankTex.SetPixel(k, j, Color.white);
}
}
mBlankTex.Apply();
}
if (num3 != num4)
{
if (mHighlight == null)
{
mHighlight = NGUITools.AddWidget<UITexture>(label.cachedGameObject);
mHighlight.name = "Input Highlight";
mHighlight.mainTexture = mBlankTex;
mHighlight.fillGeometry = false;
mHighlight.pivot = label.pivot;
mHighlight.SetAnchor(label.cachedTransform);
}
else
{
mHighlight.pivot = label.pivot;
mHighlight.mainTexture = mBlankTex;
mHighlight.MarkAsChanged();
mHighlight.enabled = true;
}
}
if (mCaret == null)
{
mCaret = NGUITools.AddWidget<UITexture>(label.cachedGameObject);
mCaret.name = "Input Caret";
mCaret.mainTexture = mBlankTex;
mCaret.fillGeometry = false;
mCaret.pivot = label.pivot;
mCaret.SetAnchor(label.cachedTransform);
}
else
{
mCaret.pivot = label.pivot;
mCaret.mainTexture = mBlankTex;
mCaret.MarkAsChanged();
mCaret.enabled = true;
}
if (num3 != num4)
{
label.PrintOverlay(num3, num4, mCaret.geometry, mHighlight.geometry, caretColor, selectionColor);
mHighlight.enabled = mHighlight.geometry.hasVertices;
}
else
{
label.PrintOverlay(num3, num4, mCaret.geometry, null, caretColor, selectionColor);
if (mHighlight != null)
{
mHighlight.enabled = false;
}
}
mNextBlink = RealTime.time + 0.5f;
mLastAlpha = label.finalAlpha;
}
else
{
Cleanup();
}
}
protected char Validate(string text, int pos, char ch)
{
if (validation == Validation.None || !base.enabled)
{
return ch;
}
if (validation == Validation.Integer)
{
if (ch >= '0' && ch <= '9')
{
return ch;
}
if (ch == '-' && pos == 0 && !text.Contains("-"))
{
return ch;
}
}
else if (validation == Validation.Float)
{
if (ch >= '0' && ch <= '9')
{
return ch;
}
if (ch == '-' && pos == 0 && !text.Contains("-"))
{
return ch;
}
if (ch == '.' && !text.Contains("."))
{
return ch;
}
}
else if (validation == Validation.Alphanumeric)
{
if (ch >= 'A' && ch <= 'Z')
{
return ch;
}
if (ch >= 'a' && ch <= 'z')
{
return ch;
}
if (ch >= '0' && ch <= '9')
{
return ch;
}
}
else if (validation == Validation.Username)
{
if (ch >= 'A' && ch <= 'Z')
{
return (char)(ch - 65 + 97);
}
if (ch >= 'a' && ch <= 'z')
{
return ch;
}
if (ch >= '0' && ch <= '9')
{
return ch;
}
}
else
{
if (validation == Validation.Filename)
{
return ch switch
{
':' => '\0',
'/' => '\0',
'\\' => '\0',
'<' => '\0',
'>' => '\0',
'|' => '\0',
'^' => '\0',
'*' => '\0',
';' => '\0',
'"' => '\0',
'`' => '\0',
'\t' => '\0',
'\n' => '\0',
_ => ch,
};
}
if (validation == Validation.Name)
{
char c = ((text.Length > 0) ? text[Mathf.Clamp(pos, 0, text.Length - 1)] : ' ');
char c2 = ((text.Length > 0) ? text[Mathf.Clamp(pos + 1, 0, text.Length - 1)] : '\n');
if (ch >= 'a' && ch <= 'z')
{
if (c == ' ')
{
return (char)(ch - 97 + 65);
}
return ch;
}
if (ch >= 'A' && ch <= 'Z')
{
if (c != ' ' && c != '\'')
{
return (char)(ch - 65 + 97);
}
return ch;
}
switch (ch)
{
case '\'':
if (c != ' ' && c != '\'' && c2 != '\'' && !text.Contains("'"))
{
return ch;
}
break;
case ' ':
if (c != ' ' && c != '\'' && c2 != ' ' && c2 != '\'')
{
return ch;
}
break;
}
}
}
return '\0';
}
protected void ExecuteOnChange()
{
if (current == null && EventDelegate.IsValid(onChange))
{
current = this;
EventDelegate.Execute(onChange);
current = null;
}
}
public void RemoveFocus()
{
isSelected = false;
}
public bool ClearIMEOnlyOSX()
{
return false;
}
public void ClearFocusOnlyOSX()
{
}
public void SaveValue()
{
SaveToPlayerPrefs(mValue);
}
public void LoadValue()
{
if (!string.IsNullOrEmpty(savedAs))
{
string text = mValue.Replace("\\n", "\n");
mValue = "";
value = (PlayerPrefs.HasKey(savedAs) ? PlayerPrefs.GetString(savedAs) : text);
}
}
private bool UpdateFromInput(string inputString, string compositionString, bool forceInsert = false)
{
bool result = false;
if (!string.IsNullOrEmpty(compositionString))
{
_imeString = compositionString;
}
if ((string.IsNullOrEmpty(compositionString) || forceInsert) && !string.IsNullOrEmpty(inputString) && !isAfterPaste)
{
string text = inputString;
if (Input.GetMouseButtonDown(0) || Input.GetMouseButtonDown(1) || Input.GetMouseButtonDown(2))
{
text = _imeString;
}
_imeString = "";
for (int i = 0; i < text.Length; i++)
{
char c = text[i];
if (c >= ' ' && c != '\uf700' && c != '\uf701' && c != '\uf702' && c != '\uf703')
{
Insert(c.ToString(), forceInsert);
}
}
}
isAfterPaste = false;
if (mLastIME != compositionString)
{
mLastIME = compositionString;
UpdateLabel(dontAddCompositionString: false, isIme: true);
ExecuteOnChange();
}
return result;
}
}