using UnityEngine;

namespace Gamelogic.Grids.Examples
{
	public class HillsPointyHexMap : TransformedMap<PointyHexPoint>
	{
		private class MapData
		{
			private readonly float amplitude;
			private readonly Vector2 frequency;

			public MapData(float amplitude, Vector2 frequency)
			{
				this.amplitude = amplitude;
				this.frequency = frequency;
			}

			public Vector3 To3D(Vector3 point)
			{
				return new Vector3(point.x, point.z + amplitude * Mathf.PerlinNoise(point.x*frequency.x, point.y*frequency.y), point.y);
			}
		}

		public HillsPointyHexMap(Vector2 cellDimensions, float amplitude, Vector2 frequency) :
			base(
			new PointyHexMeshMap(cellDimensions, new PointyHexMap(cellDimensions)),
			new MapData(amplitude, frequency).To3D)
		{
		}
	}
}