public ButtonComponent( ComponentGroup componentGroup, Vector2 position, Vector2 size, string text, MultiStateSprite bgSprite, Font font, int fontSize ) : this( componentGroup, position, size, text, bgSprite, font, Color.white, fontSize ) { }
public ButtonComponent( ComponentGroup componentGroup, Vector2 position, Vector2 size, string text, MultiStateSprite bgSprite, Font font, Color textColor, int fontSize ) : base(componentGroup, position, size) { _bgSprite = bgSprite; _interactable = true; // Create background image _image = GameObject.AddComponent <Image>(); _image.sprite = bgSprite.Neutral; _image.type = Image.Type.Sliced; // Create the text component in the button var textObject = new GameObject(); textObject.AddComponent <RectTransform>().sizeDelta = size; _text = textObject.AddComponent <Text>(); _text.text = text; _text.font = font; _text.fontSize = fontSize; _text.alignment = TextAnchor.MiddleCenter; _text.color = textColor; // Set the transform parent to the ButtonComponent gameObject textObject.transform.SetParent(GameObject.transform, false); Object.DontDestroyOnLoad(textObject); var eventTrigger = GameObject.AddComponent <EventTrigger>(); _isMouseDown = false; _isHover = false; AddEventTrigger(eventTrigger, EventTriggerType.PointerEnter, data => { _isHover = true; if (_interactable) { _image.sprite = bgSprite.Hover; } }); AddEventTrigger(eventTrigger, EventTriggerType.PointerExit, data => { _isHover = false; if (_interactable && !_isMouseDown) { _image.sprite = bgSprite.Neutral; } }); AddEventTrigger(eventTrigger, EventTriggerType.PointerDown, data => { _isMouseDown = true; if (_interactable) { _image.sprite = bgSprite.Active; } }); AddEventTrigger(eventTrigger, EventTriggerType.PointerUp, data => { _isMouseDown = false; if (_interactable) { if (_isHover) { _image.sprite = bgSprite.Hover; _onPress?.Invoke(); } else { _image.sprite = bgSprite.Neutral; } } }); }
private HiddenInputComponent( ComponentGroup componentGroup, Vector2 position, Vector2 size, string defaultValue, string placeholderText, MultiStateSprite bgSprite, Font font, int fontSize, InputField.CharacterValidation characterValidation = InputField.CharacterValidation.None ) : base( componentGroup, position, size, defaultValue, placeholderText, bgSprite, font, fontSize, characterValidation ) { _isHidden = true; _currentInput = defaultValue; InputField.text = HiddenText; SetTextAlpha(NotInteractableOpacity); var eventTrigger = GameObject.GetComponent <EventTrigger>(); eventTrigger.triggers.Clear(); AddEventTrigger(eventTrigger, EventTriggerType.PointerEnter, data => { if (Interactable) { Image.sprite = bgSprite.Hover; } }); AddEventTrigger(eventTrigger, EventTriggerType.PointerExit, data => { if (Interactable) { Image.sprite = bgSprite.Neutral; if (!_isHidden) { _currentInput = InputField.text; InputField.text = HiddenText; SetTextAlpha(NotInteractableOpacity); } _isHidden = true; } }); AddEventTrigger(eventTrigger, EventTriggerType.PointerDown, data => { if (Interactable) { Image.sprite = bgSprite.Active; InputField.text = _currentInput; SetTextAlpha(1f); _isHidden = false; } }); }
public InputComponent( ComponentGroup componentGroup, Vector2 position, Vector2 size, string defaultValue, string placeholderText, MultiStateSprite bgSprite, Font font, int fontSize, InputField.CharacterValidation characterValidation = InputField.CharacterValidation.None, int characterLimit = 0 ) : base(componentGroup, position, size) { _bgSprite = bgSprite; Interactable = true; // Create background image Image = GameObject.AddComponent <Image>(); Image.sprite = bgSprite.Neutral; Image.type = Image.Type.Sliced; var placeholder = new GameObject(); placeholder.AddComponent <RectTransform>().sizeDelta = size; var placeholderTextComponent = placeholder.AddComponent <Text>(); placeholderTextComponent.text = placeholderText; placeholderTextComponent.font = font; placeholderTextComponent.fontSize = fontSize; placeholderTextComponent.alignment = TextAnchor.MiddleCenter; // Make the color white with opacity so it is clearly different from inputted text placeholderTextComponent.color = new Color(1f, 1f, 1f, 0.5f); // Set the transform parent to the InputComponent gameObject placeholder.transform.SetParent(GameObject.transform, false); Object.DontDestroyOnLoad(placeholder); var textObject = new GameObject(); textObject.AddComponent <RectTransform>().sizeDelta = size - new Vector2(TextMargin * 2f, 0f); Text = textObject.AddComponent <Text>(); Text.text = defaultValue; Text.font = font; Text.fontSize = fontSize; Text.alignment = TextAnchor.MiddleCenter; Text.color = Color.white; // Set the transform parent to the InputComponent gameObject textObject.transform.SetParent(GameObject.transform, false); Object.DontDestroyOnLoad(textObject); // Create the actual inputField component InputField = GameObject.AddComponent <InputField>(); InputField.targetGraphic = Image; InputField.placeholder = placeholderTextComponent; InputField.textComponent = Text; InputField.text = defaultValue; InputField.characterValidation = characterValidation; InputField.characterLimit = characterLimit; InputField.shouldActivateOnSelect = false; InputField.onValueChanged.AddListener(value => { _onChange?.Invoke(value); }); var eventTrigger = GameObject.AddComponent <EventTrigger>(); AddEventTrigger(eventTrigger, EventTriggerType.PointerEnter, data => { if (Interactable) { Image.sprite = bgSprite.Hover; } }); AddEventTrigger(eventTrigger, EventTriggerType.PointerExit, data => { if (Interactable) { Image.sprite = bgSprite.Neutral; } }); AddEventTrigger(eventTrigger, EventTriggerType.PointerDown, data => { if (Interactable) { Image.sprite = bgSprite.Active; } }); }