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();
- }
- }
- }
- }
|