From 7c7909350565c3506f8b24645cac10f3197e1fc5 Mon Sep 17 00:00:00 2001 From: Bjørn Lindeijer Date: Wed, 21 Nov 2007 19:43:11 +0000 Subject: 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. ........ --- src/resources/spritedef.cpp | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) (limited to 'src/resources/spritedef.cpp') diff --git a/src/resources/spritedef.cpp b/src/resources/spritedef.cpp index 45a52d2e..de6f8d0b 100644 --- a/src/resources/spritedef.cpp +++ b/src/resources/spritedef.cpp @@ -25,14 +25,14 @@ #include "spritedef.h" -#include "../log.h" - -#include "animation.h" #include "action.h" -#include "resourcemanager.h" -#include "imageset.h" +#include "animation.h" +#include "dye.h" #include "image.h" +#include "imageset.h" +#include "resourcemanager.h" +#include "../log.h" #include "../utils/xml.h" Action* @@ -53,7 +53,14 @@ SpriteDef *SpriteDef::load(std::string const &animationFile, int variant) { int size; ResourceManager *resman = ResourceManager::getInstance(); - char *data = (char*) resman->loadFile(animationFile.c_str(), size); + + std::string::size_type pos = animationFile.find('|'); + std::string palettes; + if (pos != std::string::npos) + palettes = animationFile.substr(pos + 1); + + char *data = (char*) resman->loadFile + (animationFile.substr(0, pos).c_str(), size); if (!data) return NULL; @@ -89,7 +96,7 @@ SpriteDef *SpriteDef::load(std::string const &animationFile, int variant) { if (xmlStrEqual(node->name, BAD_CAST "imageset")) { - def->loadImageSet(node); + def->loadImageSet(node, palettes); } else if (xmlStrEqual(node->name, BAD_CAST "action")) { @@ -125,13 +132,13 @@ void SpriteDef::substituteActions() substituteAction(ACTION_DEAD, ACTION_HURT); } -void -SpriteDef::loadImageSet(xmlNodePtr node) +void SpriteDef::loadImageSet(xmlNodePtr node, std::string const &palettes) { int width = XML::getProperty(node, "width", 0); int height = XML::getProperty(node, "height", 0); std::string name = XML::getProperty(node, "name", ""); std::string imageSrc = XML::getProperty(node, "src", ""); + Dye::instantiate(imageSrc, palettes); ResourceManager *resman = ResourceManager::getInstance(); ImageSet *imageSet = resman->getImageSet(imageSrc, width, height); -- cgit v1.2.3-60-g2f50