// Start is called before the first frame update void Start() { // Heightmap map = new Heightmap(dims, dims); Heightmap map = rend.GetComponent <Heightmap>(); var filter_water = MapFilterFactory.GetPerlinBand(dims, dims, 1.0f, 0.4f, 0.43f); var filter_exterior = MapFilterFactory.GetBlendedExteriorWeight(dims, dims, 0.5f); var filter_lattice = MapFilterFactory.GetPerlinBand(dims, dims, 10.0f, 0.3f, 0.4f); var filter_mountains = MapFilterFactory.GetPerlinBand(dims, dims, 5.0f, 0.4f, 0.5f); var filter_forests = MapFilterFactory.GetPerlinBand(dims, dims, 10.0f, 0.4f, 0.5f); var filter_plains = MapFilterFactory.GetPerlinBand(dims, dims, 5.0f, 0.4f, 0.5f); map.MapFromTo(-1, 5, -1, filter_water); map.MapFromTo(-1, 10, 1, filter_lattice); map.MapFromTo(1, 0, 1, filter_exterior); map.MapFromTo(1, 9, filter_mountains); map.MapFromTo(1, 8, filter_forests); map.MapFromTo(1, 7, filter_plains); System.Action <int, int> spawnMapEntitiesOnPlains = (int i, int j) => { Vector3 p = new Vector3(j, i); GameObject go = new GameObject(); go.transform.SetParent(transform, true); go.transform.localRotation = Quaternion.identity; go.transform.localPosition = new Vector3((p.x + 0.5f - dims / 2) / transform.localScale.x, (p.y + 0.5f - dims / 2) / transform.localScale.y, 0.0f); go.transform.localScale = new Vector3(1.0f / transform.localScale.x, 1.0f / transform.localScale.y, 1.0f / transform.localScale.z); int interval = Random.Range(0, TickMaster.maxSeconds); System.Action a = () => { // TODO generate in a static stateless factory so that we do not pin a bunch of references to objects into our memory GameObject subobj = GameObject.CreatePrimitive(PrimitiveType.Cube); subobj.transform.position = go.transform.position + new Vector3(Random.value, 0f, Random.value); subobj.transform.localScale = Vector3.one * 0.5f; subobj.transform.SetParent(go.transform); MapEntity me = subobj.AddComponent <MapEntity>(); me.AddTag("RESOURCE", "NUGGET"); Destroy(subobj, 5f); }; TickMaster.AddAction(interval, a); }; map.ApplyFunctionTo(7, spawnMapEntitiesOnPlains); Texture2D tex = map.AsTexture2D(lut); tex.filterMode = FilterMode.Point; tex.Apply(); rend.material.mainTexture = tex; }