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;
        }
Beispiel #2
0
        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));
        }
Beispiel #5
0
 protected void ForeachEntity(GrassEntitiesSet aGrass, Action <GrassEntity> method)
 {
     aGrass.EntitiesBeforeTransform.ForEach(method);
 }
Beispiel #6
0
 public abstract void SetSettings(GrassEntitiesSet aGrass);