| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 | using System.Collections.Generic;using UnityEngine;using FairyGUI.Utils;namespace FairyGUI{    class GearXYValue    {        public float x;        public float y;        public float px;        public float py;        public GearXYValue(float x = 0, float y = 0, float px = 0, float py = 0)        {            this.x = x;            this.y = y;            this.px = px;            this.py = py;        }    }    /// <summary>    /// Gear is a connection between object and controller.    /// </summary>    public class GearXY : GearBase, ITweenListener    {        public bool positionsInPercent;        Dictionary<string, GearXYValue> _storage;        GearXYValue _default;        public GearXY(GObject owner)            : base(owner)        {        }        protected override void Init()        {            _default = new GearXYValue(_owner.x, _owner.y, _owner.x / _owner.parent.width, _owner.y / _owner.parent.height);            _storage = new Dictionary<string, GearXYValue>();        }        override protected void AddStatus(string pageId, ByteBuffer buffer)        {            GearXYValue gv;            if (pageId == null)                gv = _default;            else            {                gv = new GearXYValue();                _storage[pageId] = gv;            }            gv.x = buffer.ReadInt();            gv.y = buffer.ReadInt();        }        public void AddExtStatus(string pageId, ByteBuffer buffer)        {            GearXYValue gv;            if (pageId == null)                gv = _default;            else                gv = _storage[pageId];            gv.px = buffer.ReadFloat();            gv.py = buffer.ReadFloat();        }        override public void Apply()        {            GearXYValue gv;            if (!_storage.TryGetValue(_controller.selectedPageId, out gv))                gv = _default;            Vector2 endPos = new Vector2();            if (positionsInPercent && _owner.parent != null)            {                endPos.x = gv.px * _owner.parent.width;                endPos.y = gv.py * _owner.parent.height;            }            else            {                endPos.x = gv.x;                endPos.y = gv.y;            }            if (_tweenConfig != null && _tweenConfig.tween && UIPackage._constructing == 0 && !disableAllTweenEffect)            {                if (_tweenConfig._tweener != null)                {                    if (_tweenConfig._tweener.endValue.x != endPos.x || _tweenConfig._tweener.endValue.y != endPos.y)                    {                        _tweenConfig._tweener.Kill(true);                        _tweenConfig._tweener = null;                    }                    else                        return;                }                Vector2 origin = _owner.xy;                if (endPos != origin)                {                    if (_owner.CheckGearController(0, _controller))                        _tweenConfig._displayLockToken = _owner.AddDisplayLock();                    _tweenConfig._tweener = GTween.To(origin, endPos, _tweenConfig.duration)                        .SetDelay(_tweenConfig.delay)                        .SetEase(_tweenConfig.easeType, _tweenConfig.customEase)                        .SetTarget(this)                        .SetListener(this);                }            }            else            {                _owner._gearLocked = true;                _owner.SetXY(endPos.x, endPos.y);                _owner._gearLocked = false;            }        }        public void OnTweenStart(GTweener tweener)        {//nothing        }        public void OnTweenUpdate(GTweener tweener)        {            _owner._gearLocked = true;            _owner.SetXY(tweener.value.x, tweener.value.y);            _owner._gearLocked = false;            _owner.InvalidateBatchingState();        }        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()        {            GearXYValue gv;            if (!_storage.TryGetValue(_controller.selectedPageId, out gv))                _storage[_controller.selectedPageId] = gv = new GearXYValue();            gv.x = _owner.x;            gv.y = _owner.y;            gv.px = _owner.x / _owner.parent.width;            gv.py = _owner.y / _owner.parent.height;        }        override public void UpdateFromRelations(float dx, float dy)        {            if (_controller != null && _storage != null && !positionsInPercent)            {                foreach (GearXYValue gv in _storage.Values)                {                    gv.x += dx;                    gv.y += dy;                }                _default.x += dx;                _default.y += dy;                UpdateState();            }        }    }}
 |