public void AsyncLoadModularSet(ModularSetData SetData, Utils.Delegates.GenericDataCallbak InitModularPiece)
        {
            // set base settings
            this.gameObject.name     = SetData.SetName;
            this._BoundsCenterOffset = SetData.BoundsCenterOffset;             // set center offset
            this.Bounds = new AxisBounds((transform.position + _BoundsCenterOffset).ToWorldRotationFull(Bounds.LocalTransRotation, Bounds.LocalTransPosition), SetData.BoundSize, this.transform, false);
            this.GridCenterHolder.transform.localPosition = SetData.LocalGridCenter;

            // init modular pieces
            StartCoroutine(AsyncLoadPieces(SetData, InitModularPiece));             // start load coroutinte
        }
        private IEnumerator AsyncLoadPieces(ModularSetData SetData, Utils.Delegates.GenericDataCallbak InitModularPiece)
        {
            int FramesWait = Mathf.CeilToInt((float)(SetData.Pieces.Length / Management.GameManager.I.Modular.LoadingFrameDuration));
            int count      = FramesWait;

            for (int i = 0; i < SetData.Pieces.Length; i++)
            {
                ModularPieceSaveData Piece = SetData.Pieces [i];
                InitModularPiece.Invoke(new object[] { this, Piece });              // invoke callback with piece and current set
                count--;

                if (count <= 0)
                {
                    count = FramesWait;
                    yield return(null);
                }
            }
            // is done with loading
            AutoFillRenderSet();             // auto fill
        }