首次提交
This commit is contained in:
220
Assets/Plugins/FairyGUI/Scripts/UI/Relations.cs
Normal file
220
Assets/Plugins/FairyGUI/Scripts/UI/Relations.cs
Normal file
@@ -0,0 +1,220 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using FairyGUI.Utils;
|
||||
|
||||
namespace FairyGUI
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class Relations
|
||||
{
|
||||
GObject _owner;
|
||||
List<RelationItem> _items;
|
||||
|
||||
public GObject handling;
|
||||
|
||||
public Relations(GObject owner)
|
||||
{
|
||||
_owner = owner;
|
||||
_items = new List<RelationItem>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="target"></param>
|
||||
/// <param name="relationType"></param>
|
||||
public void Add(GObject target, RelationType relationType)
|
||||
{
|
||||
Add(target, relationType, false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="target"></param>
|
||||
/// <param name="relationType"></param>
|
||||
/// <param name="usePercent"></param>
|
||||
public void Add(GObject target, RelationType relationType, bool usePercent)
|
||||
{
|
||||
int cnt = _items.Count;
|
||||
for (int i = 0; i < cnt; i++)
|
||||
{
|
||||
RelationItem item = _items[i];
|
||||
if (item.target == target)
|
||||
{
|
||||
item.Add(relationType, usePercent);
|
||||
return;
|
||||
}
|
||||
}
|
||||
RelationItem newItem = new RelationItem(_owner);
|
||||
newItem.target = target;
|
||||
newItem.Add(relationType, usePercent);
|
||||
_items.Add(newItem);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="target"></param>
|
||||
/// <param name="relationType"></param>
|
||||
public void Remove(GObject target, RelationType relationType)
|
||||
{
|
||||
int cnt = _items.Count;
|
||||
int i = 0;
|
||||
while (i < cnt)
|
||||
{
|
||||
RelationItem item = _items[i];
|
||||
if (item.target == target)
|
||||
{
|
||||
item.Remove(relationType);
|
||||
if (item.isEmpty)
|
||||
{
|
||||
item.Dispose();
|
||||
_items.RemoveAt(i);
|
||||
cnt--;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
i++;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="target"></param>
|
||||
/// <returns></returns>
|
||||
public bool Contains(GObject target)
|
||||
{
|
||||
int cnt = _items.Count;
|
||||
for (int i = 0; i < cnt; i++)
|
||||
{
|
||||
RelationItem item = _items[i];
|
||||
if (item.target == target)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="target"></param>
|
||||
public void ClearFor(GObject target)
|
||||
{
|
||||
int cnt = _items.Count;
|
||||
int i = 0;
|
||||
while (i < cnt)
|
||||
{
|
||||
RelationItem item = _items[i];
|
||||
if (item.target == target)
|
||||
{
|
||||
item.Dispose();
|
||||
_items.RemoveAt(i);
|
||||
cnt--;
|
||||
}
|
||||
else
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public void ClearAll()
|
||||
{
|
||||
int cnt = _items.Count;
|
||||
for (int i = 0; i < cnt; i++)
|
||||
{
|
||||
RelationItem item = _items[i];
|
||||
item.Dispose();
|
||||
}
|
||||
_items.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="source"></param>
|
||||
public void CopyFrom(Relations source)
|
||||
{
|
||||
ClearAll();
|
||||
|
||||
List<RelationItem> arr = source._items;
|
||||
foreach (RelationItem ri in arr)
|
||||
{
|
||||
RelationItem item = new RelationItem(_owner);
|
||||
item.CopyFrom(ri);
|
||||
_items.Add(item);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public void Dispose()
|
||||
{
|
||||
ClearAll();
|
||||
handling = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="dWidth"></param>
|
||||
/// <param name="dHeight"></param>
|
||||
/// <param name="applyPivot"></param>
|
||||
public void OnOwnerSizeChanged(float dWidth, float dHeight, bool applyPivot)
|
||||
{
|
||||
int cnt = _items.Count;
|
||||
if (cnt == 0)
|
||||
return;
|
||||
|
||||
for (int i = 0; i < cnt; i++)
|
||||
_items[i].ApplyOnSelfSizeChanged(dWidth, dHeight, applyPivot);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public bool isEmpty
|
||||
{
|
||||
get
|
||||
{
|
||||
return _items.Count == 0;
|
||||
}
|
||||
}
|
||||
|
||||
public void Setup(ByteBuffer buffer, bool parentToChild)
|
||||
{
|
||||
int cnt = buffer.ReadByte();
|
||||
GObject target;
|
||||
for (int i = 0; i < cnt; i++)
|
||||
{
|
||||
int targetIndex = buffer.ReadShort();
|
||||
if (targetIndex == -1)
|
||||
target = _owner.parent;
|
||||
else if (parentToChild)
|
||||
target = ((GComponent)_owner).GetChildAt(targetIndex);
|
||||
else
|
||||
target = _owner.parent.GetChildAt(targetIndex);
|
||||
|
||||
RelationItem newItem = new RelationItem(_owner);
|
||||
newItem.target = target;
|
||||
_items.Add(newItem);
|
||||
|
||||
int cnt2 = buffer.ReadByte();
|
||||
for (int j = 0; j < cnt2; j++)
|
||||
{
|
||||
RelationType rt = (RelationType)buffer.ReadByte();
|
||||
bool usePercent = buffer.ReadBool();
|
||||
newItem.InternalAdd(rt, usePercent);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user