6 using System.Collections.Generic;
32 private readonly Dictionary<string, T> dataArray;
43 dataArray =
new Dictionary<string, T>();
44 arrayType = typeof(T);
57 if (!objectType.IsSubclassOf(arrayType) && objectType != arrayType)
59 throw new InvalidCastException(
string.Format(
"Object of incorrect type added to SyncArray: Expected {0}, got {1} ", objectType, objectElement.
GetObjectType().
GetString()));
62 object createdObject = Activator.CreateInstance(objectType);
64 T spawnedDataModel = (T)createdObject;
65 spawnedDataModel.Element = objectElement;
66 spawnedDataModel.FieldName = objectElement.
GetName();
71 return spawnedDataModel;
83 string id =
System.Guid.NewGuid().ToString();
88 newSyncObject.Element = existingElement;
89 newSyncObject.FieldName = id;
90 newSyncObject.Owner = owner;
93 AddChild(newSyncObject);
96 dataArray[id] = newSyncObject;
99 newSyncObject.InitializeLocal(
Element);
102 if (ObjectAdded != null)
104 ObjectAdded(newSyncObject);
107 return newSyncObject;
117 bool success =
false;
118 if (existingObject != null)
120 string uniqueName = existingObject.Element.GetName();
121 if (dataArray.Remove(uniqueName))
123 RemoveChild(existingObject);
125 if (ObjectRemoved != null)
127 ObjectRemoved(existingObject);
140 var childrenList =
new List<T>(dataArray.Count);
141 foreach (KeyValuePair<string, T> pair
in dataArray)
143 childrenList.Add(pair.Value);
146 return childrenList.ToArray();
149 IEnumerator<T> IEnumerable<T>.GetEnumerator()
151 return dataArray.Values.GetEnumerator();
154 IEnumerator IEnumerable.GetEnumerator()
156 return dataArray.Values.GetEnumerator();
162 T[] array = GetDataArray();
163 for (
int i = 0; i < array.Length; i++)
165 RemoveObject(array[i]);
175 newObject.InitializationComplete += OnInitializationComplete;
179 Debug.LogError(
"Error: Adding unknown element to SyncArray<T>");
182 base.OnElementAdded(element);
187 base.OnElementDeleted(element);
189 string uniqueName = element.
GetName();
190 if (dataArray.ContainsKey(uniqueName))
192 T obj = dataArray[uniqueName];
197 private void OnInitializationComplete(
SyncObject obj)
200 if (ObjectAdded != null)
202 ObjectAdded(obj as T);
213 string id = existingElement.
GetName();
216 T newObject = CreateObject(existingElement);
222 dataArray[id] = newObject;