summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/emotecontainer.cpp29
-rw-r--r--src/gui/emotecontainer.h6
-rw-r--r--src/gui/emoteshortcutcontainer.cpp42
-rw-r--r--src/gui/emoteshortcutcontainer.h7
-rw-r--r--src/gui/emotewindow.cpp10
-rw-r--r--src/gui/emotewindow.h2
6 files changed, 59 insertions, 37 deletions
diff --git a/src/gui/emotecontainer.cpp b/src/gui/emotecontainer.cpp
index c3e20c41..691211ca 100644
--- a/src/gui/emotecontainer.cpp
+++ b/src/gui/emotecontainer.cpp
@@ -25,14 +25,17 @@
#include "emotecontainer.h"
#include "emoteshortcut.h"
+#include "../animatedsprite.h"
#include "../configuration.h"
#include "../graphics.h"
#include "../log.h"
+#include "../resources/emotedb.h"
#include "../resources/image.h"
#include "../resources/iteminfo.h"
#include "../resources/resourcemanager.h"
+#include "../utils/dtor.h"
#include "../utils/gettext.h"
#include "../utils/tostring.h"
@@ -46,15 +49,25 @@ EmoteContainer::EmoteContainer():
{
ResourceManager *resman = ResourceManager::getInstance();
- mEmoteImg = resman->getImageSet("graphics/sprites/emotions.png", 30, 32);
- if (!mEmoteImg) logger->error(_("Unable to load emotions"));
+ // Setup emote sprites
+ for (int i = 0; i <= EmoteDB::getLast(); i++)
+ {
+ EmoteInfo info = EmoteDB::get(i);
+
+ if (info.sprites != EmoteDB::getUnknown().sprites)
+ {
+ std::string file = "graphics/sprites/" + info.sprites.front()->sprite;
+ int variant = info.sprites.front()->variant;
+ mEmoteImg.push_back(AnimatedSprite::load(file, variant));
+ }
+ }
mSelImg = resman->getImage("graphics/gui/selection.png");
if (!mSelImg) logger->error(_("Unable to load selection.png"));
mSelImg->setAlpha(config.getValue("guialpha", 0.8));
- mMaxEmote = mEmoteImg->size();
+ mMaxEmote = EmoteDB::getLast() + 1;
addMouseListener(this);
addWidgetListener(this);
@@ -62,11 +75,8 @@ EmoteContainer::EmoteContainer():
EmoteContainer::~EmoteContainer()
{
- if (mEmoteImg)
- {
- mEmoteImg->decRef();
- mEmoteImg = NULL;
- }
+ delete_all(mEmoteImg);
+
if (!mSelImg)
{
mSelImg->decRef();
@@ -90,8 +100,7 @@ void EmoteContainer::draw(gcn::Graphics *graphics)
int emoteY = ((i) / columns) * gridHeight;
// Draw emote icon
- static_cast<Graphics*>(graphics)->drawImage(
- mEmoteImg->get(i), emoteX, emoteY);
+ mEmoteImg[i]->draw(static_cast<Graphics*>(graphics), emoteX, emoteY);
// Draw selection image below selected item
if (mSelectedEmoteIndex == i)
diff --git a/src/gui/emotecontainer.h b/src/gui/emotecontainer.h
index 2a115f0b..2231e01a 100644
--- a/src/gui/emotecontainer.h
+++ b/src/gui/emotecontainer.h
@@ -23,6 +23,7 @@
#define _AETHYRA_EMOTECONTAINER_H__
#include <list>
+#include <vector>
#include <guichan/mouselistener.hpp>
#include <guichan/widget.hpp>
@@ -30,8 +31,7 @@
#include "../guichanfwd.h"
-#include "../resources/imageset.h"
-
+class AnimatedSprite;
class Image;
namespace gcn {
@@ -123,7 +123,7 @@ class EmoteContainer : public gcn::Widget,
*/
void distributeValueChangedEvent(void);
- ImageSet *mEmoteImg;
+ std::vector<AnimatedSprite*> mEmoteImg;
Image *mSelImg;
int mSelectedEmoteIndex;
diff --git a/src/gui/emoteshortcutcontainer.cpp b/src/gui/emoteshortcutcontainer.cpp
index de9f8bab..edaa8602 100644
--- a/src/gui/emoteshortcutcontainer.cpp
+++ b/src/gui/emoteshortcutcontainer.cpp
@@ -21,6 +21,7 @@
#include "emoteshortcutcontainer.h"
+#include "../animatedsprite.h"
#include "../emoteshortcut.h"
#include "../graphics.h"
#include "../inventory.h"
@@ -30,12 +31,16 @@
#include "../localplayer.h"
#include "../log.h"
+#include "../resources/emotedb.h"
#include "../resources/image.h"
#include "../resources/resourcemanager.h"
+#include "../utils/dtor.h"
#include "../utils/gettext.h"
#include "../utils/tostring.h"
+static const int MAX_ITEMS = 12;
+
EmoteShortcutContainer::EmoteShortcutContainer():
mEmoteClicked(false),
mEmoteMoved(0)
@@ -48,10 +53,21 @@ EmoteShortcutContainer::EmoteShortcutContainer():
ResourceManager *resman = ResourceManager::getInstance();
mBackgroundImg = resman->getImage("graphics/gui/item_shortcut_bgr.png");
- mEmoteImg = resman->getImageSet("graphics/sprites/emotions.png", 30, 32);
- if (!mEmoteImg) logger->error(_("Unable to load emotions"));
- mMaxItems = emoteShortcut->getEmoteCount();
+ // Setup emote sprites
+ for (int i = 0; i <= EmoteDB::getLast(); i++)
+ {
+ EmoteInfo info = EmoteDB::get(i);
+
+ if (info.sprites != EmoteDB::getUnknown().sprites)
+ {
+ std::string file = "graphics/sprites/" + info.sprites.front()->sprite;
+ int variant = info.sprites.front()->variant;
+ mEmoteImg.push_back(AnimatedSprite::load(file, variant));
+ }
+ }
+
+ mMaxItems = MAX_ITEMS;
mBoxHeight = mBackgroundImg->getHeight();
mBoxWidth = mBackgroundImg->getWidth();
@@ -60,11 +76,8 @@ EmoteShortcutContainer::EmoteShortcutContainer():
EmoteShortcutContainer::~EmoteShortcutContainer()
{
mBackgroundImg->decRef();
- if (mEmoteImg)
- {
- mEmoteImg->decRef();
- mEmoteImg=NULL;
- }
+
+ delete_all(mEmoteImg);
}
void EmoteShortcutContainer::draw(gcn::Graphics *graphics)
@@ -88,21 +101,20 @@ void EmoteShortcutContainer::draw(gcn::Graphics *graphics)
if (emoteShortcut->getEmote(i))
{
- static_cast<Graphics*>(graphics)->drawImage(
- mEmoteImg->get(emoteShortcut->getEmote(i) - 1), emoteX + 2, emoteY + 10);
+ mEmoteImg[emoteShortcut->getEmote(i) - 1]->draw(g, emoteX + 2, emoteY + 10);
}
}
if (mEmoteMoved)
{
// Draw the emote image being dragged by the cursor.
- Image* image = mEmoteImg->get(mEmoteMoved-1);
- if (image)
+ AnimatedSprite* sprite = mEmoteImg[mEmoteMoved - 1];
+ if (sprite)
{
- const int tPosX = mCursorPosX - (image->getWidth() / 2);
- const int tPosY = mCursorPosY - (image->getHeight() / 2);
+ const int tPosX = mCursorPosX - (sprite->getWidth() / 2);
+ const int tPosY = mCursorPosY - (sprite->getHeight() / 2);
- g->drawImage(image, tPosX, tPosY);
+ sprite->draw(g, tPosX, tPosY);
}
}
}
diff --git a/src/gui/emoteshortcutcontainer.h b/src/gui/emoteshortcutcontainer.h
index 5b3f61cd..f8a07dcc 100644
--- a/src/gui/emoteshortcutcontainer.h
+++ b/src/gui/emoteshortcutcontainer.h
@@ -22,6 +22,8 @@
#ifndef _AETHYRA_EMOTESHORTCUTCONTAINER_H__
#define _AETHYRA_EMOTESHORTCUTCONTAINER_H__
+#include <vector>
+
#include <guichan/mouselistener.hpp>
#include <guichan/widget.hpp>
#include <guichan/widgetlistener.hpp>
@@ -30,8 +32,7 @@
#include "../guichanfwd.h"
-#include "../resources/imageset.h"
-
+class AnimatedSprite;
class Image;
/**
@@ -73,7 +74,7 @@ class EmoteShortcutContainer : public ShortcutContainer
void mouseReleased(gcn::MouseEvent &event);
private:
- ImageSet *mEmoteImg;
+ std::vector<AnimatedSprite*> mEmoteImg;
bool mEmoteClicked;
int mEmoteMoved;
diff --git a/src/gui/emotewindow.cpp b/src/gui/emotewindow.cpp
index af9648ef..9639d9b6 100644
--- a/src/gui/emotewindow.cpp
+++ b/src/gui/emotewindow.cpp
@@ -48,13 +48,13 @@ EmoteWindow::EmoteWindow():
mEmotes = new EmoteContainer();
mEmotes->addSelectionListener(this);
- mInvenScroll = new ScrollArea(mEmotes);
- mInvenScroll->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER);
+ mEmoteScroll = new ScrollArea(mEmotes);
+ mEmoteScroll->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER);
draw();
add(mUseButton);
- add(mInvenScroll);
+ add(mEmoteScroll);
mUseButton->setSize(60, mUseButton->getHeight());
@@ -80,8 +80,8 @@ void EmoteWindow::draw()
mUseButton->setPosition(8, height - 8 - mUseButton->getHeight());
- mInvenScroll->setSize(width - 16, mUseButton->getY() - 18);
- mInvenScroll->setPosition(8, 10);
+ mEmoteScroll->setSize(width - 16, mUseButton->getY() - 18);
+ mEmoteScroll->setPosition(8, 10);
setMinHeight(130);
}
diff --git a/src/gui/emotewindow.h b/src/gui/emotewindow.h
index dbe4efd7..a996db99 100644
--- a/src/gui/emotewindow.h
+++ b/src/gui/emotewindow.h
@@ -70,7 +70,7 @@ class EmoteWindow : public Window, gcn::ActionListener,
EmoteContainer *mEmotes;
gcn::Button *mUseButton;
- gcn::ScrollArea *mInvenScroll;
+ gcn::ScrollArea *mEmoteScroll;
};
extern EmoteWindow *emoteWindow;