public async Task InsertPlantsProfile(PlantProfile pl) => await PlantsCollection.InsertOneAsync(pl);
public static List <TreeData> TreeCloudFromRaycasts(int seed, Vector2 sampleCenter, WorldData worldData, PlantProfile profile) { #region Variables Random.State initialState = Random.state; Random.InitState(seed); List <TreeData> treeCloud = new List <TreeData>(); Vector3 position; Quaternion rotation; Vector3 scale; int density = Mathf.RoundToInt((Statics.terrainDataResolution * 0.5f) * profile.density); float maxAltitude = Statics.maximumGlobalHeight + 1; float minAltitude = Statics.minimumGlobalHeight - 1; float noise = 0.5f; Ray ray; RaycastHit hit; float distance = maxAltitude - minAltitude; LayerMask collisionMask = Statics.groundLayer; LayerMask obstacleMask = Statics.obstacleLayer; float elevation; #endregion for (int i = 0; i < density; i++) { Vector3 origin = new Vector3(sampleCenter.x, 0, sampleCenter.y); origin.y = maxAltitude; origin.x += Statics.terrainDataResolution * Random.Range(-0.5f, 0.5f); origin.z += Statics.terrainDataResolution * Random.Range(-0.5f, 0.5f); elevation = Logics.SampleDataSet(origin.z, origin.x, worldData.elevation); if (profile.habitat == PlantHabitat.Terrestrial) { if (elevation < (Statics.minimumGrowthHeight + 2.5f) / Statics.maximumGlobalHeight) { continue; } if (elevation > (Statics.maximumGrowthHeight - 2.5f) / Statics.maximumGlobalHeight) { continue; } } else if (profile.habitat == PlantHabitat.Marine) { if (elevation > (Statics.minimumGrowthHeight + 2.5f) / Statics.maximumGlobalHeight) { continue; } if (elevation < Statics.seaLevel - 0.002f) { continue; } } else if (profile.habitat == PlantHabitat.Aquatic) { if (elevation > Statics.seaLevel - 0.002f) { continue; } } ray = new Ray(origin, -Vector3.up); if (Physics.Raycast(origin + (Vector3.up * (1000 - maxAltitude)), -Vector3.up, out hit, distance + 1001, obstacleMask, QueryTriggerInteraction.Collide)) { continue; } if (Physics.Raycast(ray, out hit, distance, collisionMask, QueryTriggerInteraction.Collide)) { position = hit.point - Vector3.up * Random.Range(1f, 2f); rotation = Quaternion.Euler( (Vector3.right * Random.Range(-noise, noise)) + (Vector3.up * Random.Range(0, 360)) + (Vector3.forward * Random.Range(-noise, noise)) ); scale = Vector3.one * Random.Range(1 - noise, 1 + noise); GameObject newTree = Instantiate(profile.model, Statics.treesParent, true); newTree.name = profile.name + " (" + i + ")"; newTree.transform.position = position; newTree.transform.rotation = rotation; newTree.transform.localScale = scale; treeCloud.Add(new TreeData(position, rotation, scale)); } } Random.state = initialState; return(treeCloud); }
public ValuesController() { SEPDimensionEntities entities = new SEPDimensionEntities(); /* * foreach (D_Time f in entities.D_Time.ToList()) * { * result_time = result_time + f.ToString(); * } * */ foreach (F_CO2 f in entities.F_CO2.ToList()) { result_co2 = result_co2 + f.ToString(); } foreach (F_Humidity f in entities.F_Humidity.ToList()) { result_humidity = result_humidity + f.ToString(); } foreach (F_Light f in entities.F_Light.ToList()) { result_light = result_light + f.ToString(); } foreach (F_Temperature f in entities.F_Temperature.ToList()) { result_temperature = result_temperature + f.ToString(); } foreach (F_Watering f in entities.F_Watering.ToList()) { result_watering = result_watering + f.ToString(); } int counter = 0; int x = 0; var c_co2 = result_co2.Split(','); var c_humidty = result_humidity.Split(','); var c_light = result_light.Split(','); var c_temperature = result_temperature.Split(','); var c_watering = result_watering.Split(','); for (int i = 0; i < c_co2.Length; i++) { PlantProfile plant = new PlantProfile(); int.TryParse(c_co2[i], out x); plant.setCo2(x); int.TryParse(c_humidty[i], out x); plant.setHumidity(x); int.TryParse(c_light[i], out x); plant.setLight(x); int.TryParse(c_temperature[i], out x); plant.setTemperature(x); plant.setWatering(c_watering[i]); plants.Add(plant); } }
public static MeshData PointCloudFromRaycasts(int resolution, int seed, Vector2 sampleCenter, WorldData worldData, PlantProfile profile) { #region Variables Random.State initialState = Random.state; Random.InitState(seed); int verticesPerLine = resolution; float spaceBetweenGrass = (float)Statics.terrainDataDetailResolution / verticesPerLine; float noise = spaceBetweenGrass * 0.25f; float maxAltitude = Statics.maximumGlobalHeight + 1; float minAltitude = Statics.minimumGlobalHeight - 1; float elevation; Ray ray; RaycastHit hit; float distance = maxAltitude - minAltitude; LayerMask collisionMask = Statics.groundLayer; LayerMask obstacleMask = Statics.noGrowZone; Vector3 vertexPosition; Vector2 uvPercent; Vector3 normalDirection; Color color; int index = 0; MeshData meshData = new MeshData(true); #endregion for (int z = 0; z < verticesPerLine; z++) { for (int x = 0; x < verticesPerLine; x++) { float realX = x * spaceBetweenGrass; float realZ = z * spaceBetweenGrass; Vector2 noiseOffset = new Vector2(Random.Range(-noise, noise), Random.Range(-noise, noise)); Vector2 sampleOffset = new Vector2(realX - (verticesPerLine * 0.5f), realZ - (verticesPerLine * 0.5f)); Vector3 origin = new Vector3(sampleCenter.x + sampleOffset.x + noiseOffset.x, maxAltitude, sampleCenter.y + sampleOffset.y + noiseOffset.y); if (profile.density < Statics.hash.SampleHashAbs(origin)) { continue; } elevation = Logics.SampleDataSet(origin.z, origin.x, worldData.elevation); if (profile.habitat == PlantHabitat.Terrestrial) { if (elevation < (Statics.minimumGrowthHeight + 1f) / Statics.maximumGlobalHeight) { continue; } if (elevation > (Statics.maximumGrowthHeight - 1f) / Statics.maximumGlobalHeight) { continue; } } else if (profile.habitat == PlantHabitat.Marine) { if (elevation > (Statics.minimumGrowthHeight + 1f) / Statics.maximumGlobalHeight) { continue; } if (elevation < Statics.seaLevel - 0.002f) { continue; } } else if (profile.habitat == PlantHabitat.Aquatic) { if (elevation > Statics.seaLevel - 0.002f) { continue; } } ray = new Ray(origin, -Vector3.up); if (Physics.Raycast(origin + (Vector3.up * (1000 - maxAltitude)), -Vector3.up, out hit, distance + 1001, obstacleMask, QueryTriggerInteraction.Collide)) { continue; } if (Physics.Raycast(ray, out hit, distance, collisionMask, QueryTriggerInteraction.Collide)) { vertexPosition = new Vector3(hit.point.x - sampleCenter.x, hit.point.y - 0.01f, hit.point.z - sampleCenter.y); uvPercent = new Vector2((realX + noiseOffset.x) / verticesPerLine, (realZ + noiseOffset.y) / verticesPerLine); float perlin = Statics.hash.SamplePerlin(vertexPosition); normalDirection = hit.normal * Maths.Map(perlin, 0.25f, 0.75f, 0.5f, 1.25f); if (perlin <= profile.diseasePrevalence) { color = Color.Lerp(profile.unhealthyDark, profile.unhealthyBright, Statics.hash.SampleHashAbs(vertexPosition)); } else { color = Color.Lerp(profile.healthyDark, profile.healthyBright, Statics.hash.SampleHashAbs(vertexPosition)); } meshData.AddPoint(index, vertexPosition, uvPercent, normalDirection, color); index++; } } } Random.state = initialState; return(meshData); }
public async void Post([FromBody] PlantProfile plants) { var monogDbService = new MongoDBMain("Project", "PlantProfiles", "mongodb://ea9d9986e87a086f47cf3eedf97735a3"); await monogDbService.InsertPlantsProfile(plants); }