예제 #1
0
        public void ForEachInRadius(Vector3 worldPosition, float radius, GridElementCallback callback)
        {
            var radiusX = WorldToGridX(radius);
            var radiusZ = WorldToGridZ(radius);

            var centerX = WorldToGridX(worldPosition.x);
            var centerZ = WorldToGridZ(worldPosition.z);

            for (var x = -radiusX; x <= radiusX; x++)
            {
                for (var z = -radiusZ; z <= radiusZ; z++)
                {
                    if (new Vector2(x, z).sqrMagnitude > radiusX * radiusZ)
                    {
                        continue;
                    }

                    var gridPositionX = x + centerX;
                    var gridPositionZ = z + centerZ;

                    var itemIndex = gridPositionZ * ResolutionX + gridPositionX;

                    if (itemIndex < 0 || itemIndex >= _items.Length)
                    {
                        continue;
                    }

                    callback(_items, gridPositionX, gridPositionZ, itemIndex);
                }
            }
        }
예제 #2
0
        public void ForEachInRect(int x, int z, int itemsX, int itemsZ, GridElementCallback callback)
        {
            for (var currentZ = 0; currentZ <= itemsZ; currentZ++)
            {
                for (var currentX = 0; currentX <= itemsX; currentX++)
                {
                    var gridPositionX = currentX + x;
                    var gridPositionZ = currentZ + z;

                    var itemIndex = gridPositionZ * ResolutionX + gridPositionX;

                    if (itemIndex < 0 || itemIndex >= _items.Length)
                    {
                        continue;
                    }

                    callback(_items, gridPositionX, gridPositionZ, itemIndex);
                }
            }
        }