Пример #1
0
        public CubeGridArrayUnsafe(int x, int y, int z) : this()
        {
            this.GridLength      = new int3(x, y, z);
            this.wholeGridLength = new int3(x, y, z) + 2;

            this.gridStock = allocGridStock_(this.GridLength);
            this.grids     = allocGrids_(this.wholeGridLength);

            makeDefaultGrids_(ref this);

            var startGrid = new int3(-1, -1, -1);
            var endGrid   = wholeGridLength;

            this.FillCubes(startGrid, endGrid, isFillAll: false);

            return;


            NativeArray <CubeGrid32x32x32UnsafePtr> allocGrids_(int3 wholeGridLength)
            {
                var totalLength = wholeGridLength.x * wholeGridLength.y * wholeGridLength.z;

                return(new NativeArray <CubeGrid32x32x32UnsafePtr>(totalLength, Allocator.Persistent));
            }

            NativeList <CubeGrid32x32x32Unsafe> allocGridStock_(int3 gridLength)
            {
                var capacity = gridLength.x * gridLength.y * gridLength.z + 2;// +2 はデフォルト分

                return(new NativeList <CubeGrid32x32x32Unsafe>(capacity, Allocator.Persistent));
            }

            void makeDefaultGrids_(ref CubeGridArrayUnsafe ga)
            {
                ga.gridStock.AddNoResize(CubeGrid32x32x32Unsafe.GetDefault(isFillAll: false));
                ga.defaultBlankCubePtr = new CubeGrid32x32x32UnsafePtr
                {
                    p = (CubeGrid32x32x32Unsafe *)ga.gridStock.GetUnsafePtr() + 0
                };

                ga.gridStock.AddNoResize(CubeGrid32x32x32Unsafe.GetDefault(isFillAll: true));
                ga.defaultFilledCubePtr = new CubeGrid32x32x32UnsafePtr
                {
                    p = (CubeGrid32x32x32Unsafe *)ga.gridStock.GetUnsafePtr() + 1
                };
            }
        }