summaryrefslogtreecommitdiff
path: root/src/resources/resourcemanager.cpp
diff options
context:
space:
mode:
authorBjørn Lindeijer <bjorn@lindeijer.nl>2007-11-21 19:43:11 +0000
committerBjørn Lindeijer <bjorn@lindeijer.nl>2007-11-21 19:43:11 +0000
commit7c7909350565c3506f8b24645cac10f3197e1fc5 (patch)
tree748ce81596f924d81cb7b6fdba84fe22a054e305 /src/resources/resourcemanager.cpp
parent434d0bd000576b534c51f611c09eb99b3863e1c5 (diff)
downloadmana-7c7909350565c3506f8b24645cac10f3197e1fc5.tar.gz
mana-7c7909350565c3506f8b24645cac10f3197e1fc5.tar.bz2
mana-7c7909350565c3506f8b24645cac10f3197e1fc5.tar.xz
mana-7c7909350565c3506f8b24645cac10f3197e1fc5.zip
Merged revisions 3705-3711,3714,3718,3721-3722,3729-3731,3735,3742 via svnmerge from
https://themanaworld.svn.sourceforge.net/svnroot/themanaworld/tmw/trunk (dynamic recoloring of sprites and related changes) ........ r3705 | gmelquio | 2007-11-03 10:58:25 +0100 (Sat, 03 Nov 2007) | 1 line Fixed double load of hair graphics. ........ r3706 | gmelquio | 2007-11-03 22:04:51 +0100 (Sat, 03 Nov 2007) | 1 line Added automatic recoloring of images. Inspired by fungos' ideas (PR #41). ........ r3707 | gmelquio | 2007-11-03 22:08:21 +0100 (Sat, 03 Nov 2007) | 1 line Experimented recoloring on scorpions. ........ r3708 | gmelquio | 2007-11-04 12:52:44 +0100 (Sun, 04 Nov 2007) | 1 line Tightened palette handling. ........ r3709 | gmelquio | 2007-11-04 12:54:31 +0100 (Sun, 04 Nov 2007) | 1 line Experimented with scorpions again. ........ r3710 | gmelquio | 2007-11-04 16:40:37 +0100 (Sun, 04 Nov 2007) | 1 line Applied recoloring to hair styles. ........ r3711 | gmelquio | 2007-11-04 17:50:37 +0100 (Sun, 04 Nov 2007) | 1 line Converted slimes to recoloring. ........ r3742 | gmelquio | 2007-11-16 14:16:00 +0100 (Fri, 16 Nov 2007) | 1 line Sped up recoloring of transparent pixels. ........
Diffstat (limited to 'src/resources/resourcemanager.cpp')
-rw-r--r--src/resources/resourcemanager.cpp43
1 files changed, 35 insertions, 8 deletions
diff --git a/src/resources/resourcemanager.cpp b/src/resources/resourcemanager.cpp
index e507835a..3368d05b 100644
--- a/src/resources/resourcemanager.cpp
+++ b/src/resources/resourcemanager.cpp
@@ -28,6 +28,7 @@
#include <physfs.h>
#include <SDL_image.h>
+#include "dye.h"
#include "image.h"
#include "music.h"
#include "soundeffect.h"
@@ -204,12 +205,6 @@ Resource *ResourceManager::load(std::string const &path, loader fun)
return get(path, ResourceLoader::load, &l);
}
-Image*
-ResourceManager::getImage(const std::string &idPath)
-{
- return static_cast<Image*>(load(idPath, Image::load));
-}
-
Music*
ResourceManager::getMusic(const std::string &idPath)
{
@@ -222,6 +217,38 @@ ResourceManager::getSoundEffect(const std::string &idPath)
return static_cast<SoundEffect*>(load(idPath, SoundEffect::load));
}
+struct DyedImageLoader
+{
+ ResourceManager *manager;
+ std::string path;
+ static Resource *load(void *v)
+ {
+ DyedImageLoader *l = static_cast< DyedImageLoader * >(v);
+ std::string path = l->path;
+ std::string::size_type p = path.find('|');
+ Dye *d = NULL;
+ if (p != std::string::npos)
+ {
+ d = new Dye(path.substr(p + 1));
+ path = path.substr(0, p);
+ }
+ int fileSize;
+ void *buffer = l->manager->loadFile(path, fileSize);
+ if (!buffer) return NULL;
+ Resource *res = d ? Image::load(buffer, fileSize, *d)
+ : Image::load(buffer, fileSize);
+ free(buffer);
+ delete d;
+ return res;
+ }
+};
+
+Image *ResourceManager::getImage(std::string const &idPath)
+{
+ DyedImageLoader l = { this, idPath };
+ return static_cast<Image*>(get(idPath, DyedImageLoader::load, &l));
+}
+
struct ImageSetLoader
{
ResourceManager *manager;
@@ -258,8 +285,8 @@ struct SpriteDefLoader
}
};
-SpriteDef*
-ResourceManager::getSprite(const std::string &path, int variant)
+SpriteDef *ResourceManager::getSprite
+ (std::string const &path, int variant)
{
SpriteDefLoader l = { path, variant };
std::stringstream ss;