You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
3.1 KiB
109 lines
3.1 KiB
using System.Collections.Generic; |
|
using FairyGUI.Utils; |
|
|
|
namespace FairyGUI |
|
{ |
|
class GearAnimationValue |
|
{ |
|
public bool playing; |
|
public int frame; |
|
public string animationName; |
|
public string skinName; |
|
|
|
public GearAnimationValue(bool playing, int frame) |
|
{ |
|
this.playing = playing; |
|
this.frame = frame; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// Gear is a connection between object and controller. |
|
/// </summary> |
|
public class GearAnimation : GearBase |
|
{ |
|
Dictionary<string, GearAnimationValue> _storage; |
|
GearAnimationValue _default; |
|
|
|
public GearAnimation(GObject owner) |
|
: base(owner) |
|
{ |
|
} |
|
|
|
protected override void Init() |
|
{ |
|
_default = new GearAnimationValue(((IAnimationGear)_owner).playing, ((IAnimationGear)_owner).frame); |
|
if (_owner is GLoader3D) |
|
{ |
|
_default.animationName = ((GLoader3D)_owner).animationName; |
|
_default.skinName = ((GLoader3D)_owner).skinName; |
|
} |
|
_storage = new Dictionary<string, GearAnimationValue>(); |
|
} |
|
|
|
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(); |
|
} |
|
|
|
public void AddExtStatus(string pageId, ByteBuffer buffer) |
|
{ |
|
GearAnimationValue gv; |
|
if (pageId == null) |
|
gv = _default; |
|
else |
|
gv = _storage[pageId]; |
|
gv.animationName = buffer.ReadS(); |
|
gv.skinName = buffer.ReadS(); |
|
} |
|
|
|
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; |
|
if (_owner is GLoader3D) |
|
{ |
|
((GLoader3D)_owner).animationName = gv.animationName; |
|
((GLoader3D)_owner).skinName = gv.skinName; |
|
} |
|
|
|
_owner._gearLocked = false; |
|
} |
|
|
|
override public void UpdateState() |
|
{ |
|
IAnimationGear mc = (IAnimationGear)_owner; |
|
GearAnimationValue gv; |
|
if (!_storage.TryGetValue(_controller.selectedPageId, out gv)) |
|
_storage[_controller.selectedPageId] = gv = new GearAnimationValue(mc.playing, mc.frame); |
|
else |
|
{ |
|
gv.playing = mc.playing; |
|
gv.frame = mc.frame; |
|
} |
|
|
|
if (_owner is GLoader3D) |
|
{ |
|
gv.animationName = ((GLoader3D)_owner).animationName; |
|
gv.skinName = ((GLoader3D)_owner).skinName; |
|
} |
|
} |
|
} |
|
}
|
|
|