/* * Copyright 2022-2025 Frederico de Oliveira Linhares * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "text.hpp" #include "../int/core.hpp" namespace BluCat::GRA { Text::Text( const BitmapFont &font, const char *str, const I32F x, const I32F y, F32 z_index): x{x}, y{y}, width{0}, height{0}, z_index{z_index} { const std::vector text{BluCat::GRA::Character::str_to_unicode(str)}; this->letters.reserve(text.size()); I32F current_column{0}; I32F current_line{0}; for(I32F index{0}; index < text.size(); index++) { switch(str[index]) { case 10: if((current_column + 1) * font.width > this->width) this->width = (current_column + 1) * font.width; current_column = 0; current_line++; continue; case 32: current_column++; continue; } glm::vec4 rect{ x + current_column * font.width, y + current_line * font.height, x + (current_column + 1) * font.width, y + (current_line + 1) * font.height}; this->letters.emplace_back(font.characters.at(text[index]).sprite, rect); current_column++; } if((current_column + 1) * font.width > this->width) this->width = (current_column + 1) * font.width; this->height = font.height * (current_line + 1); } Text::Text(): letters(0), x{0}, y{0}, width{0}, height{0}, z_index{4.5f} { } void Text::draw() { auto &sprites_to_draw = BluCat::INT::core.vk_renderer->sprites_to_draw[ BluCat::INT::core.vk_swapchain->current_frame]; for(Letter &l: this->letters) sprites_to_draw.emplace_back(l.sprite, l.position, this->z_index); } }