protected bool IsIndextInRange(SpatialIndex a, SpatialIndex b, float range)
        {
            var xRange = Mathf.CeilToInt(range / cellSizeX);
            var yRange = Mathf.CeilToInt(range / cellSizeY);
            var zRange = Mathf.CeilToInt(range / cellSizeZ);

            return(Mathf.Abs(a.X - b.X) <= xRange && Mathf.Abs(a.Y - b.Y) <= yRange && Mathf.Abs(a.Z - b.Z) <= zRange);
        }
 public void UpdateObjectIndex()
 {
     foreach (var hashObject in objectsUpdateQuerry)
     {
         GetSpacialIndexes(hashObject.Position, out int x, out int y, out int z);
         var newIndext = new SpatialIndex(x, y, z);
         if (newIndext != hashObject.SpatialIndex)
         {
             RemoveObject(hashObject);
             hashObject.SpatialIndex = newIndext;
             AddObject(hashObject);
         }
     }
 }
        private void UpdateNearbyIndexiesCach(float radious, Vector3 centerPoint,
                                              bool usingCach = true)
        {
            if (CachedValid(radious, centerPoint) && usingCach)
            {
                return;
            }

            catchedIndexes.Clear();
            cachedIndex    = Vector3ToSpatialIndex(centerPoint);
            catchedRadious = radious;
            cachIsDerty    = false;
            GetSpacialIndexes(centerPoint + Vector3.one * radious, out int rightBoundIndex, out int upBoundIndex,
                              out int frontBoundIndex);
            GetSpacialIndexes(centerPoint - Vector3.one * radious, out int leftBoundIndex, out int downBoundIndex,
                              out int backBoundIndex);

            var querry = from index in objectsTable.Keys
                         where index.X >= leftBoundIndex && index.Y >= downBoundIndex && index.Z >= backBoundIndex &&
                         index.X <= rightBoundIndex && index.Y <= upBoundIndex && index.Z <= frontBoundIndex
                         select index;

            foreach (var index in querry)
            {
                if (objectsTable.ContainsKey(index))
                {
                    catchedIndexes.Add(index);
                }
            }

//        for (int i = leftBoundIndex; i <= rightBoundIndex; i++)
//        {
//            for (int j = downBoundIndex; j <= upBoundIndex; j++)
//            {
//                for (int k = backBoundIndex; k <= frontBoundIndex; k++)
//                {
//                    var temp = new SpatialIndex(i, j, k);
//                    // temp.SetValue(i, j, k);
//
//                    if (objectsTable.ContainsKey(temp))
//                    {
//                        results.Add(temp);
//                        catchedIndexes.Add(temp);
//                    }
//                }
//            }
//        }
        }