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