34#include "common/debug.h"
35#include "common/path.h"
36#include "common/str.h"
37#include "crab/color.h"
38#include "crab/gametype.h"
39#include "crab/numstr.h"
40#include "crab/rapidxml/rapidxml.hpp"
46bool nodeValid(rapidxml::xml_node<char> *node,
const bool &echo =
true);
47bool nodeValid(
const Common::String &name, rapidxml::xml_node<char> *parentNode,
const bool &echo =
true);
56bool loadNum(T &val,
const Common::String &name, rapidxml::xml_node<char> *node,
const bool &echo =
true) {
57 if (node->first_attribute(name.c_str()) !=
nullptr)
58 val = stringToNumber<T>(node->first_attribute(name.c_str())->value());
61 warning(
"XML: attribute %s not found in node %s -> %s", name.c_str(), node->parent()->name(), node->name());
70bool loadEnum(T &val,
const Common::String &name, rapidxml::xml_node<char> *node,
const bool &echo =
true) {
71 if (node->first_attribute(name.c_str()) !=
nullptr)
72 val =
static_cast<T
>(stringToNumber<int>(node->first_attribute(name.c_str())->value()));
75 warning(
"XML: attribute %s not found in node %s -> %s", name.c_str(), node->parent()->name(), node->name());
83bool loadColor(Color &col, rapidxml::xml_node<char> *node,
const bool &echo =
true,
87bool loadColor(
int &col, rapidxml::xml_node<char> *node,
const bool &echo =
true);
91bool loadXY(T &x, T &y, rapidxml::xml_node<char> *node,
const bool &echo =
true) {
92 bool result = loadNum(x,
"x", node, echo);
93 result = loadNum(y,
"y", node, echo) && result;
100bool loadXYZ(T &x, T &y, T &z, rapidxml::xml_node<char> *node,
const bool &echo =
true) {
101 bool result = loadNum(x,
"x", node, echo);
102 result = loadNum(y,
"y", node, echo) && result;
103 result = loadNum(z,
"z", node, echo) && result;
109bool loadBool(
bool &var,
const Common::String &name, rapidxml::xml_node<char> *node,
const bool &echo =
true);
112void saveBool(
const bool &var,
const char *name, rapidxml::xml_document<> &doc, rapidxml::xml_node<char> *root);
115bool loadStatType(pyrodactyl::stat::StatType &type, rapidxml::xml_node<char> *node,
const bool &echo =
true);
117bool loadAlign(Align &align, rapidxml::xml_node<char> *node,
const bool &echo =
true,
const Common::String &name =
"align");
118bool loadDirection(Direction &dir, rapidxml::xml_node<char> *node,
const bool &echo =
true,
const Common::String &name =
"dir");
120bool loadTextureFlipType(TextureFlipType &flip, rapidxml::xml_node<char> *node,
const bool &echo =
true);
void warning(MSVC_PRINTF const char *s,...) GCC_PRINTF(1