MapRenderer::MapRenderer(Map* map) : m_Map(map) , m_Verts(sf::Quads) { m_TileSheet.loadFromFile("res/tilesheet.png"); TEX_COORDS = { // TODO: Remove magic numbers { { 0.f, 0.f } , { 10.f, 0.f }, { 0.f, 10.f }, { 10.f, 10.f } }, // Grass { { 10.f, 0.f }, { 20.f, 0.f }, { 10.f, 10.f }, { 20.f, 10.f } }, // Sand { { 20.f, 0.f }, { 30.f, 0.f }, { 20.f, 10.f }, { 30.f, 10.f } }, // Stone { { 30.f, 0.f }, { 40.f, 0.f }, { 30.f, 10.f }, { 40.f, 10.f } } // Water }; buildVertexArray(); }
void Tilemap::update(const sf::View& view, int margin) { sf::IntRect newView((view.getCenter().x - (view.getSize().x / 2.f)) / tilesize, (view.getCenter().y - (view.getSize().y / 2.f)) / tilesize, (view.getSize().x) / tilesize, (view.getSize().y) / tilesize); // @TODO Handle rotations & all the shizzle because SFML. sf::IntRect maprect(0, 0, wid, hei); newView = clip(newView, maprect); const sf::Vector2i topleft(newView.left, newView.top), bottomright(newView.left + newView.width, newView.top + newView.height); if (wasTilemapChanged || !vboview.contains(topleft) || !vboview.contains(bottomright)) // if a VBO update is required { vboview = sf::IntRect(newView.left - margin, newView.top - margin, newView.width + (margin * 2), newView.height + (margin * 2)); vboview = clip(vboview, maprect); vbo = buildVertexArray(vboview); } }
void MapRenderer::changeMap(Map* newMap) { m_Map = newMap; buildVertexArray(); }
Model::Model(Material* material, Mesh* mesh, api::Shader* shader, bool castsShadows) : m_material(material), mesh(mesh), m_shader(shader), castShadows(castsShadows) { buildVertexArray(); }