Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Tilemaps; // We need this to make Tiles & Tilemaps work
public class BuildTilemapFromData : MonoBehaviour {
static public Tile[] VISUAL_TILES;
[NaughtyAttributes.Button("Fill Tilemap from Map Data Text")]
void FillTileMap() {
MapInfo.LoadMap( mapDataText.text );
LoadTiles();
ShowTiles();
}
[Header( "Inscribed" )]
public string resourcesFolderHoldingTiles = "Tiles_Visual";
public TextAsset mapDataText;
public Tilemap tilemapToFill;
private TileBase[] visualTileBaseArray;
//void Awake() {
// LoadTiles();
//}
//void Start() {
// ShowTiles(); // a
//}
/// <summary>
/// Load all the Tiles from the Resources/Tiles_Visual folder into an array.
/// </summary>
void LoadTiles() {
int num;
// Load all of the Sprites from DelverTiles
Tile[] tempTiles = Resources.LoadAll<Tile>( resourcesFolderHoldingTiles ); // a
// The order of the Tiles is not guaranteed, so arrange them by number
VISUAL_TILES = new Tile[tempTiles.Length];
for ( int i = 0; i < tempTiles.Length; i++ ) {
string[] bits = tempTiles[i].name.Split( '_' ); // b
if ( int.TryParse( bits[bits.Length-1], out num ) ) { // c
VISUAL_TILES[num] = tempTiles[i];
} else {
Debug.LogError( "Failed to parse num of: " + tempTiles[i].name );// d
}
}
Debug.Log( $"Parsed {VISUAL_TILES.Length} tiles from folder: {resourcesFolderHoldingTiles}." );
}
/// <summary>
/// Uses GetMapTiles() to generate an array of TileBases with the right tile
/// in each position on the map. Then set them as a block on visualMap.
/// </summary>
void ShowTiles() {
visualTileBaseArray = GetMapTiles(); // b
tilemapToFill.SetTilesBlock( MapInfo.GET_MAP_BOUNDS(), visualTileBaseArray );
Debug.Log( $"Generated Tilemap from data to Tilemap named: {tilemapToFill.name}." );
}
/// <summary>
/// Use MapInfo.MAP to create a TileBase[] array holding the tiles to fill
/// the visualMap Tilemap.
/// </summary>
/// <returns>The TileBases for visualMap</returns>
public TileBase[] GetMapTiles() {
int tileNum;
Tile tile;
TileBase[] mapTiles = new TileBase[MapInfo.W * MapInfo.H];
for ( int y = 0; y < MapInfo.H; y++ ) {
for ( int x = 0; x < MapInfo.W; x++ ) {
tileNum = MapInfo.MAP[x, y]; // c
tile = VISUAL_TILES[tileNum]; // d
mapTiles[y * MapInfo.W + x] = tile; // e
}
}
return mapTiles;
}
}