123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- using UnityEngine;
- using System.Collections;
- using System;
- public class MapGenerator : MonoBehaviour
- {
- public int width;
- public int height;
- public string seed;
- public bool useRandomSeed;
- [Range(0, 100)]
- public int randomFillPercent;
- int[,] map;
- void Start()
- {
- GenerateMap();
- }
- void Update()
- {
- if (Input.GetMouseButtonDown(0))
- {
- GenerateMap();
- }
- }
- void GenerateMap()
- {
- map = new int[width, height];
- RandomFillMap();
- for (int i = 0; i < 5; i++)
- {
- SmoothMap();
- }
- MeshGenerator meshGen = GetComponent<MeshGenerator>();
- meshGen.GenerateMesh(map, 1);
- }
- void RandomFillMap()
- {
- if (useRandomSeed)
- {
- seed = Time.time.ToString();
- }
- System.Random pseudoRandom = new System.Random(seed.GetHashCode());
- for (int x = 0; x < width; x++)
- {
- for (int y = 0; y < height; y++)
- {
- if (x == 0 || x == width - 1 || y == 0 || y == height - 1)
- {
- map[x, y] = 1;
- }
- else
- {
- map[x, y] = (pseudoRandom.Next(0, 100) < randomFillPercent) ? 1 : 0;
- }
- }
- }
- }
- void SmoothMap()
- {
- for (int x = 0; x < width; x++)
- {
- for (int y = 0; y < height; y++)
- {
- int neighbourWallTiles = GetSurroundingWallCount(x, y);
- if (neighbourWallTiles > 4)
- map[x, y] = 1;
- else if (neighbourWallTiles < 4)
- map[x, y] = 0;
- }
- }
- }
- int GetSurroundingWallCount(int gridX, int gridY)
- {
- int wallCount = 0;
- for (int neighbourX = gridX - 1; neighbourX <= gridX + 1; neighbourX++)
- {
- for (int neighbourY = gridY - 1; neighbourY <= gridY + 1; neighbourY++)
- {
- if (neighbourX >= 0 && neighbourX < width && neighbourY >= 0 && neighbourY < height)
- {
- if (neighbourX != gridX || neighbourY != gridY)
- {
- wallCount += map[neighbourX, neighbourY];
- }
- }
- else
- {
- wallCount++;
- }
- }
- }
- return wallCount;
- }
- }
|