/// <inheritdoc />
        public override void OnInspectorGUI()
        {
            serializedObject.Update();

            //
            // SECTION: Main Settings
            //
            _drawMainSettings.value = DrawSectionGUI(_drawMainSettings.value, "Main Settings", () =>
            {
                EditorGUILayout.PropertyField(Icon);
                EditorGUILayout.PropertyField(LocaleName);
                EditorGUILayout.PropertyField(StatisticsPrefab);
            });

            //
            // SECTION: Resources Settings
            //
            _drawResourcesSettings.value = DrawSectionGUI(_drawResourcesSettings.value, "Resources Settings", () =>
            {
                EditorGUILayout.PropertyField(ModelPrefab);
                EditorGUILayout.PropertyField(HandsPrefab);
            });

            //
            // SECTION: Animations Settings
            //
            _drawAnimationSettings.value = DrawSectionGUI(_drawAnimationSettings.value, "Animation Settings", () =>
            {
                DefaultAnimatorController.intValue = EditorGUILayoutGameUtility.AnimationSettingsField("Default Animator", DefaultAnimatorController.intValue);
            });

            // And draw the content...
            DrawDatabaseItemGUI();

            serializedObject.ApplyModifiedProperties();
        }
        /// <inheritdoc />
        public override void OnInspectorGUI()
        {
            serializedObject.Update();

            //
            // SECTION: Controller Settings
            //
            _drawControllerSettings.value = DrawSectionGUI(_drawControllerSettings.value, "Controller Settings", () =>
            {
                EditorGUILayout.PropertyField(Type);
                AnimatorController.intValue = EditorGUILayoutGameUtility.AnimationSettingsField("Animator Controller", AnimatorController.intValue);
            });

            //
            // SECTION: Resources Settings
            //
            _drawResourcesSettings.value = DrawSectionGUI(_drawResourcesSettings.value, "Resources Settings", () =>
            {
                EditorGUILayout.PropertyField(FPPModel);
                EditorGUILayout.PropertyField(TPPModel);
            });

            //
            // SECTION: Fire Settings
            //
            _drawFireSettings.value = DrawSectionGUI(_drawFireSettings.value, "Fire Settings", () =>
            {
                EditorGUILayout.PropertyField(RoundsPerMinute);
                EditorGUILayout.PropertyField(RecoilAndSpreadFramesLimit);
                EditorGUILayout.PropertyField(CanFireWhileRunning);
            });

            //
            // SECTION: Bullet Settings
            //
            _drawBulletSettings.value = DrawSectionGUI(_drawBulletSettings.value, "Bullet Settings", () =>
            {
                EditorGUILayout.PropertyField(BulletVelocity);
                EditorGUILayout.PropertyField(BulletVelocityTimeout);
                EditorGUILayout.PropertyField(BulletGravity);
                EditorGUILayout.PropertyField(BulletRadius);
                EditorGUILayout.PropertyField(BulletRaycastDistance);
                EditorGUILayout.PropertyField(BulletDamage);
                EditorGUILayout.PropertyField(BulletTimeout);
            });

            //
            // SECTION: Reload Settings
            //
            _drawReloadSettings.value = DrawSectionGUI(_drawReloadSettings.value, "Reload Settings", () =>
            {
                EditorGUILayout.PropertyField(ReloadTime);
            });

            //
            // SECTION: Camera Settings
            //
            _drawCameraSettings.value = DrawSectionGUI(_drawCameraSettings.value, "Camera Settings", () =>
            {
                EditorGUILayout.PropertyField(CameraShakeFromLast);
                EditorGUILayout.PropertyField(CameraShakeToNext);
            });

            //
            // SECTION: Bullet Spread Settings
            //
            _drawBulletSpreadSettings.value = DrawSectionGUI(_drawBulletSpreadSettings.value, "Bullet Spread Settings", () =>
            {
                EditorGUILayout.PropertyField(SpreadWarmupTime);
                EditorGUILayout.PropertyField(HorizontalSpread);
                EditorGUILayout.PropertyField(VerticalSpread);
                EditorGUILayout.PropertyField(HorizontalSpreadTimeMod);
                EditorGUILayout.PropertyField(HorizontalSpreadTimeModCooldown);
                EditorGUILayout.PropertyField(VerticalSpreadTimeMod);
                EditorGUILayout.PropertyField(VerticalSpreadTimeModCooldown);
                EditorGUILayout.PropertyField(SpreadTimeModEnabled);
            });

            //
            // SECTION: Bullet Recoil Settings
            //
            _drawBulletRecoilSettings.value = DrawSectionGUI(_drawBulletRecoilSettings.value, "Bullet Recoil Settings", () =>
            {
                EditorGUILayout.PropertyField(RecoilWarmupTime);
                EditorGUILayout.PropertyField(HorizontalRecoilTimeMod);
                EditorGUILayout.PropertyField(HorizontalRecoilTimeModCooldown);
                EditorGUILayout.PropertyField(VerticalRecoilTimeMod);
                EditorGUILayout.PropertyField(VerticalRecoilTimeModCooldown);
            });

            //
            // SECTION: State Settings
            //
            _drawStateSettings.value = DrawSectionGUI(_drawStateSettings.value, "State Settings", () =>
            {
                EditorGUILayout.PropertyField(RunSpreadMod);
                EditorGUILayout.PropertyField(RunRecoilMod);
                EditorGUILayout.PropertyField(MoveSpreadMod);
                EditorGUILayout.PropertyField(MoveRecoilMod);
                EditorGUILayout.PropertyField(CrouchSpreadMod);
                EditorGUILayout.PropertyField(CrouchRecoilMod);
                EditorGUILayout.PropertyField(AimSpreadMod);
                EditorGUILayout.PropertyField(AimRecoilMod);
            });

            //
            // SECTION: Audio Settings
            //
            _drawAudioSettings.value = DrawSectionGUI(_drawAudioSettings.value, "Audio Settings", () =>
            {
                EditorGUILayout.PropertyField(FireSounds, true);
                EditorGUILayout.PropertyField(FireSoundPitchRange);
            });

            // And draw the content...
            DrawDatabaseItemGUI();

            serializedObject.ApplyModifiedProperties();
        }