using UnityEngine; using UnityEngine.Tilemaps; public class MapGenerator : MonoBehaviour { [Header("Map Size")] [SerializeField] private int width = 64; [SerializeField] private int height = 64; [Header("Map Shape")] [SerializeField] private float shapePower = 2.4f; [SerializeField] private int edgeMargin = 2; [Header("References")] [SerializeField] private Tilemap groundTilemap; [SerializeField] private TileBase groundTile; [Header("Generation")] [SerializeField] private bool centerMap = true; [ContextMenu("Generate Map")] public void GenerateMap() { if (groundTilemap == null) { Debug.LogError("MapGenerator: Ground Tilemap не назначен."); return; } if (groundTile == null) { Debug.LogError("MapGenerator: Ground Tile не назначен."); return; } groundTilemap.ClearAllTiles(); int startX = centerMap ? -width / 2 : 0; int startY = centerMap ? -height / 2 : 0; float centerX = (width - 1) / 2f; float centerY = (height - 1) / 2f; float radiusX = (width / 2f) - edgeMargin; float radiusY = (height / 2f) - edgeMargin; for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { float normalizedX = (x - centerX) / radiusX; float normalizedY = (y - centerY) / radiusY; float shape = Mathf.Pow(Mathf.Abs(normalizedX), shapePower) + Mathf.Pow(Mathf.Abs(normalizedY), shapePower); if (shape <= 1f) { Vector3Int position = new Vector3Int( startX + x, startY + y, 0 ); groundTilemap.SetTile(position, groundTile); } } } Debug.Log($"Map generated: {width}x{height}"); } [ContextMenu("Clear Map")] public void ClearMap() { if (groundTilemap != null) { groundTilemap.ClearAllTiles(); Debug.Log("Map cleared."); } } }