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; } } } }