Hello, I’m trying to create terrain but when added this line “tileInfo.Add(new TileInfo(sprite, x, y, GetTile(sprite).speed));” I get a strange result. Does anyone know what’ wrong with my code or what I’m doing wrong ?
Without that line: Screenshot by Lightshot
With that line: Screenshot by Lightshot
public static MapGenerator mapGenerator;
public List<TileInfo> tileInfo;
public GameObject tilePrefab;
public GameObject map;
public List<Tiles> tiles;
public int mapSize;
private Dictionary<int, Tiles> tilesToChooseFrom = new Dictionary<int, Tiles>();
[System.Serializable]
public class Tiles
{
public string tileName;
public Sprite tileSprite;
public float speed;
public int spawnChance;
public int spreadChance;
}
[System.Serializable]
public class TileInfo
{
public Sprite tile;
public int x, y;
public float speed;
private Sprite sprite;
public TileInfo(Sprite sprite, int x, int y, float speed)
{
this.sprite = sprite;
this.x = x;
this.y = y;
this.speed = speed;
}
}
public void CreateMap()
{
int totalWeight = 0;
foreach (Tiles tile in tiles)
{
tilesToChooseFrom.Add(tile.spawnChance, tile);
totalWeight = totalWeight + tile.spawnChance;
}
for (int y = 0; y < mapSize; y++)
{
for (int x = 0; x < mapSize; x++)
{
Sprite sprite = null;
if (GroupedTile(x , y))
{
int spreadChance = 0;
foreach (KeyValuePair<int, Tiles> entry in tilesToChooseFrom)
{
//Debug.Log(map.transform.Find("tile:" + (x - 1) + "-" + y).GetComponent<SpriteRenderer>().sprite);
if(map.transform.Find("tile:" + (x - 1) + "-" + y).GetComponent<SpriteRenderer>().sprite.name == "Dirt")
{
spreadChance = GetTile(map.transform.Find("tile:" + x + "-" + (y -1)).GetComponent<SpriteRenderer>().sprite).spreadChance;
}else { spreadChance = GetTile(map.transform.Find("tile:" + (x - 1) + "-" + y).GetComponent<SpriteRenderer>().sprite).spreadChance; }
}
int chance = Random.Range(1, 100);
if(chance <= spreadChance)
{
if (map.transform.Find("tile:" + (x - 1) + "-" + y).GetComponent<SpriteRenderer>().sprite.name == "Dirt")
{
sprite = map.transform.Find("tile:" + x + "-" + (y -1)).GetComponent<SpriteRenderer>().sprite;
}
else { sprite = map.transform.Find("tile:" + (x - 1) + "-" + y).GetComponent<SpriteRenderer>().sprite; }
}else
{
chance = Random.Range(1, totalWeight);
int counter = 0;
foreach (KeyValuePair<int, Tiles> entry in tilesToChooseFrom)
{
counter = counter + entry.Key;
if (chance <= counter)
{
sprite = entry.Value.tileSprite;
break;
}
}
}
}
else
{
int chance = Random.Range(1, totalWeight);
int counter = 0;
foreach (KeyValuePair<int, Tiles> entry in tilesToChooseFrom)
{
counter = counter + entry.Key;
if (chance <= counter)
{
sprite = entry.Value.tileSprite;
break;
}
}
}
GameObject tile = Instantiate(tilePrefab, new Vector2(x, y), Quaternion.identity);
tile.transform.SetParent(map.transform);
tile.name = "tile:" + x + "-" + y;
tile.GetComponent<SpriteRenderer>().sprite = sprite;
tileInfo.Add(new TileInfo(sprite, x, y, GetTile(sprite).speed));
}
}
for(int i = 0; i < map.transform.childCount; i++)
{
GameObject tile = map.transform.GetChild(i).gameObject;
int x = int.Parse(tile.name.Split(':')[1].Split('-')[0]);
int y = int.Parse(tile.name.Split(':')[1].Split('-')[1]);
int closedSides = 3;
int currentSides = 0;
Sprite tileSprite = null;
if (map.transform.Find("tile:" + (x - 1) + "-" + (y - 1)) & map.transform.Find("tile:" + (x + 1) + "-" + (y + 1)))
{
if (map.transform.Find("tile:" + (x - 1) + "-" + y).GetComponent<SpriteRenderer>().sprite.name != "Dirt") {
tileSprite = map.transform.Find("tile:" + (x - 1) + "-" + y).GetComponent<SpriteRenderer>().sprite;
currentSides++;
}
if (map.transform.Find("tile:" + x + "-" + (y -1)).GetComponent<SpriteRenderer>().sprite.name != "Dirt") {
tileSprite = map.transform.Find("tile:" + x + "-" + (y - 1)).GetComponent<SpriteRenderer>().sprite;
currentSides++;
}
if (map.transform.Find("tile:" + (x + 1) + "-" + y).GetComponent<SpriteRenderer>().sprite.name != "Dirt") {
tileSprite = map.transform.Find("tile:" + (x + 1) + "-" + y).GetComponent<SpriteRenderer>().sprite;
currentSides++;
}
if (map.transform.Find("tile:" + x + "-" + (y + 1)).GetComponent<SpriteRenderer>().sprite.name != "Dirt") {
tileSprite = map.transform.Find("tile:" + x + "-" + (y + 1)).GetComponent<SpriteRenderer>().sprite;
currentSides++;
}
if(currentSides >= closedSides)
{
tile.GetComponent<SpriteRenderer>().sprite = tileSprite;
}
}
}
}
private bool GroupedTile(int x, int y)
{
if (map.transform.Find("tile:" + (x -1) + "-" + (y -1)))
{
//Debug.Log(map.transform.Find("tile:" + x + "-" + y));
if (map.transform.Find("tile:" + (x -1) + "-" + y).GetComponent<SpriteRenderer>().sprite.name != "Dirt") {
return true;
}else if (map.transform.Find("tile:" + x + "-" + (y - 1)).GetComponent<SpriteRenderer>().sprite.name != "Dirt")
{
return true;
}
}
return false;
}
public Tiles GetTile(Sprite sprite)
{
foreach(Tiles tile in tiles)
{
if(tile.tileSprite = sprite)
{
return tile;
}
}
return null;
}
private void Start()
{
CreateMap();
}