Added new tile generation to the game
This commit is contained in:
220
Assets/Scripts/TileType.cs
Normal file
220
Assets/Scripts/TileType.cs
Normal file
@@ -0,0 +1,220 @@
|
||||
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<TileType> getPossibleNeighbours(TileType toCheck)
|
||||
{
|
||||
List<TileType> result = new List<TileType>();
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user