summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/CMakeLists.txt4
-rw-r--r--src/Makefile.am2
-rw-r--r--src/client.cpp1
-rw-r--r--src/resources/loaders/spritedefloader.cpp68
-rw-r--r--src/resources/loaders/spritedefloader.h43
-rw-r--r--src/resources/resourcemanager/resourcemanager.cpp28
-rw-r--r--src/resources/resourcemanager/resourcemanager.h8
-rw-r--r--src/resources/sprite/animatedsprite.cpp4
-rw-r--r--src/resources/sprite/animationdelayload.cpp4
-rw-r--r--src/settings.cpp7
-rw-r--r--src/settings.h6
11 files changed, 136 insertions, 39 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index e6d3ef40c..2fa0e59f7 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -731,6 +731,8 @@ SET(SRCS
resources/loaders/shaderloader.h
resources/loaders/shaderprogramloader.cpp
resources/loaders/shaderprogramloader.h
+ resources/loaders/spritedefloader.cpp
+ resources/loaders/spritedefloader.h
resources/loaders/subimageloader.cpp
resources/loaders/subimageloader.h
resources/loaders/subimagesetloader.cpp
@@ -1439,6 +1441,8 @@ SET(DYE_CMD_SRCS
resources/loaders/shaderloader.h
resources/loaders/shaderprogramloader.cpp
resources/loaders/shaderprogramloader.h
+ resources/loaders/spritedefloader.cpp
+ resources/loaders/spritedefloader.h
resources/loaders/subimageloader.cpp
resources/loaders/subimageloader.h
resources/loaders/subimagesetloader.cpp
diff --git a/src/Makefile.am b/src/Makefile.am
index 610452f8c..a292b6a8c 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -402,6 +402,8 @@ SRC += events/actionevent.h \
resources/loaders/shaderloader.h \
resources/loaders/shaderprogramloader.cpp \
resources/loaders/shaderprogramloader.h \
+ resources/loaders/spritedefloader.cpp \
+ resources/loaders/spritedefloader.h \
resources/loaders/subimageloader.cpp \
resources/loaders/subimageloader.h \
resources/loaders/subimagesetloader.cpp \
diff --git a/src/client.cpp b/src/client.cpp
index f1aed91fc..a9f75bcba 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -280,6 +280,7 @@ void Client::gameInit()
#endif
ConfigManager::backupConfig("config.xml");
ConfigManager::initConfiguration();
+ settings.init();
Net::loadIgnorePackets();
paths.setDefaultValues(getPathsDefaults());
initFeatures();
diff --git a/src/resources/loaders/spritedefloader.cpp b/src/resources/loaders/spritedefloader.cpp
new file mode 100644
index 000000000..3c68b7c87
--- /dev/null
+++ b/src/resources/loaders/spritedefloader.cpp
@@ -0,0 +1,68 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2004-2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ * Copyright (C) 2011-2016 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 "logger.h"
+#include "settings.h"
+
+#include "resources/loaders/spritedefloader.h"
+
+#include "resources/resourcemanager/resourcemanager.h"
+
+#include "resources/sprite/spritedef.h"
+
+#include "utils/checkutils.h"
+#include "utils/stringutils.h"
+
+#include "debug.h"
+
+namespace
+{
+ struct SpriteDefLoader final
+ {
+ std::string path;
+ int variant;
+ static Resource *load(const void *const v)
+ {
+ if (!v)
+ return nullptr;
+
+ const SpriteDefLoader *const
+ rl = static_cast<const SpriteDefLoader *const>(v);
+ return SpriteDef::load(rl->path,
+ rl->variant,
+ settings.uselonglivesprites);
+ }
+ };
+} // namespace
+
+SpriteDef *Loader::getSprite(const std::string &path,
+ const int variant)
+{
+ SpriteDefLoader rl = { path, variant};
+ const std::string str = std::string(
+ path).append(
+ "[").append(toString(
+ variant).append(
+ "]"));
+ return static_cast<SpriteDef*>(resourceManager->get(str,
+ SpriteDefLoader::load, &rl));
+}
diff --git a/src/resources/loaders/spritedefloader.h b/src/resources/loaders/spritedefloader.h
new file mode 100644
index 000000000..58713756c
--- /dev/null
+++ b/src/resources/loaders/spritedefloader.h
@@ -0,0 +1,43 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2004-2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ * Copyright (C) 2011-2016 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/>.
+ */
+
+#ifndef RESOURCES_LOADERS_SPRITEDEFLOADER_H
+#define RESOURCES_LOADERS_SPRITEDEFLOADER_H
+
+#include <string>
+
+#include "localconsts.h"
+
+class SpriteDef;
+
+namespace Loader
+{
+ /**
+ * Creates a sprite definition based on a given path and the supplied
+ * variant.
+ */
+ SpriteDef *getSprite(const std::string &path,
+ const int variant = 0) A_WARN_UNUSED;
+
+} // namespace Loader
+
+#endif // RESOURCES_LOADERS_SPRITEDEFLOADER_H
diff --git a/src/resources/resourcemanager/resourcemanager.cpp b/src/resources/resourcemanager/resourcemanager.cpp
index dd652c22b..2289fcffd 100644
--- a/src/resources/resourcemanager/resourcemanager.cpp
+++ b/src/resources/resourcemanager/resourcemanager.cpp
@@ -72,8 +72,7 @@ ResourceManager::ResourceManager() :
mOrphanedResources(),
mDeletedResources(),
mOldestOrphan(0),
- mDestruction(0),
- mUseLongLiveSprites(config.getBoolValue("uselonglivesprites"))
+ mDestruction(0)
{
logger->log1("Initializing resource manager...");
}
@@ -527,31 +526,6 @@ Resource *ResourceManager::get(const std::string &idPath,
return resource;
}
-struct SpriteDefLoader final
-{
- std::string path;
- int variant;
- bool useLongLiveSprites;
- static Resource *load(const void *const v)
- {
- if (!v)
- return nullptr;
-
- const SpriteDefLoader *const
- rl = static_cast<const SpriteDefLoader *const>(v);
- return SpriteDef::load(rl->path, rl->variant, rl->useLongLiveSprites);
- }
-};
-
-SpriteDef *ResourceManager::getSprite(const std::string &path,
- const int variant)
-{
- SpriteDefLoader rl = { path, variant, mUseLongLiveSprites };
- std::stringstream ss;
- ss << path << "[" << variant << "]";
- return static_cast<SpriteDef*>(get(ss.str(), SpriteDefLoader::load, &rl));
-}
-
void ResourceManager::release(Resource *const res)
{
if (!res || mDestruction)
diff --git a/src/resources/resourcemanager/resourcemanager.h b/src/resources/resourcemanager/resourcemanager.h
index 582359079..71643d1ac 100644
--- a/src/resources/resourcemanager/resourcemanager.h
+++ b/src/resources/resourcemanager/resourcemanager.h
@@ -134,13 +134,6 @@ class ResourceManager final : public MemoryCounter
bool addResource(const std::string &idPath, Resource *const resource);
/**
- * Creates a sprite definition based on a given path and the supplied
- * variant.
- */
- SpriteDef *getSprite(const std::string &path,
- const int variant = 0) A_WARN_UNUSED;
-
- /**
* Releases a resource, placing it in the set of orphaned resources.
*/
void release(Resource *const res);
@@ -223,7 +216,6 @@ class ResourceManager final : public MemoryCounter
std::set<Resource*> mDeletedResources;
time_t mOldestOrphan;
bool mDestruction;
- bool mUseLongLiveSprites;
};
extern ResourceManager *resourceManager;
diff --git a/src/resources/sprite/animatedsprite.cpp b/src/resources/sprite/animatedsprite.cpp
index 6ada9c394..8a60de0f3 100644
--- a/src/resources/sprite/animatedsprite.cpp
+++ b/src/resources/sprite/animatedsprite.cpp
@@ -32,6 +32,8 @@
#include "resources/animation/animation.h"
+#include "resources/loaders/spritedefloader.h"
+
#include "resources/resourcemanager/resourcemanager.h"
#include "resources/sprite/animationdelayload.h"
@@ -67,7 +69,7 @@ AnimatedSprite::AnimatedSprite(SpriteDef *restrict const sprite) :
AnimatedSprite *AnimatedSprite::load(const std::string &restrict filename,
const int variant)
{
- SpriteDef *restrict const s = resourceManager->getSprite(
+ SpriteDef *restrict const s = Loader::getSprite(
filename, variant);
if (!s)
return nullptr;
diff --git a/src/resources/sprite/animationdelayload.cpp b/src/resources/sprite/animationdelayload.cpp
index fa33ff5f5..838dad42d 100644
--- a/src/resources/sprite/animationdelayload.cpp
+++ b/src/resources/sprite/animationdelayload.cpp
@@ -22,7 +22,7 @@
#include "const/resources/spriteaction.h"
-#include "resources/resourcemanager/resourcemanager.h"
+#include "resources/loaders/spritedefloader.h"
#include "resources/sprite/animatedsprite.h"
@@ -56,7 +56,7 @@ void AnimationDelayLoad::load()
{
if (mSprite)
{
- SpriteDef *const s = resourceManager->getSprite(mFileName, mVariant);
+ SpriteDef *const s = Loader::getSprite(mFileName, mVariant);
if (!s)
return;
mSprite->setSprite(s);
diff --git a/src/settings.cpp b/src/settings.cpp
index eabe446e3..8a19fca3f 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -20,6 +20,13 @@
#include "settings.h"
+#include "configuration.h"
+
#include "debug.h"
Settings settings;
+
+void Settings::init()
+{
+ uselonglivesprites = config.getBoolValue("uselonglivesprites");
+}
diff --git a/src/settings.h b/src/settings.h
index 0bc167564..0006fa087 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -86,9 +86,12 @@ class Settings final
fixDeadAnimation(true),
disableLoggingInGame(false),
legacyEffects(true),
- enableRemoteCommands(true)
+ enableRemoteCommands(true),
+ uselonglivesprites(false)
{ }
+ void init();
+
std::string updateHost;
std::string login;
std::string oldUpdates;
@@ -141,6 +144,7 @@ class Settings final
bool disableLoggingInGame;
bool legacyEffects;
bool enableRemoteCommands;
+ bool uselonglivesprites;
};
extern Settings settings;