public void SetPosition(GrassEntitiesSet aGrass, MapAreaPosition globalPosition) { var randomNormalized = new Vector3(UnityEngine.Random.value, 0, UnityEngine.Random.value); aGrass.Position = MyMathUtils.MultiplyMembers(randomNormalized, new Vector3(globalPosition.Size.x, 1, globalPosition.Size.y)) + globalPosition.DownLeft; }
public override void SetSettings(GrassEntitiesSet aGrass) { float plantBendingSiffness = RandomGrassGenerator.GetBendingStiffness(); float initialBendingValue = RandomGrassGenerator.GetInitialBendingValue(); ForeachEntity(aGrass, grassEntity => grassEntity.AddUniform(GrassShaderUniformName._PlantBendingStiffness, plantBendingSiffness)); ForeachEntity(aGrass, grassEntity => grassEntity.AddUniform(GrassShaderUniformName._InitialBendingValue, initialBendingValue)); ForeachEntity(aGrass, grassEntity => grassEntity.AddUniform(GrassShaderUniformName._Color, RandomGrassGenerator.GetGrassColor())); ForeachEntity(aGrass, grassEntity => grassEntity.AddUniform(GrassShaderUniformName._RandSeed, UnityEngine.Random.value)); }
public IEntitySplat GenerateSplat(MapAreaPosition position, int entityLodLevel) { List <GrassEntity> outEntities = new List <GrassEntity>(); for (int i = 0; i < _entitiesCountProvider.GetCount(); i++) { GrassEntitiesSet grassEntities = _entitiesGenerator.Generate(); _positionProvider.SetPosition(grassEntities, position); _settingGenerator.SetSettings(grassEntities); Vector4 color = new Vector4(1, 1, 1, 1); if (entityLodLevel == 0) { color = new Vector4(1, 0, 0, 1); } else if (entityLodLevel == 1) { color = new Vector4(1, 1, 0, 1); } else if (entityLodLevel == 2) { color = new Vector4(0, 1, 0, 1); } else if (entityLodLevel == 3) { color = new Vector4(0, 1, 1, 1); } else if (entityLodLevel == 4) { color = new Vector4(0, 0, 1, 1); } else if (entityLodLevel == 5) { color = new Vector4(1, 0, 1, 1); } else if (entityLodLevel == 6) { color = new Vector4(0.5f, 0.5f, 0, 1); } else if (entityLodLevel == 7) { color = new Vector4(0.5f, 0, 0, 1); } grassEntities.EntitiesBeforeTransform.ForEach(c => c.AddUniform(ShaderUniformName._Color, color)); // todo repair it outEntities.AddRange(grassEntities.EntitiesAfterTransform); } return(CreateSplat(outEntities, _grassMaterial, _meshProvider.GetMesh(entityLodLevel))); }
public void Set(GrassEntitiesSet set) { Vector2 newPlace = RandomGrassPlacingGenerator.GetPositionBetween(_downLeft, _upRight); set.TranslateBy(new Vector3(newPlace.x, 0, newPlace.y)); }
protected void ForeachEntity(GrassEntitiesSet aGrass, Action <GrassEntity> method) { aGrass.EntitiesBeforeTransform.ForEach(method); }
public abstract void SetSettings(GrassEntitiesSet aGrass);