private void RemoveBehavior(CompositBehaviour cb)
    {
        int oldCount = cb.behaviors.Length;

        if (oldCount == 1)
        {
            cb.behaviors = null;
            cb.weights   = null;
            return;
        }

        else
        {
            FlockBehaviour[] newBehaviors = new FlockBehaviour[oldCount - 1];
            float[]          newWeights   = new float[oldCount - 1];

            for (int i = 0; i < oldCount - 1; i++)
            {
                newBehaviors[i] = cb.behaviors[i];
                newWeights[i]   = cb.weights[i];
            }
            cb.behaviors = newBehaviors;
            cb.weights   = newWeights;
        }
    }
    public override void OnInspectorGUI()
    {
        CompositBehaviour cb = (CompositBehaviour)target;

        if (cb.behaviors == null || cb.behaviors.Length == 0)
        {
            EditorGUILayout.HelpBox("No Behaviors in array.", MessageType.Warning);
        }

        else
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Number", GUILayout.MinWidth(60f), GUILayout.MaxWidth(60f));
            EditorGUILayout.LabelField("Behaviors", GUILayout.MinWidth(60f));
            EditorGUILayout.LabelField("Weights", GUILayout.MinWidth(60f), GUILayout.MaxWidth(60f));
            EditorGUILayout.EndHorizontal();

            EditorGUI.BeginChangeCheck();

            for (int i = 0; i < cb.behaviors.Length; i++)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField(i.ToString(), GUILayout.MinWidth(60f), GUILayout.MaxWidth(60f));
                cb.behaviors[i] = (FlockBehaviour)EditorGUILayout.ObjectField(cb.behaviors[i], typeof(FlockBehaviour), false, GUILayout.MinWidth(60f));
                cb.weights[i]   = EditorGUILayout.FloatField(cb.weights[i], GUILayout.MinWidth(60f), GUILayout.MaxWidth(60f));
                EditorGUILayout.EndHorizontal();
            }

            if (EditorGUI.EndChangeCheck())
            {
                EditorUtility.SetDirty(cb);
            }
        }

        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("Add Behavior"))
        {
            AddBehavior(cb);
            EditorUtility.SetDirty(cb);
        }

        EditorGUILayout.EndHorizontal();



        if (cb.behaviors != null && cb.behaviors.Length > 0)
        {
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("Remove Behavior"))
            {
                RemoveBehavior(cb);
                EditorUtility.SetDirty(cb);
            }
            EditorGUILayout.EndHorizontal();
        }
    }
    private void AddBehavior(CompositBehaviour cb)
    {
        int oldCount = (cb.behaviors != null) ? cb.behaviors.Length : 0;

        FlockBehaviour[] newBehaviors = new FlockBehaviour[oldCount + 1];
        float[]          newWeights   = new float[oldCount + 1];

        for (int i = 0; i < oldCount; i++)
        {
            newBehaviors[i] = cb.behaviors[i];
            newWeights[i]   = cb.weights[i];
        }

        newWeights[oldCount] = 1f;
        cb.behaviors         = newBehaviors;
        cb.weights           = newWeights;
    }