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