summaryrefslogtreecommitdiff
path: root/src/resources/db/horsedb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/resources/db/horsedb.cpp')
-rw-r--r--src/resources/db/horsedb.cpp302
1 files changed, 0 insertions, 302 deletions
diff --git a/src/resources/db/horsedb.cpp b/src/resources/db/horsedb.cpp
deleted file mode 100644
index 00228ecd7..000000000
--- a/src/resources/db/horsedb.cpp
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2009 Aethyra Development Team
- * Copyright (C) 2011-2017 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 <http://www.gnu.org/licenses/>.
- */
-
-#include "resources/db/horsedb.h"
-
-#include "configuration.h"
-
-#include "enums/resources/spritedirection.h"
-
-#include "resources/beingcommon.h"
-#include "resources/horseinfo.h"
-
-#include "utils/checkutils.h"
-#include "utils/dtor.h"
-
-#include "debug.h"
-
-namespace
-{
- HorseInfos mHorseInfos;
- HorseInfo mUnknown;
- bool mLoaded = false;
-} // namespace
-
-#define loadSprite(name) \
- { \
- SpriteReference *const currentSprite = new SpriteReference; \
- currentSprite->sprite = pathJoin(paths.getStringValue("sprites"), \
- XmlChildContent(spriteNode)); \
- currentSprite->variant = XML::getProperty( \
- spriteNode, "variant", 0); \
- currentInfo->name.push_back(currentSprite); \
- }
-
-static void loadDownSprites(XmlNodePtrConst parentNode,
- HorseInfo *const currentInfo);
-
-static void loadUpSprites(XmlNodePtrConst parentNode,
- HorseInfo *const currentInfo);
-
-void HorseDB::load()
-{
- if (mLoaded)
- unload();
-
- logger->log1("Initializing horse database...");
-
- SpriteReference *currentSprite = new SpriteReference;
- currentSprite->sprite = pathJoin(paths.getStringValue("sprites"),
- paths.getStringValue("spriteErrorFile"));
- currentSprite->variant = 0;
- mUnknown.downSprites.push_back(currentSprite);
-
- currentSprite = new SpriteReference;
- currentSprite->sprite = pathJoin(paths.getStringValue("sprites"),
- paths.getStringValue("spriteErrorFile"));
- currentSprite->variant = 0;
- mUnknown.upSprites.push_back(currentSprite);
-
- loadXmlFile(paths.getStringValue("horsesFile"), SkipError_false);
- loadXmlFile(paths.getStringValue("horsesPatchFile"), SkipError_true);
- loadXmlDir("horsesPatchDir", loadXmlFile);
-
- mLoaded = true;
-}
-
-static int parseDirectionName(const std::string &name)
-{
- int id = -1;
- if (name == "down")
- {
- id = SpriteDirection::DOWN;
- }
- else if (name == "downleft" || name == "leftdown")
- {
- id = SpriteDirection::DOWNLEFT;
- }
- else if (name == "left")
- {
- id = SpriteDirection::LEFT;
- }
- else if (name == "upleft" || name == "leftup")
- {
- id = SpriteDirection::UPLEFT;
- }
- else if (name == "up")
- {
- id = SpriteDirection::UP;
- }
- else if (name == "upright" || name == "rightup")
- {
- id = SpriteDirection::UPRIGHT;
- }
- else if (name == "right")
- {
- id = SpriteDirection::RIGHT;
- }
- else if (name == "downright" || name == "rightdown")
- {
- id = SpriteDirection::DOWNRIGHT;
- }
- // hack for died action.
- else if (name == "died")
- {
- id = 9;
- }
-
- return id;
-}
-
-static void loadRiderOffset(XmlNodePtrConst node,
- HorseInfo *const currentInfo)
-{
- const std::string dirName = XML::getProperty(node,
- "direction", "");
- const int dir = parseDirectionName(dirName);
- if (dir == -1)
- {
- reportAlways("Wrong or missing horse rider direcion: %s",
- dirName.c_str());
- return;
- }
- HorseOffset &offset = currentInfo->offsets[dir];
- offset.riderOffsetX = XML::getProperty(node,
- "riderOffsetX", 0);
- offset.riderOffsetY = XML::getProperty(node,
- "riderOffsetY", 0);
-}
-
-void HorseDB::loadXmlFile(const std::string &fileName,
- const SkipError skipError)
-{
- XML::Document doc(fileName,
- UseVirtFs_true,
- skipError);
- XmlNodePtrConst rootNode = doc.rootNode();
-
- if ((rootNode == nullptr) || !xmlNameEqual(rootNode, "horses"))
- {
- logger->log("Horse Database: Error while loading %s!",
- fileName.c_str());
- return;
- }
-
- // iterate <emote>s
- for_each_xml_child_node(horseNode, rootNode)
- {
- if (xmlNameEqual(horseNode, "include"))
- {
- const std::string name = XML::getProperty(horseNode, "name", "");
- if (!name.empty())
- loadXmlFile(name, skipError);
- continue;
- }
- else if (!xmlNameEqual(horseNode, "horse"))
- {
- continue;
- }
-
- const int id = XML::getProperty(horseNode, "id", -1);
-
- if (id == -1)
- {
- reportAlways("Horse Database: Horse with missing ID in %s!",
- paths.getStringValue("horsesFile").c_str());
- continue;
- }
- HorseInfo *currentInfo = nullptr;
- if (mHorseInfos.find(id) != mHorseInfos.end())
- currentInfo = mHorseInfos[id];
- else
- currentInfo = new HorseInfo;
-
- if (currentInfo == nullptr)
- continue;
- for_each_xml_child_node(spriteNode, horseNode)
- {
- if (xmlNameEqual(spriteNode, "down"))
- loadDownSprites(spriteNode, currentInfo);
- else if (xmlNameEqual(spriteNode, "up"))
- loadUpSprites(spriteNode, currentInfo);
- else if (xmlNameEqual(spriteNode, "offset"))
- loadRiderOffset(spriteNode, currentInfo);
- }
- mHorseInfos[id] = currentInfo;
- }
-}
-
-static void loadOffset(XmlNodePtrConst node,
- HorseInfo *const currentInfo,
- const bool isUp)
-{
- const std::string dirName = XML::getProperty(node,
- "direction", "");
- const int dir = parseDirectionName(dirName);
- if (dir == -1)
- {
- reportAlways("Wrong or missing horse direcion: %s",
- dirName.c_str());
- return;
- }
- HorseOffset &offset = currentInfo->offsets[dir];
- if (isUp)
- {
- offset.upOffsetX = XML::getProperty(node,
- "horseOffsetX", 0);
- offset.upOffsetY = XML::getProperty(node,
- "horseOffsetY", 0);
- }
- else
- {
- offset.downOffsetX = XML::getProperty(node,
- "horseOffsetX", 0);
- offset.downOffsetY = XML::getProperty(node,
- "horseOffsetY", 0);
- }
-}
-
-static void loadDownSprites(XmlNodePtrConst parentNode,
- HorseInfo *const currentInfo)
-{
- for_each_xml_child_node(spriteNode, parentNode)
- {
- if (xmlNameEqual(spriteNode, "offset"))
- loadOffset(spriteNode, currentInfo, false);
- if (!XmlHaveChildContent(spriteNode))
- continue;
- if (xmlNameEqual(spriteNode, "sprite"))
- loadSprite(downSprites)
- }
-}
-
-static void loadUpSprites(XmlNodePtrConst parentNode,
- HorseInfo *const currentInfo)
-{
- for_each_xml_child_node(spriteNode, parentNode)
- {
- if (xmlNameEqual(spriteNode, "offset"))
- loadOffset(spriteNode, currentInfo, true);
- if (!XmlHaveChildContent(spriteNode))
- continue;
- if (xmlNameEqual(spriteNode, "sprite"))
- loadSprite(upSprites)
- }
-}
-
-void HorseDB::unload()
-{
- logger->log1("Unloading horse database...");
- FOR_EACH (HorseInfos::const_iterator, i, mHorseInfos)
- {
- delete_all(i->second->upSprites);
- delete_all(i->second->downSprites);
- delete i->second;
- }
- mHorseInfos.clear();
-
- delete_all(mUnknown.upSprites);
- delete_all(mUnknown.downSprites);
- mUnknown.upSprites.clear();
- mUnknown.downSprites.clear();
-
- mLoaded = false;
-}
-
-HorseInfo *HorseDB::get(const int id, const bool allowNull)
-{
- const HorseInfos::const_iterator i = mHorseInfos.find(id);
-
- if (i == mHorseInfos.end())
- {
- if (allowNull)
- return nullptr;
- reportAlways("HorseDB: Warning, unknown horse ID %d requested",
- id);
- return &mUnknown;
- }
- return i->second;
-}
-
-int HorseDB::size()
-{
- return static_cast<signed int>(mHorseInfos.size());
-}