finished inputfield prefab

This commit is contained in:
DerTyp187
2021-12-21 21:51:34 +01:00
parent 5205b9553f
commit da164e4e90
5 changed files with 1422 additions and 1040 deletions

View File

@@ -7,54 +7,167 @@ using TMPro;
public class HomeSceneInputField : MonoBehaviour, IPointerClickHandler
{
GameObject marker;
GameObject focusText;
GameObject helpText;
GameObject underline;
[SerializeField] float markerHeight = 20.0f;
[SerializeField] float transitionStartTime = 0.2f;
[SerializeField] float transitionEndTime = 0.2f;
[SerializeField] Color helpTextOriginColor;
[SerializeField] Color helpTextColor;
[SerializeField] Color focusTextOriginColor;
[SerializeField] Color focusTextColor;
[SerializeField] float helpTextEndPosition = -25f;
[SerializeField] float focusTextEndPosition = 20f;
[Header("GameObjects")]
[SerializeField] GameObject marker;
[SerializeField] GameObject focusText;
[SerializeField] GameObject helpText;
[SerializeField] GameObject underline;
[SerializeField] GameObject placeholder;
TMP_InputField inputField;
bool isFocused = false;
bool transitionStartDone = false;
bool transitionEndDone = false;
bool isActive = false;
bool transitionCycleStarted = false;
float transitionStartTimePassed = 0;
float transitionEndTimePassed = 0;
void Start()
{
marker = gameObject.transform.Find("Marker").gameObject;
focusText = gameObject.transform.Find("FocusText").gameObject;
helpText = gameObject.transform.Find("HelpText").gameObject;
underline = gameObject.transform.Find("Underline").gameObject;
inputField = gameObject.GetComponent<TMP_InputField>();
InputValidator validator = gameObject.GetComponent<InputValidator>();
if (gameObject.GetComponent<InputValidator>() != null)
{
helpText.GetComponent<TMP_Text>().text = gameObject.GetComponent<InputValidator>().GetHelpText();
focusText.GetComponent<TMP_Text>().text = "Enter " + validator.GetValidatorTypeName();
placeholder.GetComponent<TMP_Text>().text = "Enter " + validator.GetValidatorTypeName() + "...";
if(validator.InputType == InputValidator.TypeOfInput.Port) // Because PORT has a default value and so there is text in the inputfield by start
{
isActive = true;
focusText.GetComponent<TMP_Text>().color = focusTextColor;
RectTransform focusTextRectTranform = focusText.GetComponent<RectTransform>();
focusTextRectTranform.anchoredPosition = new Vector2(focusTextRectTranform.anchoredPosition.x, focusTextEndPosition);
}
}
}
void Update()
{
if (!gameObject.GetComponent<TMP_InputField>().isFocused)
//UnFocus && isActive
if (!inputField.isFocused)
{
isFocused = false;
if (transitionEndDone)
if (inputField.text != "")
{
transitionEndDone = false;
isActive = true;
}
else
{
isActive = false;
}
}
#region transition
if (!transitionCycleStarted && isFocused) // Start Transition
{
StartTransition();
}
else if(transitionCycleStarted && !isFocused) // End Transition
{
EndTransition();
}
else if(!transitionCycleStarted && !isFocused) // Start cancelled by user
{
transitionStartTimePassed = 0;
transitionEndTimePassed = 0;
RectTransform markerRectTranform = marker.GetComponent<RectTransform>();
markerRectTranform.sizeDelta = new Vector2(markerRectTranform.rect.width, 0);
helpText.GetComponent<TMP_Text>().color = helpTextOriginColor;
if (!isActive)
focusText.GetComponent<TMP_Text>().color = focusTextOriginColor;
if (!transitionStartDone)
{
marker.SetActive(true);
focusText.SetActive(true);
helpText.SetActive(true);
}
else
{
marker.SetActive(false);
focusText.SetActive(false);
helpText.SetActive(false);
}
#endregion
}
public void OnPointerClick(PointerEventData eventData)
{
isFocused = true;
transitionStartDone = false;
if (!isFocused)
{
isFocused = true;
transitionCycleStarted = false;
}
}
#region transitions
void StartTransition()
{
transitionStartTimePassed += Time.deltaTime;
RectTransform markerRectTranform = marker.GetComponent<RectTransform>();
markerRectTranform.sizeDelta = new Vector2(markerRectTranform.rect.width, Mathf.Lerp(0, markerHeight, transitionStartTimePassed / transitionStartTime));
//Help Text / Focus text
helpText.GetComponent<TMP_Text>().color = Color.Lerp(helpTextOriginColor, helpTextColor, transitionStartTimePassed / transitionStartTime);
if (!isActive)
focusText.GetComponent<TMP_Text>().color = Color.Lerp(focusTextOriginColor, focusTextColor, transitionStartTimePassed / transitionStartTime);
RectTransform helpTextRectTranform = helpText.GetComponent<RectTransform>();
helpTextRectTranform.anchoredPosition = new Vector2(helpTextRectTranform.anchoredPosition.x, Mathf.Lerp(helpTextEndPosition / 2, helpTextEndPosition, transitionStartTimePassed / transitionStartTime));
RectTransform focusTextRectTranform = focusText.GetComponent<RectTransform>();
if (!isActive)
focusTextRectTranform.anchoredPosition = new Vector2(focusTextRectTranform.anchoredPosition.x, Mathf.Lerp(focusTextEndPosition / 2, focusTextEndPosition, transitionStartTimePassed / transitionStartTime));
if (transitionStartTimePassed >= transitionStartTime)
{
transitionCycleStarted = true;
transitionStartTimePassed = 0;
}
}
void EndTransition()
{
transitionEndTimePassed += Time.deltaTime;
RectTransform rectTranform = marker.GetComponent<RectTransform>();
rectTranform.sizeDelta = new Vector2(rectTranform.rect.width, Mathf.Lerp(markerHeight, 0, transitionEndTimePassed / transitionEndTime));
//Help Text / Focus text
helpText.GetComponent<TMP_Text>().color = Color.Lerp(focusTextColor, helpTextOriginColor, transitionEndTimePassed / transitionEndTime);
if(!isActive)
focusText.GetComponent<TMP_Text>().color = Color.Lerp(focusTextColor, focusTextOriginColor, transitionEndTimePassed / transitionEndTime);
RectTransform helpTextRectTranform = helpText.GetComponent<RectTransform>();
helpTextRectTranform.anchoredPosition = new Vector2(helpTextRectTranform.anchoredPosition.x, Mathf.Lerp(helpTextEndPosition, helpTextEndPosition / 2, transitionEndTimePassed / transitionEndTime));
if (!isActive)
{
RectTransform focusTextRectTranform = focusText.GetComponent<RectTransform>();
focusTextRectTranform.anchoredPosition = new Vector2(focusTextRectTranform.anchoredPosition.x, Mathf.Lerp(focusTextEndPosition, focusTextEndPosition / 2, transitionEndTimePassed / transitionEndTime));
}
if (transitionEndTimePassed >= transitionEndTime)
{
transitionCycleStarted = false;
transitionEndTimePassed = 0;
}
}
#endregion
}

View File

@@ -26,7 +26,16 @@ public class InputValidator : MonoBehaviour
if(InputType == TypeOfInput.Port)
{
inputField.contentType = TMP_InputField.ContentType.IntegerNumber;
inputField.text = "7777";
}else if(InputType == TypeOfInput.Username)
{
inputField.contentType = TMP_InputField.ContentType.Alphanumeric;
inputField.characterLimit = 25;
}
else if(InputType== TypeOfInput.IP)
{
inputField.contentType = TMP_InputField.ContentType.Alphanumeric;
}
inputField.onValueChanged.AddListener(delegate { ValueChangeCheck(); });
@@ -84,54 +93,54 @@ public class InputValidator : MonoBehaviour
if(InputType == TypeOfInput.Port)
{//0 - 65535
foreach (char c in inputField.text)
if (inputField.text[0] == '0')
{
if (!Char.IsDigit(c))
{
inputField.text = inputField.text.Remove(inputField.text.LastIndexOf(c));
}
else if (int.Parse(inputField.text) > 65535)
{
inputField.text = "65535";
}
inputField.text = "";
}
}
// USERNAME
if (InputType == TypeOfInput.Username)
{
foreach (char c in inputField.text)
if (int.Parse(inputField.text) > 65535)
{
if (!Char.IsLetter(c))
{
if (!Char.IsDigit(c))
{
inputField.text = inputField.text.Remove(inputField.text.LastIndexOf(c));
}
}
}
if(inputField.text.Length > 25)
{
string tempText = "";
for(int c = 0; c < inputField.text.Length; c++)
{
if(c < 25)
{
tempText += inputField.text[c];
}
}
inputField.text = tempText;
inputField.text = "65535";
}
}
}
public string GetHelpText()
{
string helpText = "no help text defined";
if(InputType == TypeOfInput.IP)
{
helpText = "Only numeric IP-Addresses";
}else if(InputType == TypeOfInput.Username)
{
helpText = "Only Numbers and Letters";
}else if(InputType == TypeOfInput.Port)
{
helpText = "Only Numbers (max: 65535)";
}
return helpText;
}
public string GetValidatorTypeName()
{
string name = "text";
if (InputType == TypeOfInput.IP)
{
name = "IP-Address";
}
else if (InputType == TypeOfInput.Username)
{
name = "Username";
}
else if (InputType == TypeOfInput.Port)
{
name = "Port";
}
return name;
}
}