private void UpdateText(TextMeshPro text, StratusPopUpTransformText data)
        {
            Vector3 position = data.transform.position + data.offset;

            text.transform.position = position;
            text.transform.forward  = position - outputCamera.transform.position;
        }
 //------------------------------------------------------------------------/
 // Virtual
 //------------------------------------------------------------------------/
 protected virtual void OnRemoveAction(TextMeshPro instance, StratusPopUpTransformText parameters)
 {
     if (parameters.fadeOutDuration > 0.0f)
     {
         instance.CrossFadeAlpha(0f, parameters.fadeOutDuration, true);
     }
 }
        //------------------------------------------------------------------------/
        // Procedures
        //------------------------------------------------------------------------/
        private void OnInstantiate(TextMeshPro instance, StratusPopUpTransformText parameters)
        {
            //Vector3 screenPosition = Camera.main.WorldToScreenPoint(parameters.transform.position);
            if (debug)
            {
                this.Log($"Instantiating text {parameters}");
            }

            UpdateText(instance, parameters);
            instance.text     = parameters.text ?? string.Empty;
            instance.alpha    = 1f;
            instance.richText = parameters.richText;
            instance.color    = parameters.color;

            instance.fontSize = parameters.fontSize > 0 ? parameters.fontSize : StratusPopUpTransformText.defaultFontSize;
            if (parameters.duration <= 0.0f)
            {
                this.LogWarning($"Invalid duration of {parameters.duration} set. Using default of {StratusPopUpTransformText.defaultDuration}");
                parameters.duration = StratusPopUpTransformText.defaultDuration;
            }
            parameters.instanced = true;

            // Remove after a set amount of time
            Action removeAction = () =>
            {
                OnRemoveAction(instance, parameters);
                OnTextRemoved(parameters);
            };

            Invoke(removeAction, parameters.duration + parameters.fadeOutDuration);
        }
 private void OnValidate()
 {
     if (parameters == null)
     {
         parameters = new StratusPopUpTransformText(this.transform, this.name);
     }
 }
        private void OnTextRemoved(StratusPopUpTransformText obj)
        {
            bool removed = textObjectPool.Remove(obj);

            obj.instanced = !removed;
            if (!removed)
            {
                this.LogError($"Failed to remove {obj}");
            }
        }
 public InstantiateEvent(StratusPopUpTransformText popUpText)
 {
     this.popUpText = popUpText;
 }
 //------------------------------------------------------------------------/
 // Static Methods
 //------------------------------------------------------------------------/
 public static void Instantiate(StratusPopUpTransformText popUpText)
 {
     StratusScene.Dispatch <StratusPopUpTransformText.InstantiateEvent>(new StratusPopUpTransformText.InstantiateEvent(popUpText));
 }
 private void OnTextAdded(StratusPopUpTransformText obj)
 {
     textObjectPool.Instantiate(obj);
 }