You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
177 lines
5.1 KiB
177 lines
5.1 KiB
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(); |
|
} |
|
} |
|
} |
|
}
|
|
|