public void RegisterToBatchedUpdate(IBatchedUpdateHandler batchUpdateHandler, int batchInterval) { batchInterval = Mathf.Clamp(batchInterval, 1, int.MaxValue); // if : It doesn't have this Interface if (!BatchUpdateHandlerTracker.Contains(batchUpdateHandler)) { int instanceIndex = HasThisInstance(batchInterval); if (instanceIndex == -1) { BatchUpdateInstances.Add(new BatchUpdateInstance(batchInterval)); instanceIndex = BatchUpdateInstances.Count - 1; NumberOfInstances++; } int bucketIndex = BatchUpdateInstances[instanceIndex].AddToBucket(batchUpdateHandler); BatchUpdateHandlerTracker.Add( batchUpdateHandler, new UpdateInfo() { instanceIndex = instanceIndex, bucketIndex = bucketIndex } ); return; } //Debug.LogError(string.Format("{0} is already in registered in BatchUpdate", batchUpdateHandler)); }
private void ShiftInstanceIndexForRemoving(int removingIndex) { int numberOfItem = BatchUpdateHandlerTracker.Count; IBatchedUpdateHandler[] batchedUpdateHandlers = new IBatchedUpdateHandler[numberOfItem]; ICollection keys = BatchUpdateHandlerTracker.Keys; keys.CopyTo(batchedUpdateHandlers, 0); ICollection values = BatchUpdateHandlerTracker.Values; UpdateInfo[] updateInfos = new UpdateInfo[numberOfItem]; values.CopyTo(updateInfos, 0); for (int i = 0; i < numberOfItem; i++) { if (updateInfos[i].instanceIndex > 0 && updateInfos[i].instanceIndex > removingIndex) { //Debug.Log(string.Format( // "InstanceRemoving({0}) : InstanceIndex_PREV ({1}) : InstanceIndex_NEW ({2})", // updateInfos[i].instanceIndex, // updateInfos[i].instanceIndex, // updateInfos[i].instanceIndex - 1)); updateInfos[i].instanceIndex--; BatchUpdateHandlerTracker[batchedUpdateHandlers[i]] = updateInfos[i]; } } }
public bool AddToBucket(IBatchedUpdateHandler batchUpdateHandler) { if (HashSetForIBatchHandler.Add(batchUpdateHandler)) { NumberOfBatchedUpdateHandlerInBucket++; return(true); } return(false); }
public bool RemovedFromBucket(IBatchedUpdateHandler batchUpdateHandler, int bucketIndex) { if (bucketIndex >= NumberOfActiveBucket) { //Debug.LogError(string.Format("bucketIndex({0}) >= NumberOfActiveBucket({1}) : Failed To Remove", bucketIndex, NumberOfActiveBucket)); return(false); } return(BatchUpdateBuckets[bucketIndex].Remove(batchUpdateHandler)); }
public void UnregisterFromBatchedUpdate(IBatchedUpdateHandler batchUpdateHandler) { UpdateInfo updateInfo = GetUpdateInfoInBatchedUpdateTracker(HasTheKeyInBatchUpdateTracker(batchUpdateHandler)); if (updateInfo != null) { _queueToRemove.Enqueue(new RemoveInfo() { batchedUpdateHandler = batchUpdateHandler, updateInfo = updateInfo }); //Debug.LogError(string.Format("EnquedToRemove : InstanceIndex({0}), BucketIndex ({1})", updateInfo.instanceIndex, updateInfo.bucketIndex)); } }
public bool Remove(IBatchedUpdateHandler batchUpdateHandler) { if (HashSetForIBatchHandler.Contains(batchUpdateHandler)) { HashSetForIBatchHandler.Remove(batchUpdateHandler); NumberOfBatchedUpdateHandlerInBucket--; return(true); } //Debug.LogError(string.Format("BatchUpdteHander = {0}, could not be found on the following bucket", batchUpdateHandler)); return(false); }
private int HasTheKeyInBatchUpdateTracker(IBatchedUpdateHandler batchedUpdateHandlerReference) { int index = 0; ICollection keyValues = BatchUpdateHandlerTracker.Keys; foreach (IBatchedUpdateHandler batchedUpdateHandler in keyValues) { if (batchedUpdateHandlerReference == batchedUpdateHandler) { return(index); } index++; } return(-1); }
private void TrackerView() { showTracker.boolValue = EditorGUILayout.Foldout( showTracker.boolValue, showTracker.name ); if (showTracker.boolValue) { int numberOfItem = _reference.BatchUpdateHandlerTracker.Count; IBatchedUpdateHandler[] batchedUpdateHandlers = new IBatchedUpdateHandler[numberOfItem]; ICollection keys = _reference.BatchUpdateHandlerTracker.Keys; keys.CopyTo(batchedUpdateHandlers, 0); BatchedUpdate.UpdateInfo[] updateInfos = new BatchedUpdate.UpdateInfo[numberOfItem]; ICollection values = _reference.BatchUpdateHandlerTracker.Values; values.CopyTo(updateInfos, 0); EditorGUI.indentLevel += 1; for (int i = 0; i < numberOfItem; i++) { EditorGUILayout.BeginVertical(GUI.skin.box); { EditorGUILayout.LabelField(string.Format("Element({0})", i), EditorStyles.boldLabel); EditorGUI.indentLevel += 1; EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField(string.Format("Key : {0}", batchedUpdateHandlers[i])); EditorGUILayout.LabelField(string.Format("Value : {0}", batchedUpdateHandlers[i])); } EditorGUILayout.EndHorizontal(); EditorGUI.indentLevel -= 1; } EditorGUILayout.EndVertical(); } EditorGUI.indentLevel -= 1; } }
public int AddToBucket(IBatchedUpdateHandler batchUpdateHandler) { int currentBucketIndex = _currentBucketIndex; if (currentBucketIndex >= NumberOfActiveBucket && NumberOfActiveBucket < Interval) { BatchUpdateBuckets.Add(new BatchUpdateBucket(currentBucketIndex, Interval)); NumberOfActiveBucket++; } BatchUpdateBuckets[currentBucketIndex].AddToBucket(batchUpdateHandler); _currentBucketIndex++; if (_currentBucketIndex >= Interval) { _currentBucketIndex = 0; } return(currentBucketIndex); }