Tidy Tile Mapper‎ > ‎Runtime API‎ > ‎BlockUtilities‎ > ‎

RemoveBlockFromMap

Removes a block from the targeted BlockMap.

This is an interesting function, as it behaves as a stripped-down equivalent of using the AddBlockToMap function with a null argument.

If you wish to refresh your surrounding blocks upon addition, I recommend using the AddBlockToMap function with a null argument, otherwise - 

Definition:

RemoveBlockFromMap(BlockMap map, int x, int y, int depth, bool addEmptyBlock, bool destroyImmediate)

Return value Description
void Nothing but positive sentiments.

Argument DataType Description
map BlockMap The BlockMap from which this Block will be removed.
x int The x coordinate of the Block to be removed.
y     int The y coordinate of the Block to be removed.
depth int The depth (z) coordinate of the Block to be removed.
addEmptyBlock bool Should we add an empty block to the coordinate after removing the existing block?
destroyImmediateboolShould we utilize DestroyImmediate() instead of Destroy() when destroying the existing block? Useful for Editor scripting versus runtime (event) scripting.

Example:

using UnityEngine;
using DopplerInteractive.TidyTileMapper.Utilities;

public class MapDemo : MonoBehaviour {
    
  //This is the map that we will create and subsequently modify
  BlockMap map = null;
  
  //Our map properties - correlate directly to the map properties in the Editor Extension
  public Vector3 tileScale = new Vector3(1.0f,1.0f,1.0f);
  public string mapName = "Our demonstration map";
  public BlockMap.GrowthAxis growthAxis = BlockMap.GrowthAxis.Up;
  
  //The dimensions of our demo map
  public int mapWidth;
  public int mapHeight;
  
  //This is the Block that we will be using to populate our map
  public Block blockPrefab;
  
  void Awake(){
    
    //Step one: Let's create a map
    map = BlockUtilities.CreateBlockMap(mapName, tileScale, 5, 5, growthAxis);
    
    //Let's enable pooling and kill many demonstration birds with one demonstration stone
    AssetPool.EnablePooling();
    
    GenerateMap();
    
  }
  
  void Update(){
    
    if(Input.GetMouseButtonDown(0)){
      
      //We're going to cast a ray, see if we hit a block, and toggle it
      
      Ray r = Camera.mainCamera.ScreenPointToRay(Input.mousePosition);
      
      RaycastHit hitInfo;
      
      if(Physics.Raycast(r,out hitInfo,mapHeight*1.5f)){
        
        Block b = hitInfo.collider.GetComponent<Block>();
        
        if(b != null){
          
          Block newBlock = null;
          
          if(b.isNullBlock){
            //This block is empty, so make it full  
            GameObject o = AssetPool.Instantiate(blockPrefab.gameObject);
            newBlock = o.GetComponent<Block>();
            
            //Done, add the new block to the map
            BlockUtilities.AddBlockToMap(map,newBlock,false,0,false,b.x,b.y,b.depth,false,false);  
                    
          }
          else{
            //This block is not empty, so make it empty
            BlockUtilities.RemoveBlockFromMap(map,b.x,b.y,b.depth,true,false);
        
          }
          
        }
        
      }
      
    }
    
  }
  
  void GenerateMap(){
    
    //Let's build a map
    for(int x = 0; x < mapWidth; x++){
      
      for(int y = 0; y < mapHeight; y++){
        
        //Controversially, we're going to populate our map entirely with blocks at first
        //After this, we will click on these blocks and replace them with empty blocks
        
        GameObject o = AssetPool.Instantiate(blockPrefab.gameObject);
        Block newBlock = o.GetComponent<Block>();
        
        BlockUtilities.AddBlockToMap(map,newBlock,false,0,false,x,y,0,false,false);
        
      }
      
    }

    BlockUtilities.RefreshMap(map,true);
    
  }
    
}


Comments