private void CreateBillboardIfEliglible(IBillboardBuilder builder, Vector3 position, Vector2 area)
        {
            if (builder.HasBillboards())
            {
                var northSouthSideLength = area.X;
                var eastWestSideLength   = area.Y;
                if (northSouthSideLength > eastWestSideLength)
                {
                    if (northSouthSideLength >= builder.CalculateBillboardWidth(3))
                    {
                        var billboard = CoinFlip.Flip() ?
                                        builder.CreateNorthFacingBillboard(position, area, 3) :
                                        builder.CreateSouthFacingBillboard(position, area, 3);

                        _meshes.AddRange(billboard.Meshes);
                    }
                }
                else
                {
                    if (eastWestSideLength >= builder.CalculateBillboardWidth(3))
                    {
                        var billboard = CoinFlip.Flip() ?
                                        builder.CreateWestFacingBillboard(position, area, 3) :
                                        builder.CreateEastFacingBillboard(position, area, 3);

                        _meshes.AddRange(billboard.Meshes);
                    }
                }
            }
        }
Example #2
0
        public BuildingGenerator(ILogger logger, IAppConfig config, IBillboardBuilder billboardBuilder)
        {
            _config = config;

            _buildingShader = new Shader("vs.vert", "fs.frag");
            _buildingShader.SetUniformValue("tex", new IntUniform
            {
                Value = 0
            });
            _buildingTextures = _config.BuildingTextures.Select(c => new Texture(c)).ToArray();
            _areaBorder       = new Vector2(_config.AreaBorderSize);
            _logger           = logger;
            _billboardBuilder = billboardBuilder;
        }
        public TowerBuilding(Vector3 position, Vector2 area, Texture texture, Shader shader, float height, IBillboardBuilder billboardBuilder)
        {
            _texture = texture;
            _shader  = shader;

            var blockToppingArea  = new Vector2(area.X + 3, area.Y + 3);
            var lastPosition      = new Vector3(position);
            var billboardPosition = new Vector3();

            while (height - 8 > 0)
            {
                var blockToppingPosition = new Vector3(lastPosition.X - 1.5f, lastPosition.Y, lastPosition.Z - 1.5f);
                blockToppingPosition.Y += 5;
                billboardPosition       = blockToppingPosition;

                _meshes.Add(CreateTexturedCube(lastPosition, area, 5));
                _meshes.Add(CreateUntexturedCube(blockToppingPosition, blockToppingArea, 3));

                lastPosition.Y += 8;
                height         -= 8;
            }

            CreateBillboardIfEliglible(billboardBuilder, billboardPosition, blockToppingArea);
        }