public async Task Activate(Vector3 position, float range, ICellOperationCallbacks cellOperationCallback)
        {
            var activatedIndices = InnerSphereIndices(position, range);
            var entered          = new List <CellIndex>();
            var exited           = new List <CellIndex>();
            await Task.Run(() =>
            {
                foreach (var activatedIndex in activatedIndices)
                {
                    var found = false;
                    foreach (var activeIndex in activeIndices)
                    {
                        if (!activatedIndex.Equals(activeIndex))
                        {
                            continue;
                        }
                        found = true;
                        break;
                    }
                    if (!found)
                    {
                        entered.Add(activatedIndex);
                    }
                }

                foreach (var activeIndex in activeIndices)
                {
                    var found = false;
                    foreach (var activatedIndex in activatedIndices)
                    {
                        if (!activeIndex.Equals(activatedIndex))
                        {
                            continue;
                        }
                        found = true;
                        break;
                    }
                    if (!found)
                    {
                        exited.Add(activeIndex);
                    }
                }
            });

            foreach (var cellIndex in exited)
            {
                cellOperationCallback.Remove(cellIndex);
            }
            foreach (var cellIndex in entered)
            {
                cellOperationCallback.Create(cellIndex, RectFromIndex(cellIndex));
            }
            activeIndices = activatedIndices;
        }
        public void Activate(Vector3 position, float range, ICellOperationCallbacks cellOperationCallback)
        {
            var activatedIndices = InnerSphereIndices(position, range);

            foreach (var activatedIndex in activatedIndices)
            {
                var found = false;
                foreach (var activeIndex in activeIndices)
                {
                    if (!activatedIndex.Equals(activeIndex))
                    {
                        continue;
                    }
                    found = true;
                    break;
                }
                if (!found)
                {
                    cellOperationCallback.Create(activatedIndex, RectFromIndex(activatedIndex));
                }
            }

            foreach (var activeIndex in activeIndices)
            {
                var found = false;
                foreach (var activatedIndex in activatedIndices)
                {
                    if (!activeIndex.Equals(activatedIndex))
                    {
                        continue;
                    }
                    found = true;
                    break;
                }
                if (!found)
                {
                    cellOperationCallback.Remove(activeIndex);
                }
            }
            activeIndices = activatedIndices;
        }