Refreshes the target BlockMap, optionally randomising the variations of the Block within. This is a useful function when procedurally generating large levels. If we utilize the AddBlockToMap function without refreshing upon addition, and only refresh at the end of our generation using this function, we will save valuable, delicious time. Definition:
void RefreshMap(BlockMap map, bool randomise)
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); } } |