178 lines
5.1 KiB
C#
178 lines
5.1 KiB
C#
|
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();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|