using FairyGUI.Utils;
namespace FairyGUI
{
///
/// Gear is a connection between object and controller.
///
abstract public class GearBase
{
public static bool disableAllTweenEffect = false;
protected GObject _owner;
protected Controller _controller;
protected GearTweenConfig _tweenConfig;
public GearBase(GObject owner)
{
_owner = owner;
}
public void Dispose()
{
if (_tweenConfig != null && _tweenConfig._tweener != null)
{
_tweenConfig._tweener.Kill();
_tweenConfig._tweener = null;
}
}
///
/// Controller object.
///
public Controller controller
{
get
{
return _controller;
}
set
{
if (value != _controller)
{
_controller = value;
if (_controller != null)
Init();
}
}
}
public GearTweenConfig tweenConfig
{
get
{
if (_tweenConfig == null)
_tweenConfig = new GearTweenConfig();
return _tweenConfig;
}
}
public void Setup(ByteBuffer buffer)
{
_controller = _owner.parent.GetControllerAt(buffer.ReadShort());
Init();
int cnt = buffer.ReadShort();
if (this is GearDisplay)
{
((GearDisplay)this).pages = buffer.ReadSArray(cnt);
}
else if (this is GearDisplay2)
{
((GearDisplay2)this).pages = buffer.ReadSArray(cnt);
}
else
{
for (int i = 0; i < cnt; i++)
{
string page = buffer.ReadS();
if (page == null)
continue;
AddStatus(page, buffer);
}
if (buffer.ReadBool())
AddStatus(null, buffer);
}
if (buffer.ReadBool())
{
_tweenConfig = new GearTweenConfig();
_tweenConfig.easeType = (EaseType)buffer.ReadByte();
_tweenConfig.duration = buffer.ReadFloat();
_tweenConfig.delay = buffer.ReadFloat();
}
if (buffer.version >= 2)
{
if (this is GearXY)
{
if (buffer.ReadBool())
{
((GearXY)this).positionsInPercent = true;
for (int i = 0; i < cnt; i++)
{
string page = buffer.ReadS();
if (page == null)
continue;
((GearXY)this).AddExtStatus(page, buffer);
}
if (buffer.ReadBool())
((GearXY)this).AddExtStatus(null, buffer);
}
}
else if (this is GearDisplay2)
((GearDisplay2)this).condition = buffer.ReadByte();
}
if (buffer.version >= 4 && _tweenConfig != null && _tweenConfig.easeType == EaseType.Custom)
{
_tweenConfig.customEase = new CustomEase();
_tweenConfig.customEase.Create(buffer.ReadPath());
}
if (buffer.version >= 6)
{
if (this is GearAnimation)
{
for (int i = 0; i < cnt; i++)
{
string page = buffer.ReadS();
if (page == null)
continue;
((GearAnimation)this).AddExtStatus(page, buffer);
}
if (buffer.ReadBool())
((GearAnimation)this).AddExtStatus(null, buffer);
}
}
}
virtual public void UpdateFromRelations(float dx, float dy)
{
}
abstract protected void AddStatus(string pageId, ByteBuffer buffer);
abstract protected void Init();
///
/// Call when controller active page changed.
///
abstract public void Apply();
///
/// Call when object's properties changed.
///
abstract public void UpdateState();
}
public class GearTweenConfig
{
///
/// Use tween to apply change.
///
public bool tween;
///
/// Ease type.
///
public EaseType easeType;
///
///
///
public CustomEase customEase;
///
/// Tween duration in seconds.
///
public float duration;
///
/// Tween delay in seconds.
///
public float delay;
internal uint _displayLockToken;
internal GTweener _tweener;
public GearTweenConfig()
{
tween = true;
easeType = EaseType.QuadOut;
duration = 0.3f;
delay = 0;
}
}
}