private void GenerateObjects() { for (int i = 0; i < objectsMap.Height; ++i) { for (int j = 0; j < objectsMap.Width; j++) { BiomModel biom = map[i, j].GetBiomModel(); if (objectsMap.IsTileEmpty(new Vector2Int(j, i)) && biom.Objects.Any() && random.Next(10000) / 100f < biom.ObjectsIntensity) { ObjectModel objectModel = rouletteWheelSelector.RouletteWheelSelection(biom.Objects); AwaitingObject awaitingObject = new AwaitingObject() { AbstractObject = objectModel.AbstractObject, Position = new Vector2Float(j, i) }; awaitingObjects.Add(awaitingObject); objectsMap.MarkTiles(new Vector2Int(j, i), ObjectsMap.ObjectType.Object); } } } }
private void GenerateLocations() { LocationGenerator locationGenerator = new LocationGenerator(map, locationsMap, objectsMap, random); int minX = (int)(objectsMap.Width * 0.05), maxX = (int)(objectsMap.Width * 0.95); int minY = (int)(objectsMap.Height * 0.05), maxY = (int)(objectsMap.Height * 0.95); for (int i = minY; i < maxY; ++i) { for (int j = minX; j < maxX; ++j) { BiomModel biom = map[i, j].GetBiomModel(); if (biom.Locations.Any() && locationsMap.CanGenerateIn(new Vector2Int(j, i)) && random.Next(10000) / 100f < biom.LocationsIntensity) { LocationModel locationDataModel = rouletteWheelSelector.RouletteWheelSelection(biom.Locations); LocationInstance location = locationGenerator.GenerateLocation(locationDataModel, new Vector2Int(j, i)); if (location != null) { awaitingObjects.AddRange(location.BigObjects); awaitingObjects.AddRange(location.Objects); awaitingObjects.AddRange(location.Fence); locationsMap.MarkLocation(location); } } } } }
private void SmoothBiom(Vector2Int pos) { int countOfSameBiom = 0; List <Vector2Int> neighbours = new List <Vector2Int>(); Vector2Int last; if (map.IsOnMap(last = new Vector2Int(pos.X - 1, pos.Y))) { if (map[pos.Y, pos.X].Biom == map[pos.Y, pos.X - 1].Biom) { countOfSameBiom++; } neighbours.Add(last); } if (map.IsOnMap(last = new Vector2Int(pos.X, pos.Y - 1))) { if (map[pos.Y, pos.X].Biom == map[pos.Y - 1, pos.X].Biom) { countOfSameBiom++; } neighbours.Add(last); } if (map.IsOnMap(last = new Vector2Int(pos.X + 1, pos.Y))) { if (map[pos.Y, pos.X].Biom == map[pos.Y, pos.X + 1].Biom) { countOfSameBiom++; } neighbours.Add(last); } if (map.IsOnMap(last = new Vector2Int(pos.X, pos.Y + 1))) { if (map[pos.Y, pos.X].Biom == map[pos.Y + 1, pos.X].Biom) { countOfSameBiom++; } neighbours.Add(last); } if (countOfSameBiom < 2) { BiomModel mostFrequentBiom = neighbours.GroupBy(x => map[x.Y, x.X].Biom) .Select(x => new { biom = x, cnt = x.Count() }) .OrderByDescending(g => g.cnt) .Select(g => g.biom).First().Key; map[pos.Y, pos.X].Biom = mostFrequentBiom; neighbours.ForEach(x => positionToCheck.Push(x)); } }
private BiomModel GetWaterBiom(float value) { BiomModel biom = waterBiomes.Length > 0 ? waterBiomes?[0].Biom : null; for (int i = 1; i < waterBiomes.Length; ++i) { if (waterBiomes[i].WaterThresholding <= value) { biom = waterBiomes[i].Biom; } else { break; } } return(biom); }
private BiomModel CalculateWaterBiom(float value) { BiomModel biom = null; for (int i = 0; i < waterBiomes.Length; ++i) { if (waterBiomes[i].WaterThresholding <= value) { biom = waterBiomes[i].Biom; } else { break; } } return(biom); }