protected override void OnTailTransformsCountChange()
        {
            base.OnTailTransformsCountChange();

            FTail_AnimatorBlending blending = target as FTail_AnimatorBlending;

            blending.SelectiveRotsNotAnimated = new System.Collections.Generic.List <bool>();
            for (int i = 0; i < blending.TailTransforms.Count; i++)
            {
                blending.SelectiveRotsNotAnimated.Add(true);
            }
        }
        protected override void DrawSpeedSliders(FTail_AnimatorBase tail)
        {
            GUILayout.BeginVertical(FEditor_Styles.LNavy);
            EditorGUILayout.HelpBox("Elasticity Behaviour Parameters", MessageType.None);

            EditorGUILayout.Slider(sp_posSpeeds, 0f, 60f);
            EditorGUILayout.Slider(sp_rotSpeeds, 0f, 60f);

            GUILayout.EndVertical();

            // V1.2
            FTail_Animator         tailSimple   = tail as FTail_Animator;
            FTail_AnimatorBlending tailBlending = tail as FTail_AnimatorBlending;

            if (!tailBlending)
            {
                if (tailSimple != null)
                {
                    EditorGUILayout.BeginVertical(FEditor_Styles.GrayBackground);

                    GUILayout.BeginHorizontal(FEditor_Styles.LBlueBackground);
                    EditorGUILayout.HelpBox("Use late update order for animated objects", MessageType.Info);
                    GUILayout.EndHorizontal();
                    EditorGUILayout.PropertyField(sp_upClock, new GUIContent("Update Order"));
                    EditorGUIUtility.labelWidth = 147;
                    EditorGUILayout.PropertyField(sp_discTransf);
                    EditorGUILayout.PropertyField(sp_queue);
                    EditorGUIUtility.labelWidth = 0;

                    EditorGUILayout.EndVertical();
                }
            }

            GUILayout.Space(1f);

            EditorGUIUtility.labelWidth = 0;
        }
        protected override void DrawSpeedSliders(FTail_AnimatorBase tail)
        {
            base.DrawSpeedSliders(tail);

            EditorGUILayout.BeginVertical(FEditor_Styles.GreenBackground);

            bool connected = false;

            if (!Application.isPlaying)
            {
                if (tail.FullCorrection && tail.AnimateCorrections && tail.RefreshHelpers)
                {
                    connected = true;
                }
            }
            else
            if (tail.FullCorrection && tail.AnimateCorrections)
            {
                connected = true;
            }


            Color preCol = GUI.color;

            if (connected)
            {
                GUI.color = new Color(0.1f, 1f, 0.325f, 0.9f);
            }

            if (GUILayout.Button(new GUIContent("Connect with animator", "This button changing some variables to make component cooperate highly with animator's animation. VARIABLES WHICH ARE CHANGED: RefreshHelpers, FullCorrection, AnimateCorrection"), new GUILayoutOption[1] {
                GUILayout.MaxHeight(18)
            }))
            {
                SwitchConnectWithAnimator(!connected);
            }

            GUI.color = preCol;

            EditorGUILayout.HelpBox("Blending and Animator Help Parameters", MessageType.None);

            FTail_AnimatorBlending tailBlending = (FTail_AnimatorBlending)target;

            EditorGUILayout.Slider(sp_blendOrig, 0f, 1f);

            if (tailBlending.BlendToOriginal > 0f && tailBlending.BlendToOriginal < 1f)
            {
                if (tailBlending.TailTransforms.Count > 0)
                {
                    float height = 16f;
                    Rect  rect   = GUILayoutUtility.GetRect(GUILayoutUtility.GetLastRect().width, height, "TextField");

                    float step = rect.width / (float)tailBlending.TailTransforms.Count;

                    for (int i = 0; i < tailBlending.TailTransforms.Count; i++)
                    {
                        float y = 1 - Mathf.InverseLerp(tailBlending.TailTransforms.Count / 2, tailBlending.TailTransforms.Count + 1, i);

                        float blendValue = 1f;

                        if (tailBlending.BlendChainValue < 1f)
                        {
                            blendValue = Mathf.Clamp(tailBlending.BlendChainValue * (float)tailBlending.TailTransforms.Count - i, 0f, 1f);
                        }

                        EditorGUI.DrawRect(new Rect(rect.x + 2 + i * step, rect.y + (1 - y) * ((height - 1) / 2), step - 2f, height * y), new Color(0.9f, 0.9f, 0.9f, blendValue * 0.78f));
                    }

                    var centered = GUI.skin.GetStyle("Label");
                    centered.alignment = TextAnchor.UpperCenter;
                    GUI.Label(rect, Mathf.Round(tailBlending.BlendChainValue * 100) + "% Source Animation Chain Blend", centered);
                }

                EditorGUILayout.Slider(sp_blendChain, 0f, 1f);
            }
            else
            {
                GUILayout.BeginHorizontal();
                EditorGUILayout.HelpBox("Blend with original for chain blend", MessageType.None);
                GUILayout.EndHorizontal();
            }

            EditorGUIUtility.labelWidth = 147;
            EditorGUILayout.PropertyField(sp_posNotAnim);
            EditorGUILayout.PropertyField(sp_queue);
            EditorGUIUtility.labelWidth = 0;

            EditorGUILayout.EndVertical();
            GUILayout.Space(4f);
        }
        protected override void DrawSpeedSliders(FTail_AnimatorBase tail)
        {
            base.DrawSpeedSliders(tail);

            EditorGUILayout.BeginVertical(FEditor_Styles.GreenBackground);

            bool connected = false;

            if (!Application.isPlaying)
            {
                if (tail.FullCorrection && tail.AnimateCorrections && tail.RefreshHelpers)
                {
                    connected = true;
                }
            }
            else
            if (tail.FullCorrection && tail.AnimateCorrections)
            {
                connected = true;
            }

            string preStr = "►";

            if (drawAnimatorOptions)
            {
                preStr = "▼";
            }
            GUILayout.BeginHorizontal(FEditor_Styles.Style(new Color32(255, 225, 255, 35)));
            if (GUILayout.Button(preStr + " Blending and Animator Help Parameters", EditorStyles.miniLabel))
            {
                drawAnimatorOptions = !drawAnimatorOptions;
            }
            GUILayout.EndHorizontal();

            if (drawAnimatorOptions)
            {
                Color preCol = GUI.color;
                if (connected)
                {
                    GUI.color = new Color(0.1f, 1f, 0.325f, 0.9f);
                }

                if (GUILayout.Button(new GUIContent("Connect with animator", "This button changing some variables to make component cooperate highly with animator's animation. VARIABLES WHICH ARE CHANGED: RefreshHelpers, FullCorrection, AnimateCorrection"), new GUILayoutOption[1] {
                    GUILayout.MaxHeight(18)
                }))
                {
                    SwitchConnectWithAnimator(!connected);

                    foreach (var s in Selection.gameObjects)
                    {
                        if (s == tail.gameObject)
                        {
                            continue;
                        }
                        FTail_AnimatorBlending b = s.GetComponent <FTail_AnimatorBlending>();
                        if (b)
                        {
                            bool enabledIs = false;
                            if (b.FullCorrection && b.AnimateCorrections)
                            {
                                enabledIs = true;
                            }

                            if (!enabledIs)
                            {
                                b.FullCorrection     = true;
                                b.AnimateCorrections = true;
                                b.RefreshHelpers     = true;
                            }
                            else
                            {
                                b.FullCorrection     = false;
                                b.AnimateCorrections = false;
                            }
                        }
                    }
                }

                GUI.color = preCol;

                FTail_AnimatorBlending tailBlending = (FTail_AnimatorBlending)target;
                EditorGUILayout.Slider(sp_blendOrig, 0f, 1f);

                if (tailBlending.BlendToOriginal > 0f && tailBlending.BlendToOriginal < 1f)
                {
                    if (tailBlending.TailTransforms.Count > 0)
                    {
                        float height = 16f;
                        Rect  rect   = GUILayoutUtility.GetRect(GUILayoutUtility.GetLastRect().width, height, "TextField");

                        float step = rect.width / (float)tailBlending.TailTransforms.Count;

                        for (int i = 0; i < tailBlending.TailTransforms.Count; i++)
                        {
                            float y = 1 - Mathf.InverseLerp(tailBlending.TailTransforms.Count / 2, tailBlending.TailTransforms.Count + 1, i);

                            float blendValue = 1f;

                            if (tailBlending.BlendChainValue < 1f)
                            {
                                blendValue = Mathf.Clamp(tailBlending.BlendChainValue * (float)tailBlending.TailTransforms.Count - i, 0f, 1f);
                            }

                            EditorGUI.DrawRect(new Rect(rect.x + 2 + i * step, rect.y + (1 - y) * ((height - 1) / 2), step - 2f, height * y), new Color(0.9f, 0.9f, 0.9f, blendValue * 0.78f));
                        }

                        var centered = GUI.skin.GetStyle("Label");
                        centered.alignment = TextAnchor.UpperCenter;
                        GUI.Label(rect, Mathf.Round(tailBlending.BlendChainValue * 100) + "% Source Animation Chain Blend", centered);
                    }

                    EditorGUILayout.Slider(sp_blendChain, 0f, 1f);
                }
                else
                {
                    GUILayout.BeginHorizontal();
                    EditorGUILayout.HelpBox("Blend with original for chain blend", MessageType.None);
                    GUILayout.EndHorizontal();
                }

                EditorGUIUtility.labelWidth = 147;
                EditorGUILayout.PropertyField(sp_posNotAnim);
                EditorGUILayout.PropertyField(sp_rotNotAnim);
                EditorGUIUtility.labelWidth = 0;

                if (tailBlending.RotationsNotAnimated)
                {
                    if (tailBlending.SelectiveRotsNotAnimated.Count == 0)
                    {
                        EditorGUILayout.HelpBox("Hit 'Auto' for this option to work", MessageType.Info);
                    }
                    else
                    {
                        EditorGUI.indentLevel++;
                        EditorGUILayout.PropertyField(sp_rotsSelective, true);
                        EditorGUI.indentLevel--;
                    }
                }

                GUILayout.Space(4f);

                EditorGUIUtility.labelWidth = 147;
                EditorGUILayout.PropertyField(sp_queue);
                EditorGUIUtility.labelWidth = 0;
            }

            EditorGUILayout.EndVertical();
            GUILayout.Space(4f);
        }
        protected override void DrawSpeedSliders(FTail_AnimatorBase tail)
        {
            GUILayout.BeginVertical(FEditor_Styles.LNavy);
            //EditorGUILayout.HelpBox("Elasticity Behaviour Parameters", MessageType.None);

            string preStr = "►";

            if (drawAnimOptions)
            {
                preStr = "▼";
            }
            GUILayout.BeginHorizontal(FEditor_Styles.Style(new Color32(255, 225, 255, 35)));
            //GUILayout.BeginHorizontal(FEditor_Styles.Style(new Color(0.8f,0.8f,0.8f, 0.45f) ));
            if (GUILayout.Button(preStr + " Animation & Elasticity Parameters", EditorStyles.miniLabel))
            {
                drawAnimOptions = !drawAnimOptions;
            }
            GUILayout.EndHorizontal();

            if (drawAnimOptions)
            {
                Color preCol = GUI.color;

                GUIStyle smallStyle = new GUIStyle(EditorStyles.miniLabel)
                {
                    fontStyle = FontStyle.Italic
                };
                GUI.color = new Color(1f, 1f, 1f, 0.7f);


                EditorGUILayout.BeginVertical();

                EditorGUILayout.BeginHorizontal();
                GUILayout.Label("                                       Smooth", smallStyle);
                GUILayout.FlexibleSpace();
                GUILayout.Label("Rapid                  ", smallStyle);
                EditorGUILayout.EndHorizontal();
                GUILayout.Space(-8f);

                EditorGUIUtility.labelWidth = 115;
                GUI.color = preCol;
                //GUI.color = new Color(0.93f, 1f, 0.93f, 0.9f);
                EditorGUILayout.PropertyField(sp_posSpeeds);

                EditorGUILayout.PropertyField(sp_rotSpeeds);

                GUILayout.Space(2f);
                EditorGUILayout.EndVertical();


                FEditor_Styles.DrawUILine(new Color(0.5f, 0.5f, 0.5f, 0.25f));
                //GUILayout.Space(6f);


                //if ( tail.UseCollision ) if ( tail.LookUpMethod == FTail_AnimatorBase.FELookUpMethod.Parental ) if (tail.Springiness > 0.1f) GUI.color = new Color(0.95f, 0.85f, 0.8f, 0.9f);

                GUI.color = new Color(1f, 1f, 1f, 0.7f);
                EditorGUILayout.BeginVertical();

                EditorGUILayout.BeginHorizontal();
                GUILayout.Label("                                       Calm", smallStyle);
                GUILayout.FlexibleSpace();
                GUILayout.Label("Bouncy                  ", smallStyle);
                EditorGUILayout.EndHorizontal();
                GUILayout.Space(-8f);
                GUI.color = preCol;
                EditorGUILayout.PropertyField(sp_Springiness);
                GUI.color = new Color(1f, 1f, 1f, 0.7f);
                EditorGUILayout.EndVertical();

                EditorGUILayout.BeginVertical();

                EditorGUILayout.BeginHorizontal();
                GUILayout.Label("                                       Stiff", smallStyle);
                GUILayout.FlexibleSpace();
                GUILayout.Label("Wavy                  ", smallStyle);
                EditorGUILayout.EndHorizontal();
                GUI.color = preCol;
                GUILayout.Space(-8f);
                EditorGUILayout.EndVertical();

                if (tail.UseCollision)
                {
                    if (tail.LookUpMethod == FTail_AnimatorBase.FELookUpMethod.Parental)
                    {
                        if (tail.Sensitivity < 0.485f || tail.Sensitivity > 0.75f)
                        {
                            GUI.color = new Color(0.95f, 0.85f, 0.8f, 0.9f);
                        }
                    }
                }
                EditorGUILayout.PropertyField(sp_Sensitivity);
                GUI.color = preCol;

                FEditor_Styles.DrawUILine(new Color(0.5f, 0.5f, 0.5f, 0.25f));

                if ((tail.Springiness > 0.5f && tail.MaxStretching > 0.3f))
                {
                    GUI.color = new Color(0.8f, 1f, 0.8f, 0.9f);
                }
                else
                if ((tail.AngleLimit < 90 && tail.MaxStretching > 0.2f))
                {
                    GUI.color = new Color(1f, 0.8f, 0.8f, 0.9f);
                }

                EditorGUILayout.PropertyField(sp_maxDist);
                GUI.color = preCol;
                //if (tail.AngleLimit >= 180) GUI.color = preCol * new Color(1f, 1f, 1f, 0.6f);
                EditorGUILayout.PropertyField(sp_AngleLimit);
                if (tail.AngleLimit < 90)
                {
                    //EditorGUI.indentLevel++;
                    if (tail.AngleLimitAxis == Vector3.zero)
                    {
                        GUI.color = preCol * new Color(1f, 1f, 1f, 0.6f);
                    }
                    EditorGUILayout.PropertyField(sp_AngleLimitAxis);
                    GUI.color = preCol;

                    if (tail.AngleLimitAxis != Vector3.zero)
                    {
                        if (tail.LimitAxisRange.x == tail.LimitAxisRange.y)
                        {
                            GUI.color = preCol * new Color(1f, 1f, 1f, 0.6f);
                        }
                        EditorGUILayout.MinMaxSlider(new GUIContent("Range", "If you want limit axes symmetrically leave this parameter unchanged, if you want limit one direction of axis more than reversed, tweak this parameter"),
                                                     ref tail.LimitAxisRange.x, ref tail.LimitAxisRange.y, -90f, 90f);
                        //EditorGUILayout.PropertyField(sp_AngleLimitAxisTo);
                        GUI.color = preCol;
                    }

                    EditorGUILayout.PropertyField(sp_LimitSmoothing);

                    //EditorGUI.indentLevel--;
                }

                GUI.color = preCol;

                EditorGUILayout.PropertyField(sp_MotionInfluence);

                EditorGUIUtility.labelWidth = 0;
                GUILayout.Space(5f);

                // V1.2
                FTail_Animator         tailSimple   = tail as FTail_Animator;
                FTail_AnimatorBlending tailBlending = tail as FTail_AnimatorBlending;
                if (!tailBlending)
                {
                    if (tailSimple != null)
                    {
                        EditorGUILayout.BeginVertical(FEditor_Styles.GrayBackground);

                        //GUILayout.BeginHorizontal(FEditor_Styles.LBlueBackground);
                        //if (!Application.isPlaying)
                        //    EditorGUILayout.HelpBox("Use late update order for animated objects", MessageType.Info);
                        //else
                        //EditorGUILayout.HelpBox("  Use late update order for animated objects", MessageType.None);

                        //GUILayout.EndHorizontal();
                        GUILayout.BeginHorizontal(FEditor_Styles.LBlueBackground);

                        EditorGUIUtility.labelWidth = 97;
                        EditorGUILayout.PropertyField(sp_upClock, new GUIContent("Update Order"));
                        EditorGUIUtility.labelWidth = 0;

                        if (!Application.isPlaying)
                        {
                            if (tail.UpdateClock != EFUpdateClock.LateUpdate)
                            {
                                GUILayout.FlexibleSpace();
                                GUI.color = new Color(1f, 1f, 1f, 0.7f);
                                float width = (float)typeof(EditorGUIUtility).GetProperty("contextWidth", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static).GetValue(null, null);

                                if (width > 375)
                                {
                                    GUILayout.Label(new GUIContent("Use LateUpdate for animated objects", "Use LateUpdate order for animated objects (animated by unity Animator or Animation components) or use FTail_AnimatorBlending component instead of FTail_Animator"), smallStyle);
                                }
                                else if (width > 310)
                                {
                                    GUILayout.Label(new GUIContent("Use LateUpdate for...", "Use LateUpdate order for animated objects (animated by unity Animator or Animation components) or use FTail_AnimatorBlending component instead of FTail_Animator"), smallStyle);
                                }
                                else
                                {
                                    GUILayout.Label(new GUIContent("Put Cursor Here", "(Tooltip) Use LateUpdate order for animated objects (animated by unity Animator or Animation components) or use FTail_AnimatorBlending component instead of FTail_Animator"), smallStyle);
                                }

                                GUI.color = preCol;
                            }
                        }

                        GUILayout.EndHorizontal();

                        if (!Application.isPlaying)
                        {
                            EditorGUIUtility.labelWidth = 147;
                            EditorGUILayout.PropertyField(sp_queue);
                        }
                        EditorGUIUtility.labelWidth = 0;

                        EditorGUILayout.EndVertical();
                    }
                }

                GUILayout.Space(1f);

                EditorGUIUtility.labelWidth = 0;
            }

            GUILayout.EndVertical();
        }