#if VRC_SDK_VRCSDK3
using VRC.SDKBase;
#endif
#if VRC_SDK_VRCSDK2
using VRCSDK2;
#endif
using UnityEditor;
using UnityEngine;
using System.Linq;
using UnityEngine.SceneManagement;
using UnityEditor.SceneManagement;
using System.Text.RegularExpressions;
using System;
using VRWorldToolkit.DataStructures;
using Object = UnityEngine.Object;
#if (VRC_SDK_VRCSDK2 || VRC_SDK_VRCSDK3) && !VRWT_DISABLE_EDITORS
namespace VRWorldToolkit
{
///
/// Custom editor addition for drawing avatar pedestal bounds
///
[CustomEditor(typeof(VRC_AvatarPedestal), true, isFallback = false)]
[CanEditMultipleObjects]
public class CustomAvatarPedestalEditor : Editor
{
private const float INNER_BOUND = 1.5f;
private const float OUTER_BOUND = 2f;
private const string AVATAR_ID_REGEX = "avtr_[A-Za-z0-9]{8}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{12}";
private bool setIDsFoldout;
private string avatarIDArea = "";
private string[] avatarIDs;
public override void OnInspectorGUI()
{
DrawDefaultInspector();
EditorGUILayout.Space();
EditorGUILayout.LabelField("VRWorld Toolkit Additions", EditorStyles.boldLabel);
var pedestals = serializedObject.targetObjects.Select(x => x as VRC_AvatarPedestal).OrderBy(x => x.transform.GetSiblingIndex()).ToArray();
setIDsFoldout = EditorGUILayout.Foldout(setIDsFoldout, "Mass set avatar IDs");
if (setIDsFoldout)
{
if (Selection.activeTransform)
{
avatarIDArea = EditorGUILayout.TextArea(avatarIDArea, GUILayout.ExpandWidth(true));
avatarIDs = Regex.Matches(avatarIDArea, AVATAR_ID_REGEX).Cast().Select(m => m.Value).ToArray();
EditorGUILayout.LabelField("IDs found/Pedestals selected: ", avatarIDs.Length + "/" + serializedObject.targetObjects.Length, avatarIDs.Length > serializedObject.targetObjects.Length ? Styles.RedLabel : GUIStyle.none);
if (GUILayout.Button("Set IDs"))
{
var count = Math.Min(serializedObject.targetObjects.Length, avatarIDs.Length);
Undo.RegisterCompleteObjectUndo(pedestals.ToArray