Added comments for XMLLayout
This commit is contained in:
parent
de5621e925
commit
0f76e19259
@ -3,47 +3,47 @@
|
|||||||
XmlLayout::XmlLayout() : path("") {}
|
XmlLayout::XmlLayout() : path("") {}
|
||||||
|
|
||||||
bool XmlLayout::openFile(const wxString& openPath) {
|
bool XmlLayout::openFile(const wxString& openPath) {
|
||||||
if (openPath.IsSameAs(path))
|
if (openPath.IsSameAs(path) && layoutDoc.Load(openPath)) // если открыли ту же карту, что и в прошлый раз и она открывалась
|
||||||
return true;
|
return true; // можно не читать заново
|
||||||
|
|
||||||
if (!layoutDoc.Load(openPath))
|
if (!layoutDoc.Load(openPath)) // если возникла ошибка при открытии файла
|
||||||
return false;
|
return false; // сообщаем об этом
|
||||||
|
|
||||||
if (layoutDoc.GetRoot() == nullptr)
|
if (layoutDoc.GetRoot() == nullptr) // если не валидный XML
|
||||||
return false;
|
return false; // возвращаем ошибку
|
||||||
|
|
||||||
return true;
|
return true; // всё хорошо
|
||||||
}
|
}
|
||||||
|
|
||||||
Dimensions XmlLayout::getDimensions() {
|
Dimensions XmlLayout::getDimensions() {
|
||||||
auto root = layoutDoc.GetRoot();
|
auto root = layoutDoc.GetRoot(); // сохраняем в ссылке указатель на корневой элемент XML-документа
|
||||||
|
|
||||||
lx = wxAtoi(root->GetAttribute("lx"));
|
lx = wxAtoi(root->GetAttribute("lx")); // считываем минимальный x
|
||||||
ly = wxAtoi(root->GetAttribute("ly"));
|
ly = wxAtoi(root->GetAttribute("ly")); // считываем минимальный y
|
||||||
|
|
||||||
return {wxAtoi(root->GetAttribute("layers")),
|
return {wxAtoi(root->GetAttribute("layers")), // считываем глубину карты
|
||||||
wxAtoi(root->GetAttribute("ux")) + 2 - lx,
|
wxAtoi(root->GetAttribute("ux")) + 2 - lx, // считываем ширину карты - минимальный x
|
||||||
wxAtoi(root->GetAttribute("uy")) + 2 - ly};
|
wxAtoi(root->GetAttribute("uy")) + 2 - ly}; // считываем высоту карты - минимальный y
|
||||||
}
|
}
|
||||||
|
|
||||||
void XmlLayout::readLayout(TLVec& table) {
|
void XmlLayout::readLayout(TLVec& table) {
|
||||||
wxXmlNode* tilePtr = layoutDoc.GetRoot()->GetChildren();
|
wxXmlNode* tilePtr = layoutDoc.GetRoot()->GetChildren(); // получаем первый дочерний элемент корневого XML-элемента
|
||||||
|
|
||||||
int x = 0, y = 0, l = 1;
|
int x, y, l;
|
||||||
|
|
||||||
while (tilePtr) {
|
while (tilePtr) {
|
||||||
if (tilePtr->GetName().IsSameAs("tile")) {
|
if (tilePtr->GetName().IsSameAs("tile")) { // если это - XML-нода, описывающая позицию камня
|
||||||
x = wxAtoi(tilePtr->GetAttribute("x")) - lx;
|
x = wxAtoi(tilePtr->GetAttribute("x")) - lx; // считываем позицию по x и сдвигаем влево на минимальную позицию (чтобы всегла самый левый камень был в 0)
|
||||||
y = wxAtoi(tilePtr->GetAttribute("y")) - ly;
|
y = wxAtoi(tilePtr->GetAttribute("y")) - ly; // считываем позицию по y и сдвигаем вверх на минимальную позицию (чтобы всегла самый верхний камень был в 0)
|
||||||
l = wxAtoi(tilePtr->GetAttribute("layer")) - 1;
|
l = wxAtoi(tilePtr->GetAttribute("layer")) - 1; // считываем координату по оси z (начиная с 0)
|
||||||
|
|
||||||
table[l][x][y] = FREE;
|
table[l][x][y] = FREE; // указываем в таблице, что в эту позицию можно поставить камень
|
||||||
}
|
}
|
||||||
|
|
||||||
tilePtr = tilePtr->GetNext();
|
tilePtr = tilePtr->GetNext(); // получаем новый элемент из связанного списка дочерних элементов рут-XML-ноды
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t XmlLayout::getTilesNumber() {
|
uint8_t XmlLayout::getTilesNumber() {
|
||||||
return wxAtoi(layoutDoc.GetRoot()->GetAttribute("tiles"));
|
return wxAtoi(layoutDoc.GetRoot()->GetAttribute("tiles")); // получаем общее количество используемых id (на случай, если программе подсунули карту не с 144 камнями)
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user