public ModularPiece InitStoreItem(ModularPieceSaveData PieceSaveData) { ModularPieceData PieceData = GameManager.I.Modular.FindPiece(PieceSaveData.ID); // find modular piece if (PieceData != null) { ModularPiece piece = InitStoreItem(PieceData, PieceSaveData.LocalScale, Vector3.zero, PieceSaveData.LocalEulerAngles, PieceSaveData.LocalPosition); piece.InitializeTextureData(PieceSaveData.TextureDataKeys); piece.InitializeColors(PieceSaveData.Colors); // initialize colors return(piece); } return(null); }
public override ModularPlacableObject Duplicate() { ModularSetStoreData SetData = new ModularSetStoreData(this); ModularSet NewSet = Management.GameManager.I.Modular.ModularBuildingSystem.InitNewModularSet(this); NewSet.AsyncLoadModularSet(SetData, (object[] Data) => { ModularSet Set = (ModularSet)Data[0]; // get set data ModularPieceSaveData PieceData = (ModularPieceSaveData)Data[1]; // get piece data Set.AddModularPiece(Management.GameManager.I.Modular.ModularBuildingSystem.InitStoreItem(PieceData), (ModularPlacableData)PieceData); // add store item }); NewSet.gameObject.layer = this.gameObject.layer; // set layer NewSet.RegisterUndoable(); // register as undoable return(NewSet); }
private ModularSet InitModularSetCore(ModularSet NewSet, ModularSetData SetData, bool InitInEditMode = false) { if (InitInEditMode) { NewSet.InitializeEditable(); } // init in edit mode NewSet.AsyncLoadModularSet(SetData, (object[] Data) => { ModularSet Set = (ModularSet)Data[0]; // get set data ModularPieceSaveData PieceData = (ModularPieceSaveData)Data[1]; // get piece data ModularPiece Piece = InitStoreItem(PieceData); // init store item to modular piece if (Piece != null) // only add when piece is not null { Set.AddModularPiece(Piece, (ModularPlacableData)PieceData); // add store item } }); return(NewSet); } // core function for init modular set
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 }