summaryrefslogtreecommitdiff
path: root/src/resources
diff options
context:
space:
mode:
authorBjørn Lindeijer <bjorn@lindeijer.nl>2006-09-29 23:59:08 +0000
committerBjørn Lindeijer <bjorn@lindeijer.nl>2006-09-29 23:59:08 +0000
commite8f94fe7ca5e7e7838eaa84f1792b4b42b4bada3 (patch)
treee8dc775e12f6b4eb0a6d56448f05286c774bbb8a /src/resources
parent0e8c09433f3a193b5a94a1ad572d8237113cdfbf (diff)
downloadmana-client-e8f94fe7ca5e7e7838eaa84f1792b4b42b4bada3.tar.gz
mana-client-e8f94fe7ca5e7e7838eaa84f1792b4b42b4bada3.tar.bz2
mana-client-e8f94fe7ca5e7e7838eaa84f1792b4b42b4bada3.tar.xz
mana-client-e8f94fe7ca5e7e7838eaa84f1792b4b42b4bada3.zip
Merged trunk changes from revision 2618 to 2716 into the 0.1.0 branch.
Diffstat (limited to 'src/resources')
-rw-r--r--src/resources/image.cpp21
-rw-r--r--src/resources/image.h7
-rw-r--r--src/resources/iteminfo.cpp31
-rw-r--r--src/resources/iteminfo.h34
-rw-r--r--src/resources/itemmanager.cpp9
-rw-r--r--src/resources/itemmanager.h8
6 files changed, 71 insertions, 39 deletions
diff --git a/src/resources/image.cpp b/src/resources/image.cpp
index 51899d3f..eb3a2409 100644
--- a/src/resources/image.cpp
+++ b/src/resources/image.cpp
@@ -260,11 +260,18 @@ void Image::unload()
{
mLoaded = false;
- if (!mImage) return;
+ if (mImage) {
+ // Free the image surface.
+ SDL_FreeSurface(mImage);
+ mImage = NULL;
+ }
- // Free the image surface.
- SDL_FreeSurface(mImage);
- mImage = NULL;
+#ifdef USE_OPENGL
+ if (mGLImage) {
+ glDeleteTextures(1, &mGLImage);
+ mGLImage = 0;
+ }
+#endif
}
Image *Image::getSubImage(int x, int y, int width, int height)
@@ -341,7 +348,11 @@ SubImage::SubImage(Image *parent, GLuint image,
SubImage::~SubImage()
{
- mImage = 0; // Avoid destruction of the image
+ // Avoid destruction of the image
+ mImage = 0;
+#ifdef USE_OPENGL
+ mGLImage = 0;
+#endif
mParent->decRef();
}
diff --git a/src/resources/image.h b/src/resources/image.h
index 78751394..a1ab7f48 100644
--- a/src/resources/image.h
+++ b/src/resources/image.h
@@ -28,6 +28,13 @@
#include <SDL.h>
#ifdef USE_OPENGL
+
+/* The definition of OpenGL extensions by SDL is giving problems with recent
+ * gl.h headers, since they also include these definitions. As we're not using
+ * extensions anyway it's safe to just disable the SDL version.
+ */
+#define NO_SDL_GLEXT
+
#include <SDL_opengl.h>
#endif
diff --git a/src/resources/iteminfo.cpp b/src/resources/iteminfo.cpp
index 5d39d832..b09d1cc0 100644
--- a/src/resources/iteminfo.cpp
+++ b/src/resources/iteminfo.cpp
@@ -23,22 +23,33 @@
#include "iteminfo.h"
#include "resourcemanager.h"
+#include "image.h"
-Image*
-ItemInfo::getImage() {
- if (mImage == NULL && mImageName != "") {
- mImage = ResourceManager::getInstance()->getImage(mImageName);
+
+ItemInfo::~ItemInfo()
+{
+ if (mImage != NULL)
+ {
+ mImage->decRef();
}
- return mImage;
}
void
-ItemInfo::setImage(const std::string &image) {
+ItemInfo::setImage(const std::string &image)
+{
mImageName = "graphics/items/" + image;
-}
-ItemInfo::~ItemInfo() {
- if (mImage != NULL){
- mImage->decRef();
+ if (mImageName != "")
+ {
+ if (mImage != NULL)
+ {
+ mImage->decRef();
+ }
+
+ mImage = ResourceManager::getInstance()->getImage(mImageName);
+ }
+ else
+ {
+ mImage = NULL;
}
}
diff --git a/src/resources/iteminfo.h b/src/resources/iteminfo.h
index afa2e857..9a04bb2e 100644
--- a/src/resources/iteminfo.h
+++ b/src/resources/iteminfo.h
@@ -26,7 +26,7 @@
#include <string>
-#include "image.h"
+class Image;
/**
* Defines a class for storing item infos.
@@ -40,8 +40,8 @@ class ItemInfo
* Constructor.
*/
ItemInfo():
- mImage(NULL),
mImageName(""),
+ mImage(NULL),
mArt(0),
mType(0),
mWeight(0),
@@ -53,19 +53,19 @@ class ItemInfo
setArt(short art) { mArt = art; }
short
- getArt() { return mArt; }
+ getArt() const { return mArt; }
void
setName(const std::string &name) { mName = name; }
- std::string
- getName() { return mName; }
+ const std::string&
+ getName() const { return mName; }
void
setImage(const std::string &image);
Image*
- getImage();
+ getImage() const { return mImage; }
void
setDescription(const std::string &description)
@@ -73,32 +73,32 @@ class ItemInfo
mDescription = description;
}
- std::string
- getDescription() { return mDescription; }
+ const std::string&
+ getDescription() const { return mDescription; }
void
setEffect(const std::string &effect) { mEffect = effect; }
- std::string
- getEffect() { return mEffect; }
+ const std::string&
+ getEffect() const { return mEffect; }
void
setType(short type) { mType = type; }
short
- getType() { return mType; }
+ getType() const { return mType; }
void
setWeight(short weight) { mWeight = weight; }
short
- getWeight() { return mWeight; }
+ getWeight() const { return mWeight; }
void
setSlot(char slot) { mSlot = slot; }
char
- getSlot() { return mSlot; }
+ getSlot() const { return mSlot; }
protected:
/**
@@ -106,8 +106,14 @@ class ItemInfo
*/
~ItemInfo();
- Image* mImage;
std::string mImageName;
+
+ /* TODO (BL): I do not think the item info should keep a reference to
+ * the item icon. It would probably be better if this was kept in the
+ * Item class, so that the images can be lazily instantiated and also
+ * unloaded when no longer used.
+ */
+ Image *mImage;
short mArt;
std::string mName;
std::string mDescription;
diff --git a/src/resources/itemmanager.cpp b/src/resources/itemmanager.cpp
index a497b3c8..7d0b13f2 100644
--- a/src/resources/itemmanager.cpp
+++ b/src/resources/itemmanager.cpp
@@ -41,8 +41,7 @@
ItemManager::ItemManager()
{
- mUnknown = new ItemInfo();
- mUnknown->setName("Unknown item");
+ mUnknown.setName("Unknown item");
ResourceManager *resman = ResourceManager::getInstance();
int size;
@@ -163,14 +162,12 @@ ItemManager::~ItemManager()
delete i->second;
}
mItemInfos.clear();
-
- delete mUnknown;
}
-ItemInfo*
+const ItemInfo&
ItemManager::getItemInfo(int id)
{
ItemInfoIterator i = mItemInfos.find(id);
- return (i != mItemInfos.end()) ? i->second : mUnknown;
+ return (i != mItemInfos.end()) ? *(i->second) : mUnknown;
}
diff --git a/src/resources/itemmanager.h b/src/resources/itemmanager.h
index 06eee507..b1f2b95c 100644
--- a/src/resources/itemmanager.h
+++ b/src/resources/itemmanager.h
@@ -24,9 +24,9 @@
#ifndef _TMW_ITEM_MANAGER_H
#define _TMW_ITEM_MANAGER_H
-#include <map>
+#include "iteminfo.h"
-class ItemInfo;
+#include <map>
/**
* Defines a class to load items database.
@@ -44,14 +44,14 @@ class ItemManager
*/
~ItemManager();
- ItemInfo *getItemInfo(int id);
+ const ItemInfo& getItemInfo(int id);
protected:
// Items database
typedef std::map<int, ItemInfo*> ItemInfos;
typedef ItemInfos::iterator ItemInfoIterator;
ItemInfos mItemInfos;
- ItemInfo *mUnknown;
+ ItemInfo mUnknown;
};
extern ItemManager *itemDb;