using System.Collections.Generic;
using UnityEngine;
using FairyGUI.Utils;
namespace FairyGUI
{
class GearLookValue
{
public float alpha;
public float rotation;
public bool grayed;
public bool touchable;
public GearLookValue(float alpha, float rotation, bool grayed, bool touchable)
{
this.alpha = alpha;
this.rotation = rotation;
this.grayed = grayed;
this.touchable = touchable;
}
}
///
/// Gear is a connection between object and controller.
///
public class GearLook : GearBase, ITweenListener
{
Dictionary _storage;
GearLookValue _default;
public GearLook(GObject owner)
: base(owner)
{
}
protected override void Init()
{
_default = new GearLookValue(_owner.alpha, _owner.rotation, _owner.grayed, _owner.touchable);
_storage = new Dictionary();
}
override protected void AddStatus(string pageId, ByteBuffer buffer)
{
GearLookValue gv;
if (pageId == null)
gv = _default;
else
{
gv = new GearLookValue(0, 0, false, false);
_storage[pageId] = gv;
}
gv.alpha = buffer.ReadFloat();
gv.rotation = buffer.ReadFloat();
gv.grayed = buffer.ReadBool();
gv.touchable = buffer.ReadBool();
}
override public void Apply()
{
GearLookValue gv;
if (!_storage.TryGetValue(_controller.selectedPageId, out gv))
gv = _default;
if (_tweenConfig != null && _tweenConfig.tween && UIPackage._constructing == 0 && !disableAllTweenEffect)
{
_owner._gearLocked = true;
_owner.grayed = gv.grayed;
_owner.touchable = gv.touchable;
_owner._gearLocked = false;
if (_tweenConfig._tweener != null)
{
if (_tweenConfig._tweener.endValue.x != gv.alpha || _tweenConfig._tweener.endValue.y != gv.rotation)
{
_tweenConfig._tweener.Kill(true);
_tweenConfig._tweener = null;
}
else
return;
}
bool a = gv.alpha != _owner.alpha;
bool b = gv.rotation != _owner.rotation;
if (a || b)
{
if (_owner.CheckGearController(0, _controller))
_tweenConfig._displayLockToken = _owner.AddDisplayLock();
_tweenConfig._tweener = GTween.To(new Vector2(_owner.alpha, _owner.rotation), new Vector2(gv.alpha, gv.rotation), _tweenConfig.duration)
.SetDelay(_tweenConfig.delay)
.SetEase(_tweenConfig.easeType, _tweenConfig.customEase)
.SetUserData((a ? 1 : 0) + (b ? 2 : 0))
.SetTarget(this)
.SetListener(this);
}
}
else
{
_owner._gearLocked = true;
_owner.alpha = gv.alpha;
_owner.rotation = gv.rotation;
_owner.grayed = gv.grayed;
_owner.touchable = gv.touchable;
_owner._gearLocked = false;
}
}
public void OnTweenStart(GTweener tweener)
{
}
public void OnTweenUpdate(GTweener tweener)
{
int flag = (int)tweener.userData;
_owner._gearLocked = true;
if ((flag & 1) != 0)
_owner.alpha = tweener.value.x;
if ((flag & 2) != 0)
{
_owner.rotation = tweener.value.y;
_owner.InvalidateBatchingState();
}
_owner._gearLocked = false;
}
public void OnTweenComplete(GTweener tweener)
{
_tweenConfig._tweener = null;
if (_tweenConfig._displayLockToken != 0)
{
_owner.ReleaseDisplayLock(_tweenConfig._displayLockToken);
_tweenConfig._displayLockToken = 0;
}
_owner.DispatchEvent("onGearStop", this);
}
override public void UpdateState()
{
GearLookValue gv;
if (!_storage.TryGetValue(_controller.selectedPageId, out gv))
_storage[_controller.selectedPageId] = new GearLookValue(_owner.alpha, _owner.rotation, _owner.grayed, _owner.touchable);
else
{
gv.alpha = _owner.alpha;
gv.rotation = _owner.rotation;
gv.grayed = _owner.grayed;
gv.touchable = _owner.touchable;
}
}
}
}