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); } } } }
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); }