From 34a04d798ed0b4f4b652082da994c8648e4517e6 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 28 Oct 2015 19:54:36 +0300 Subject: Add support for images in npc skined menu. --- src/resources/db/npcdialogdb.cpp | 18 +++++++++++++++++ src/resources/npcdialoginfo.h | 3 +++ src/resources/npcimageinfo.h | 42 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 src/resources/npcimageinfo.h (limited to 'src/resources') diff --git a/src/resources/db/npcdialogdb.cpp b/src/resources/db/npcdialogdb.cpp index cdb96a2ee..86bc712f2 100644 --- a/src/resources/db/npcdialogdb.cpp +++ b/src/resources/db/npcdialogdb.cpp @@ -80,6 +80,22 @@ static void loadNpcDialog(NpcDialogInfo *const dialog, childNode, "imageHeight", 16, 1, 1000); dialog->buttons.push_back(button); } + else if (xmlNameEqual(childNode, "image")) + { + const std::string image = XML::getProperty(childNode, "image", ""); + if (image.empty()) + { + logger->log("Error: no image attribute found in image tag."); + continue; + } + NpcImageInfo *const imageInfo = new NpcImageInfo; + imageInfo->name = image; + imageInfo->x = XML::getIntProperty( + childNode, "x", 0, 0, 10000); + imageInfo->y = XML::getIntProperty( + childNode, "y", 0, 0, 10000); + dialog->images.push_back(imageInfo); + } } } @@ -132,6 +148,7 @@ void NpcDialogDB::deleteDialog(const std::string &name) NpcDialogInfo *dialog = (*it).second; delete_all(dialog->buttons); + delete_all(dialog->images); mDialogs.erase(it); delete dialog; } @@ -144,6 +161,7 @@ void NpcDialogDB::unload() { NpcDialogInfo *dialog = (*it).second; delete_all(dialog->buttons); + delete_all(dialog->images); delete dialog; } mDialogs.clear(); diff --git a/src/resources/npcdialoginfo.h b/src/resources/npcdialoginfo.h index ce3e8e92a..aa73d2c01 100644 --- a/src/resources/npcdialoginfo.h +++ b/src/resources/npcdialoginfo.h @@ -22,6 +22,7 @@ #define RESOURCES_NPCDIALOGINFO_H #include "resources/npcbuttoninfo.h" +#include "resources/npcimageinfo.h" #include "utils/stringvector.h" @@ -31,12 +32,14 @@ struct NpcDialogInfo final { NpcDialogInfo() : buttons(), + images(), name(), hideText(false) { } std::vector buttons; + std::vector images; std::string name; bool hideText; }; diff --git a/src/resources/npcimageinfo.h b/src/resources/npcimageinfo.h new file mode 100644 index 000000000..94bb60f44 --- /dev/null +++ b/src/resources/npcimageinfo.h @@ -0,0 +1,42 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2015 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef RESOURCES_NPCIMAGEINFO_H +#define RESOURCES_NPCIMAGEINFO_H + +#include + +#include "localconsts.h" + +struct NpcImageInfo final +{ + NpcImageInfo() : + name(), + x(0), + y(0) + { + } + + std::string name; + int x; + int y; +}; + +#endif // RESOURCES_NPCIMAGEINFO_H -- cgit v1.2.3-70-g09d2