using System.Collections.Generic;
using FairyGUI.Utils;
namespace FairyGUI
{
    class GearAnimationValue
    {
        public bool playing;
        public int frame;
        public GearAnimationValue(bool playing, int frame)
        {
            this.playing = playing;
            this.frame = frame;
        }
    }
    /// 
    /// Gear is a connection between object and controller.
    /// 
    public class GearAnimation : GearBase
    {
        Dictionary _storage;
        GearAnimationValue _default;
        public GearAnimation(GObject owner)
            : base(owner)
        {
        }
        protected override void Init()
        {
            _default = new GearAnimationValue(((IAnimationGear)_owner).playing, ((IAnimationGear)_owner).frame);
            _storage = new Dictionary();
        }
        override protected void AddStatus(string pageId, ByteBuffer buffer)
        {
            GearAnimationValue gv;
            if (pageId == null)
                gv = _default;
            else
            {
                gv = new GearAnimationValue(false, 0);
                _storage[pageId] = gv;
            }
            gv.playing = buffer.ReadBool();
            gv.frame = buffer.ReadInt();
        }
        override public void Apply()
        {
            _owner._gearLocked = true;
            GearAnimationValue gv;
            if (!_storage.TryGetValue(_controller.selectedPageId, out gv))
                gv = _default;
            IAnimationGear mc = (IAnimationGear)_owner;
            mc.frame = gv.frame;
            mc.playing = gv.playing;
            _owner._gearLocked = false;
        }
        override public void UpdateState()
        {
            IAnimationGear mc = (IAnimationGear)_owner;
            GearAnimationValue gv;
            if (!_storage.TryGetValue(_controller.selectedPageId, out gv))
                _storage[_controller.selectedPageId] = new GearAnimationValue(mc.playing, mc.frame);
            else
            {
                gv.playing = mc.playing;
                gv.frame = mc.frame;
            }
        }
    }
}