public virtual void Initialise(VoxelTypeManager voxelTypeManager, IChunkManager chunkManager, FrameworkEventManager eventManager)
        {
            this.voxelTypeManager = voxelTypeManager;
            this.chunkManager     = chunkManager;

            directionRotator  = DirectionRotatorExtensions.Create();
            this.eventManager = eventManager;
        }
        public static NativeDirectionRotator Create()
        {
            NativeDirectionRotator native = new NativeDirectionRotator();

            native.DirectionVectors = new NativeArray <int3>(DirectionExtensions.numDirections, Allocator.Persistent);
            for (int i = 0; i < DirectionExtensions.numDirections; i++)
            {
                var vec = DirectionExtensions.Vectors[i];
                native.DirectionVectors[i] = vec.ToNative();
            }

            native.DirectionOpposites = DirectionExtensions.Opposite.ToNative(Allocator.Persistent);

            var xArr = new Direction[DirectionExtensions.numDirections];
            var yArr = new Direction[DirectionExtensions.numDirections];
            var zArr = new Direction[DirectionExtensions.numDirections];

            for (int i = 0; i < xArr.Length; i++)
            {
                xArr[i] = CardinalRotateX((Direction)i);
            }

            for (int i = 0; i < yArr.Length; i++)
            {
                yArr[i] = CardinalRotateY((Direction)i);
            }

            for (int i = 0; i < zArr.Length; i++)
            {
                zArr[i] = CardinalRotateZ((Direction)i);
            }

            native.XRotationMatix = xArr.ToNative(Allocator.Persistent);
            native.YRotationMatix = yArr.ToNative(Allocator.Persistent);
            native.ZRotationMatix = zArr.ToNative(Allocator.Persistent);

            return(native);
        }