/// <summary>
        /// Generate land
        /// </summary>
        /// <param name="map"></param>
        public LandMap Generate(LandMap map)
        {
            foreach (var zoneMarkup in _land.Zones.Where(z => z.Cell.IsClosed))
            {
                ZoneGenerator generator = null;
                if (zoneMarkup.Type == ZoneType.Hills)
                {
                    generator = new HillsGenerator(zoneMarkup, _land, _settings);
                }
                else if (zoneMarkup.Type == ZoneType.Lake)
                {
                    generator = new LakeGenerator(zoneMarkup, _land, _settings);
                }
                else if (zoneMarkup.Type == ZoneType.Forest)
                {
                    generator = new ForestGenerator(zoneMarkup, _land, _settings);
                }
                else if (zoneMarkup.Type == ZoneType.Mountains)
                {
                    generator = new MountainsGenerator(zoneMarkup, _land, _settings);
                }
                else if (zoneMarkup.Type == ZoneType.Snow)
                {
                    generator = new SnowGenerator(zoneMarkup, _land, _settings);
                }
                else if (zoneMarkup.Type >= ZoneType.Hills && zoneMarkup.Type <= ZoneType.Lake)
                {
                    generator = new DefaultGenerator(zoneMarkup, _land, _settings);
                }
                else if (zoneMarkup.Type >= ZoneType.Influence1 && zoneMarkup.Type <= ZoneType.Influence8)
                {
                    generator = new FlatGenerator(zoneMarkup, _land, _settings);
                }
                else if (zoneMarkup.Type == ZoneType.Checkboard)
                {
                    generator = new CheckboardGenerator(zoneMarkup, _land, _settings);
                }
                else if (zoneMarkup.Type == ZoneType.Cone)
                {
                    generator = new ConeGenerator(zoneMarkup, _land, _settings);
                }
                else if (zoneMarkup.Type == ZoneType.Slope)
                {
                    generator = new SlopeGenerator(zoneMarkup, _land, _settings);
                }


                if (generator != null)
                {
                    var zoneMap = generator.Generate();
                    map.Add(zoneMap);
                }
            }

            return(map);
        }
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();
        slope = target as SlopeGenerator;

        if (GUILayout.Button("Generate Slope"))
        {
            DestroySlope();

            //create object name
            string meshPath = "Assets/Models/Generated/" + slope.name + ".asset";
            //start undo event
            Undo.SetCurrentGroupName("Generate Slope");

            //generate mesh
            Mesh mesh = slope.MakeMesh();

            //save mesh
            AssetDatabase.CreateAsset(mesh, meshPath);
            AssetDatabase.SaveAssets();
            //AssetDatabase.LoadAssetAtPath(meshPath,);
            Undo.RegisterCreatedObjectUndo(mesh, "Generate Mesh");

            //create mesh object
            GameObject go = slope.CreateSlopeObject(mesh);
            Undo.RegisterCreatedObjectUndo(go, "Generate Slope");

            //end undo event
            Undo.CollapseUndoOperations(Undo.GetCurrentGroup());

            EditorUtility.SetDirty(slope);
        }
        if (GUILayout.Button("Destroy Slope"))
        {
            DestroySlope();
        }
    }