add 'region', 'region-scale' properties

This commit is contained in:
MihailRis 2025-05-03 22:59:24 +03:00
parent da107309ac
commit 27b194816b
2 changed files with 16 additions and 1 deletions

View File

@ -32,6 +32,9 @@ static void perform_rect(const xmlelement& root, model::Model& model) {
} else {
region.scale(glm::length(right), glm::length(up));
}
if (root.has("region-scale")) {
region.scale(root.attr("region-scale").asVec2());
}
auto flip = root.attr("flip", "").getText();
if (flip == "h") {
@ -87,6 +90,12 @@ static void perform_box(const xmlelement& root, model::Model& model) {
if (elem->has("texture")) {
texfaces[idx] = elem->attr("texture").getText();
}
if (elem->has("region")) {
regions[idx].set(elem->attr("region").asVec4());
}
if (elem->has("region-scale")) {
regions[idx].scale(elem->attr("region-scale").asVec2());
}
}
}
}
@ -131,7 +140,9 @@ static std::unique_ptr<model::Model> load_model(const xmlelement& root) {
return std::make_unique<model::Model>(std::move(model));
}
std::unique_ptr<model::Model> vcm::parse(std::string_view file, std::string_view src) {
std::unique_ptr<model::Model> vcm::parse(
std::string_view file, std::string_view src
) {
auto doc = xml::parse(file, src);
const auto& root = *doc->getRoot();
if (root.getTag() != "model") {

View File

@ -53,6 +53,10 @@ struct UVRegion {
v2 = cy + h * 0.5f * y;
}
void scale(const glm::vec2& vec) {
scale(vec.x, vec.y);
}
void set(const glm::vec4& vec) {
u1 = vec.x;
v1 = vec.y;