public override void OnInspectorGUI() { base.OnInspectorGUI(); behaviorsListSize = movementBehaviors.arraySize; for (int i = 0; i < behaviorsListSize; i++) { SerializedProperty listElement = movementBehaviors.GetArrayElementAtIndex(i); AutonomousMovementComponent.MovementBehaviorTypes behavior = (AutonomousMovementComponent.MovementBehaviorTypes)listElement.enumValueIndex; HandleBehaviorInEditor(behavior); } serializedObject.ApplyModifiedProperties(); }
void HandleBehaviorInEditor(AutonomousMovementComponent.MovementBehaviorTypes behavior) { switch (behavior) { case AutonomousMovementComponent.MovementBehaviorTypes.Seek: SerializedProperty seekTarget = serializedObject.FindProperty("SeekTarget"); EditorGUILayout.PropertyField(seekTarget); SerializedProperty seekLocation = serializedObject.FindProperty("SeekLocation"); EditorGUILayout.PropertyField(seekLocation); break; case AutonomousMovementComponent.MovementBehaviorTypes.Flee: SerializedProperty fleeTarget = serializedObject.FindProperty("FleeTarget"); EditorGUILayout.PropertyField(fleeTarget); break; case AutonomousMovementComponent.MovementBehaviorTypes.Arrive: SerializedProperty arriveTarget = serializedObject.FindProperty("ArriveTarget"); EditorGUILayout.PropertyField(arriveTarget); SerializedProperty arriveLocation = serializedObject.FindProperty("ArriveLocation"); EditorGUILayout.PropertyField(arriveLocation); break; case AutonomousMovementComponent.MovementBehaviorTypes.Pursuit: SerializedProperty pursuitTarget = serializedObject.FindProperty("PursuitTarget"); EditorGUILayout.PropertyField(pursuitTarget); break; case AutonomousMovementComponent.MovementBehaviorTypes.Evade: SerializedProperty evadeTarget = serializedObject.FindProperty("EvadeTarget"); EditorGUILayout.PropertyField(evadeTarget); break; case AutonomousMovementComponent.MovementBehaviorTypes.Wander: SerializedProperty wanderDistance = serializedObject.FindProperty("wanderDistance"); SerializedProperty wanderRadius = serializedObject.FindProperty("wanderRadius"); SerializedProperty wanderJitter = serializedObject.FindProperty("wanderJitter"); EditorGUILayout.PropertyField(wanderDistance); EditorGUILayout.PropertyField(wanderRadius); EditorGUILayout.PropertyField(wanderJitter); break; case AutonomousMovementComponent.MovementBehaviorTypes.ObstacleAvoidance: break; case AutonomousMovementComponent.MovementBehaviorTypes.WallAvoidance: break; case AutonomousMovementComponent.MovementBehaviorTypes.Interpose: SerializedProperty primaryTarget = serializedObject.FindProperty("PrimaryInterposeTarget"); SerializedProperty secondaryTarget = serializedObject.FindProperty("SecondaryInterposeTarget"); EditorGUILayout.PropertyField(primaryTarget); EditorGUILayout.PropertyField(secondaryTarget); break; case AutonomousMovementComponent.MovementBehaviorTypes.Hide: SerializedProperty hideTarget = serializedObject.FindProperty("HideTarget"); EditorGUILayout.PropertyField(hideTarget); break; case AutonomousMovementComponent.MovementBehaviorTypes.PathFollowing: SerializedProperty pathNodes = serializedObject.FindProperty("PathNodes"); EditorGUILayout.PropertyField(pathNodes); break; case AutonomousMovementComponent.MovementBehaviorTypes.OffsetPursuit: SerializedProperty offsetPursuitTarget = serializedObject.FindProperty("OffsetPursuitTarget"); EditorGUILayout.PropertyField(offsetPursuitTarget); EditorGUI.BeginChangeCheck(); Vector3 pursuitOffset = EditorGUILayout.Vector3Field("Pursuit Offset:", autonomousMovementComponent.PursuitOffset); if (EditorGUI.EndChangeCheck()) { autonomousMovementComponent.PursuitOffset = pursuitOffset; } break; case AutonomousMovementComponent.MovementBehaviorTypes.Separation: SerializedProperty separationRadius = serializedObject.FindProperty("SeparationRadius"); EditorGUILayout.PropertyField(separationRadius); break; case AutonomousMovementComponent.MovementBehaviorTypes.Flocking: break; case AutonomousMovementComponent.MovementBehaviorTypes.Cohesion: SerializedProperty cohesionRadius = serializedObject.FindProperty("CohesionRadius"); EditorGUILayout.PropertyField(cohesionRadius); break; case AutonomousMovementComponent.MovementBehaviorTypes.Alignment: SerializedProperty alignmentRadius = serializedObject.FindProperty("AlignmentRadius"); EditorGUILayout.PropertyField(alignmentRadius); break; default: break; } }