/// <summary> /// Loaded a Block from an BlockSave, but with a new Guid. Block can be loaded with an offset. Used for loading prefabs /// </summary> /// <param name="blockSave">The BlockSave to load</param> /// <param name="offset">Optional offset</param> /// <returns></returns> public GameObject LoadBlockWithNewGuid(BlockSave blockSave, Vector3 offset = new Vector3()) { GameObject restoredBlock = BlockGenerator.GenerateBlock(blockSave.GetBlockStructure()); restoredBlock.transform.position = blockSave.position + offset; restoredBlock.transform.rotation = blockSave.rotation; restoredBlock.GetComponent <Rigidbody>().constraints = RigidbodyConstraints.FreezeAll; restoredBlock.GetComponentInChildren <TapHandler>().AcceptCollisionsAsConnected(true); restoredBlock.GetComponentInChildren <GrooveHandler>().AcceptCollisionsAsConnected(true); return(restoredBlock); }
/// <summary> /// Loads a Block from a BlockSave and freezes the Block, Block can be loaded with offset /// </summary> /// <param name="blockSave">The BlockSave to load</param> /// <param name="offset">Optionak offset</param> /// <returns></returns> public GameObject LoadBlock(BlockSave blockSave, Vector3 offset = new Vector3()) { GameObject restoredBlock = BlockGenerator.GenerateBlock(blockSave.GetBlockStructure()); restoredBlock.transform.position = blockSave.position + offset; restoredBlock.transform.rotation = blockSave.rotation; restoredBlock.GetComponent <BlockCommunication>().Guid = blockSave.guid; restoredBlock.GetComponent <BlockGeometryScript>().TopColliderContainer.layer = 8; restoredBlock.GetComponent <Rigidbody>().constraints = RigidbodyConstraints.FreezeAll; restoredBlock.GetComponentInChildren <TapHandler>().AcceptCollisionsAsConnected(true); restoredBlock.GetComponentInChildren <GrooveHandler>().AcceptCollisionsAsConnected(true); return(restoredBlock); }
/// <summary> /// Connect all Blocks together, information for which Block to connect is in BlockSave, also resets AcceptCollisionsAsConnected /// to false again, as the physical connection makeing is finshed. /// </summary> /// <param name="blockSave">Holds the connections</param> /// <param name="saveGame">Holds guids</param> public void ConnectBlocks(BlockSave blockSave, SaveGame saveGame = null) { GameObject block = BlockManager.GetBlockByGuid(blockSave.guid); //Reset the Groove- and Tap Handler block.GetComponentInChildren <TapHandler>().AcceptCollisionsAsConnected(false); block.GetComponentInChildren <GrooveHandler>().AcceptCollisionsAsConnected(false); foreach (ConnectedBlockSerialized connection in blockSave.connectedBlocks) { //Only connect the Block if no SaveGame was provided or if the other Block to connect to is found in the SaveGame. //This is to prevent Prefabs from connecting to non-Prefab Blocks when loaded //Floorplates are not included in the Savegame, so they are check manually by the Guid if (saveGame == null || saveGame.GetBlockSaveByGuid(connection.guid) != null || connection.guid.ToString().StartsWith("aaaaaaaa")) { block.GetComponent <BlockCommunication>().ConnectBlocks(block, BlockManager.GetBlockByGuid(connection.guid), connection.connectedPins, connection.connectedOn); } } }
/// <summary> /// Loads a BlockSave from a given HistoryObject and SaveGame /// </summary> /// <param name="save">The SaveGame containing the BlockSave</param> /// <param name="historyObject">The HistoryObject to load</param> public void LoadBlock(SaveGame save, HistoryObject historyObject) { BlockSave blockSave = save.GetBlockSaveByGuid(historyObject.guid); LoadBlock(blockSave); }