public override void OnInspectorGUI() { IntegrationFlockingBehaviour integration = (IntegrationFlockingBehaviour)target; if (integration.behavious == null || integration.behavious.Length == 0) { EditorGUILayout.HelpBox("No Behaviours Array", MessageType.Warning); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); } else { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Number", GUILayout.MinWidth(60f)); GUILayout.MaxWidth(60f); EditorGUILayout.LabelField("Behaviours", GUILayout.MinWidth(60f)); EditorGUILayout.LabelField("Scalars", GUILayout.MinWidth(60f)); GUILayout.MaxWidth(60f); EditorGUILayout.EndHorizontal(); EditorGUI.BeginChangeCheck(); for (int i = 0; i < integration.behavious.Length; i++) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(i.ToString(), GUILayout.MinWidth(60f)); GUILayout.MaxWidth(60f); integration.behavious[i] = (Behaviour)EditorGUILayout.ObjectField( integration.behavious[i], typeof(Behaviour), false, GUILayout.MinWidth(60f)); integration.scalars[i] = EditorGUILayout.FloatField( integration.scalars[i], GUILayout.MinWidth(60f), GUILayout.MaxWidth(60f)); EditorGUILayout.EndHorizontal(); } if (EditorGUI.EndChangeCheck()) { EditorUtility.SetDirty(integration); } } EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Add Behavior")) { AddBehaviour(integration); EditorUtility.SetDirty(integration); } if (integration.behavious != null && integration.behavious.Length > 0) { if (GUILayout.Button("Remove Behaviour")) { RemoveBehaviour(integration); EditorUtility.SetDirty(integration); } } EditorGUILayout.EndHorizontal(); }
void AddBehaviour(IntegrationFlockingBehaviour integration) { int temp = (integration.behavious != null) ? integration.behavious.Length : 0; Behaviour[] newBehavious = new Behaviour[temp + 1]; float[] newScalars = new float[temp + 1]; for (int i = 0; i < temp; i++) { newBehavious[i] = integration.behavious[i]; newScalars[i] = integration.scalars[i]; } newScalars[temp] = 1f; integration.behavious = newBehavious; integration.scalars = newScalars; }
void RemoveBehaviour(IntegrationFlockingBehaviour integration) { int temp = integration.behavious.Length; if (temp == 1) { integration.behavious = null; integration.scalars = null; return; } Behaviour[] newBehavious = new Behaviour[temp - 1]; float[] newScalars = new float[temp - 1]; for (int i = 0; i < temp - 1; i++) { newBehavious[i] = integration.behavious[i]; newScalars[i] = integration.scalars[i]; } integration.behavious = newBehavious; integration.scalars = newScalars; }