123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- using System.Collections.Generic;
- using UnityEngine;
- using FairyGUI.Utils;
- namespace FairyGUI
- {
- class GearSizeValue
- {
- public float width;
- public float height;
- public float scaleX;
- public float scaleY;
- public GearSizeValue(float width, float height, float scaleX, float scaleY)
- {
- this.width = width;
- this.height = height;
- this.scaleX = scaleX;
- this.scaleY = scaleY;
- }
- }
- /// <summary>
- /// Gear is a connection between object and controller.
- /// </summary>
- public class GearSize : GearBase, ITweenListener
- {
- Dictionary<string, GearSizeValue> _storage;
- GearSizeValue _default;
- public GearSize(GObject owner)
- : base(owner)
- {
- }
- protected override void Init()
- {
- _default = new GearSizeValue(_owner.width, _owner.height, _owner.scaleX, _owner.scaleY);
- _storage = new Dictionary<string, GearSizeValue>();
- }
- override protected void AddStatus(string pageId, ByteBuffer buffer)
- {
- GearSizeValue gv;
- if (pageId == null)
- gv = _default;
- else
- {
- gv = new GearSizeValue(0, 0, 1, 1);
- _storage[pageId] = gv;
- }
- gv.width = buffer.ReadInt();
- gv.height = buffer.ReadInt();
- gv.scaleX = buffer.ReadFloat();
- gv.scaleY = buffer.ReadFloat();
- }
- override public void Apply()
- {
- GearSizeValue gv;
- if (!_storage.TryGetValue(_controller.selectedPageId, out gv))
- gv = _default;
- if (_tweenConfig != null && _tweenConfig.tween && UIPackage._constructing == 0 && !disableAllTweenEffect)
- {
- if (_tweenConfig._tweener != null)
- {
- if (_tweenConfig._tweener.endValue.x != gv.width || _tweenConfig._tweener.endValue.y != gv.height
- || _tweenConfig._tweener.endValue.z != gv.scaleX || _tweenConfig._tweener.endValue.w != gv.scaleY)
- {
- _tweenConfig._tweener.Kill(true);
- _tweenConfig._tweener = null;
- }
- else
- return;
- }
- bool a = gv.width != _owner.width || gv.height != _owner.height;
- bool b = gv.scaleX != _owner.scaleX || gv.scaleY != _owner.scaleY;
- if (a || b)
- {
- if (_owner.CheckGearController(0, _controller))
- _tweenConfig._displayLockToken = _owner.AddDisplayLock();
- _tweenConfig._tweener = GTween.To(new Vector4(_owner.width, _owner.height, _owner.scaleX, _owner.scaleY),
- new Vector4(gv.width, gv.height, gv.scaleX, gv.scaleY), _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.SetSize(gv.width, gv.height, _owner.CheckGearController(1, _controller));
- _owner.SetScale(gv.scaleX, gv.scaleY);
- _owner._gearLocked = false;
- }
- }
- public void OnTweenStart(GTweener tweener)
- {
- }
- public void OnTweenUpdate(GTweener tweener)
- {
- _owner._gearLocked = true;
- int flag = (int)tweener.userData;
- if ((flag & 1) != 0)
- _owner.SetSize(tweener.value.x, tweener.value.y, _owner.CheckGearController(1, _controller));
- if ((flag & 2) != 0)
- _owner.SetScale(tweener.value.z, tweener.value.w);
- _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()
- {
- GearSizeValue gv;
- if (!_storage.TryGetValue(_controller.selectedPageId, out gv))
- _storage[_controller.selectedPageId] = new GearSizeValue(_owner.width, _owner.height, _owner.scaleX, _owner.scaleY);
- else
- {
- gv.width = _owner.width;
- gv.height = _owner.height;
- gv.scaleX = _owner.scaleX;
- gv.scaleY = _owner.scaleY;
- }
- }
- override public void UpdateFromRelations(float dx, float dy)
- {
- if (_controller != null && _storage != null)
- {
- foreach (GearSizeValue gv in _storage.Values)
- {
- gv.width += dx;
- gv.height += dy;
- }
- _default.width += dx;
- _default.height += dy;
- UpdateState();
- }
- }
- }
- }
|