diff --git a/res/layouts/code_editor.xml.lua b/res/layouts/code_editor.xml.lua index 4e6c68d4..733fa903 100644 --- a/res/layouts/code_editor.xml.lua +++ b/res/layouts/code_editor.xml.lua @@ -110,7 +110,7 @@ function unlock_access() end local function reload_model(filename, name) - assets.parse_model("xml", document.editor.text, name) + assets.parse_model(file.ext(filename), document.editor.text, name) end function run_current_file() diff --git a/res/layouts/console.xml b/res/layouts/console.xml index 756459de..3772d240 100644 --- a/res/layouts/console.xml +++ b/res/layouts/console.xml @@ -33,5 +33,4 @@ onup="on_history_up()" ondown="on_history_down()"> - diff --git a/src/assets/assetload_funcs.cpp b/src/assets/assetload_funcs.cpp index 88dd66bd..d865cc1a 100644 --- a/src/assets/assetload_funcs.cpp +++ b/src/assets/assetload_funcs.cpp @@ -381,7 +381,8 @@ assetload::postfunc assetload::model( auto text = io::read_string(path); try { - auto model = vcm::parse(path.string(), text).release(); + auto model = vcm::parse(path.string(), text, path.extension() == ".xml") + .release(); return [=](Assets* assets) { request_textures(loader, *model); assets->store(std::unique_ptr(model), name); diff --git a/src/coders/vcm.cpp b/src/coders/vcm.cpp index 9b564787..337d721f 100644 --- a/src/coders/vcm.cpp +++ b/src/coders/vcm.cpp @@ -163,11 +163,11 @@ static std::unique_ptr load_model(const xmlelement& root) { } std::unique_ptr vcm::parse( - std::string_view file, std::string_view src + std::string_view file, std::string_view src, bool usexml ) { try { - auto doc = io::path(std::string(file)).extension() == ".xml" - ? xml::parse(file, src) : xml::parse_vcm(file, src, "model"); + auto doc = + usexml ? xml::parse(file, src) : xml::parse_vcm(file, src, "model"); const auto& root = *doc->getRoot(); if (root.getTag() != "model") { throw std::runtime_error( diff --git a/src/coders/vcm.hpp b/src/coders/vcm.hpp index 6f239604..e0629de1 100644 --- a/src/coders/vcm.hpp +++ b/src/coders/vcm.hpp @@ -8,5 +8,7 @@ namespace model { } namespace vcm { - std::unique_ptr parse(std::string_view file, std::string_view src); + std::unique_ptr parse( + std::string_view file, std::string_view src, bool usexml + ); } diff --git a/src/logic/scripting/lua/libs/libassets.cpp b/src/logic/scripting/lua/libs/libassets.cpp index 047b6330..809480ee 100644 --- a/src/logic/scripting/lua/libs/libassets.cpp +++ b/src/logic/scripting/lua/libs/libassets.cpp @@ -55,7 +55,9 @@ static int l_parse_model(lua::State* L) { auto name = lua::require_string(L, 3); if (format == "xml" || format == "vcm") { - engine->getAssets()->store(vcm::parse(name, string), name); + engine->getAssets()->store( + vcm::parse(name, string, format == "xml"), name + ); } else { throw std::runtime_error("unknown format " + util::quote(std::string(format))); }