using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace UnityEditor.U2D.Animation
{
    internal class CharacterCache : SkinningObject, IEnumerable<CharacterPartCache>
    {
        [SerializeField]
        SkeletonCache m_Skeleton;
        [SerializeField]
        List<CharacterPartCache> m_Parts = new List<CharacterPartCache>();
        [SerializeField]
        Vector2Int m_Dimension;
        [SerializeField]
        List<CharacterGroupCache> m_Groups = new List<CharacterGroupCache>();
        [SerializeField]
        Vector2 m_Pivot;

        public SkeletonCache skeleton
        {
            get => m_Skeleton;
            set => m_Skeleton = value;
        }

        public virtual CharacterPartCache[] parts
        {
            get => m_Parts.ToArray();
            set => m_Parts = new List<CharacterPartCache>(value);
        }

        public virtual CharacterGroupCache[] groups
        {
            get => m_Groups.ToArray();
            set => m_Groups = new List<CharacterGroupCache>(value);
        }

        public Vector2Int dimension
        {
            get => m_Dimension;
            set => m_Dimension = value;
        }

        public Vector2 pivot
        {
            get => m_Pivot;
            set => m_Pivot = value;
        }

        public IEnumerator<CharacterPartCache> GetEnumerator()
        {
            return ((IEnumerable<CharacterPartCache>)m_Parts).GetEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return ((IEnumerable<CharacterPartCache>)m_Parts).GetEnumerator();
        }
    }
}