using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UnityEngine; namespace Assets.Scripts { public enum TileType { PLAIN, HILLS, FOREST, MOUNTAINS, LAKE, CITY, DESERT, NULL } static class TileTypeMethods { public static TileType getRandomType(int index) { return (TileType)index; } public static int getHighest() { return (int)TileType.DESERT; } public static List getPossibleNeighbours(TileType toCheck) { List result = new List(); switch (toCheck) { case TileType.PLAIN: result.Add(TileType.PLAIN); result.Add(TileType.FOREST); result.Add(TileType.LAKE); result.Add(TileType.MOUNTAINS); result.Add(TileType.DESERT); result.Add(TileType.HILLS); break; case TileType.FOREST: result.Add(TileType.PLAIN); result.Add(TileType.FOREST); break; case TileType.MOUNTAINS: result.Add(TileType.PLAIN); result.Add(TileType.MOUNTAINS); break; case TileType.LAKE: result.Add(TileType.PLAIN); result.Add(TileType.LAKE); result.Add(TileType.DESERT); result.Add(TileType.CITY); break; case TileType.DESERT: result.Add(TileType.PLAIN); result.Add(TileType.LAKE); result.Add(TileType.DESERT); break; case TileType.HILLS: result.Add(TileType.PLAIN); result.Add(TileType.HILLS); break; case TileType.CITY: result.Add(TileType.LAKE); break; } return result; } public static Color getLowestColor(TileType type) { Color32 result; switch (type) { case TileType.PLAIN: result = new Color32(0, 150, 0, 255); break; case TileType.HILLS: result = new Color32(0, 150, 0, 255); break; case TileType.FOREST: result = new Color32(0, 150, 0, 255); break; case TileType.MOUNTAINS: result = new Color32(0, 150, 0, 255); break; case TileType.LAKE: result = new Color32(30, 110, 190, 255); break; case TileType.DESERT: result = new Color32(219, 186, 162, 255); break; default: result = new Color32(0, 150, 0, 255); break; } return result; } public static Color32 getHighestColor(TileType type) { Color32 result; switch (type) { case TileType.PLAIN: result = new Color32(0, 185, 0, 255); break; case TileType.HILLS: result = new Color32(0, 185, 0, 255); break; case TileType.FOREST: result = new Color32(0, 110, 20, 255); break; case TileType.MOUNTAINS: result = new Color32(140, 140, 140, 255); break; case TileType.LAKE: result = new Color32(0, 150, 0, 255); break; case TileType.DESERT: result = new Color32(237, 201, 175, 255); break; default: result = new Color32(0, 185, 0, 255); break; } return result; } public static float[] generateSamples(TileType type, Vector3[] vertices, System.Random rand) { float[] result = new float[vertices.Length]; float part1; float part2; float[] lowModifier = new float[2]; float[] highModifier = new float[2]; switch (type) { case TileType.PLAIN: lowModifier[0] = 0.2f; lowModifier[1] = 0.1f; highModifier[0] = 0.2f; highModifier[1] = 0.1f; break; case TileType.HILLS: lowModifier[0] = 0.2f; lowModifier[1] = 0.1f; highModifier[0] = 0.5f; highModifier[1] = 0.1f; break; case TileType.FOREST: lowModifier[0] = 0.15f; lowModifier[1] = 0.1f; highModifier[0] = 0.3f; highModifier[1] = 0.1f; break; case TileType.MOUNTAINS: lowModifier[0] = 0.2f; lowModifier[1] = 0.3f; highModifier[0] = 1.25f; highModifier[1] = 0.2f; break; case TileType.LAKE: lowModifier[0] = 0.2f; lowModifier[1] = 0.1f; highModifier[0] = 0.3f; highModifier[1] = 0.1f; break; case TileType.DESERT: lowModifier[0] = 0.2f; lowModifier[1] = 0.1f; highModifier[0] = 0.5f; highModifier[1] = 0.1f; break; case TileType.CITY: lowModifier[0] = 0.1f; lowModifier[1] = 0.1f; highModifier[0] = 0.1f; highModifier[1] = 0.1f; break; } for (int i = 0; i < result.Length; i++) { part1 = Mathf.PerlinNoise(vertices[i].x, vertices[i].z) - lowModifier[0] * rand.Next(0, 6); part2 = Mathf.PerlinNoise(vertices[i].x, vertices[i].z) + highModifier[0] * rand.Next(0, 6); result[i] = part1 * lowModifier[1] + part2 * highModifier[0]; } result = adaptType(type, result); return result; } private static float[] adaptType(TileType type, float[] basis) { float[] result = basis; for (int i = 0; i < result.Length; i++) { switch (type) { case TileType.LAKE: result[i] = basis[i] - 3; break; case TileType.MOUNTAINS: result[i] = basis[i] + 3; break; } } return result; } } }