using System.Collections.Generic;
using UnityEditor;
using UnityEditor.SceneManagement;
using System;
using System.IO;
using UnityEngine;
using System.Linq;
using Pumkin.DependencyChecker;
using Pumkin.PoseEditor;
using UnityEngine.UI;
using UnityEditorInternal;
using Pumkin.DataStructures;
using Pumkin.HelperFunctions;
using Pumkin.Extensions;
using UnityEngine.SceneManagement;
using Pumkin.Presets;
using UnityEngine.Animations;
using Pumkin.YAML;
using UnityEditor.Experimental.SceneManagement;
#if VRC_SDK_VRCSDK2 || (VRC_SDK_VRCSDK3 && !UDON)
using VRC.Core;
using VRC.SDKBase;
#endif
#if VRC_SDK_VRCSDK3 && !UDON
using VRC_AvatarDescriptor = VRC.SDK3.Avatars.Components.VRCAvatarDescriptor;
#elif VRC_SDK_VRCSDK2
using VRC_AvatarDescriptor = VRCSDK2.VRC_AvatarDescriptor;
#endif
///
/// PumkinsAvatarTools by, well, Pumkin
/// https://github.com/rurre/PumkinsAvatarTools
///
namespace Pumkin.AvatarTools
{
[ExecuteInEditMode, CanEditMultipleObjects, Serializable]
public class PumkinsAvatarTools : EditorWindow
{
#region Variables
#region Tools
[SerializeField] private static GameObject _selectedAvatar; // use property
[SerializeField] static bool _useSceneSelectionAvatar = false;
//Quick Setup
[SerializeField] bool _tools_quickSetup_settings_expand = false;
[SerializeField] bool _tools_quickSetup_fillVisemes = true;
[SerializeField] bool _tools_quickSetup_setViewpoint = true;
//[SerializeField] bool _tools_quickSetup_autoRig = true;
[SerializeField] bool _tools_quickSetup_forceTPose = false;
[SerializeField] float _tools_quickSetup_viewpointZDepth = 0.06f;
[SerializeField] bool _tools_quickSetup_setSkinnedMeshRendererAnchor = true;
[SerializeField] bool _tools_quickSetup_setMeshRendererAnchor = true;
[SerializeField] string _tools_quickSetup_setRenderAnchor_path = "Armature/Hips/Spine";
//Editing Viewpoint
bool _editingView = false;
Vector3 _viewPosOld;
Vector3 _viewPosTemp;
Tool _tempToolOld = Tool.None;
public static readonly Vector3 DEFAULT_VIEWPOINT = new Vector3(0, 1.6f, 0.2f);
//Editing Scale
bool _editingScale = false;
Vector3 _avatarScaleOld;
[SerializeField] float _avatarScaleTemp;
[SerializeField] SerializedProperty _serializedAvatarScaleTempProp;
[SerializeField] bool editingScaleMovesViewpoint = true;
Transform _scaleViewpointDummy;
#if VRC_SDK_VRCSDK2 || (VRC_SDK_VRCSDK3 && !UDON)
VRC_AvatarDescriptor _tempAvatarDescriptor;
bool _tempAvatarDescriptorWasAdded = false;
#endif
//Dynamic Bones
bool _nextToggleDBoneState = false;
#if PUMKIN_DBONES || PUMKIN_OLD_DBONES
List _dBonesThatWereAlreadyDisabled = new List();
#else
List