mirror of
https://github.com/luanti-org/luanti.git
synced 2025-08-11 17:51:04 +00:00
Add animated_image[] formspec element (#9258)
This commit is contained in:
parent
ee7d357602
commit
7ce21788f8
11 changed files with 200 additions and 4 deletions
|
@ -55,6 +55,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
#include "util/string.h" // for parseColorString()
|
||||
#include "irrlicht_changes/static_text.h"
|
||||
#include "client/guiscalingfilter.h"
|
||||
#include "guiAnimatedImage.h"
|
||||
#include "guiBackgroundImage.h"
|
||||
#include "guiBox.h"
|
||||
#include "guiButton.h"
|
||||
|
@ -779,6 +780,58 @@ void GUIFormSpecMenu::parseImage(parserData* data, const std::string &element)
|
|||
errorstream<< "Invalid image element(" << parts.size() << "): '" << element << "'" << std::endl;
|
||||
}
|
||||
|
||||
void GUIFormSpecMenu::parseAnimatedImage(parserData *data, const std::string &element)
|
||||
{
|
||||
std::vector<std::string> parts = split(element, ';');
|
||||
|
||||
if (parts.size() != 3 &&
|
||||
!(parts.size() > 3 && m_formspec_version > FORMSPEC_API_VERSION)) {
|
||||
errorstream << "Invalid animated image element(" << parts.size()
|
||||
<< "): '" << element << "'" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
std::vector<std::string> v_pos = split(parts[0], ',');
|
||||
std::vector<std::string> v_geom = split(parts[1], ',');
|
||||
std::string name = unescape_string(parts[2]);
|
||||
|
||||
MY_CHECKPOS("animated_image", 0);
|
||||
MY_CHECKGEOM("animated_image", 1);
|
||||
|
||||
v2s32 pos;
|
||||
v2s32 geom;
|
||||
|
||||
if (data->real_coordinates) {
|
||||
pos = getRealCoordinateBasePos(v_pos);
|
||||
geom = getRealCoordinateGeometry(v_geom);
|
||||
} else {
|
||||
pos = getElementBasePos(&v_pos);
|
||||
geom.X = stof(v_geom[0]) * (float)imgsize.X;
|
||||
geom.Y = stof(v_geom[1]) * (float)imgsize.Y;
|
||||
}
|
||||
|
||||
if (!data->explicit_size)
|
||||
warningstream << "invalid use of animated_image without a size[] element" << std::endl;
|
||||
|
||||
FieldSpec spec(
|
||||
"",
|
||||
L"",
|
||||
L"",
|
||||
258 + m_fields.size()
|
||||
);
|
||||
|
||||
core::rect<s32> rect = core::rect<s32>(pos, pos + geom);
|
||||
|
||||
gui::IGUIElement *e = new GUIAnimatedImage(Environment, this, spec.fid,
|
||||
rect, name, m_tsrc);
|
||||
|
||||
auto style = getStyleForElement("animated_image", spec.fname);
|
||||
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
|
||||
e->drop();
|
||||
|
||||
m_fields.push_back(spec);
|
||||
}
|
||||
|
||||
void GUIFormSpecMenu::parseItemImage(parserData* data, const std::string &element)
|
||||
{
|
||||
std::vector<std::string> parts = split(element,';');
|
||||
|
@ -2500,6 +2553,11 @@ void GUIFormSpecMenu::parseElement(parserData* data, const std::string &element)
|
|||
return;
|
||||
}
|
||||
|
||||
if (type == "animated_image") {
|
||||
parseAnimatedImage(data, description);
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == "item_image") {
|
||||
parseItemImage(data, description);
|
||||
return;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue