diff options
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/emotecontainer.cpp | 29 | ||||
-rw-r--r-- | src/gui/emotecontainer.h | 6 | ||||
-rw-r--r-- | src/gui/emoteshortcutcontainer.cpp | 42 | ||||
-rw-r--r-- | src/gui/emoteshortcutcontainer.h | 7 | ||||
-rw-r--r-- | src/gui/emotewindow.cpp | 10 | ||||
-rw-r--r-- | src/gui/emotewindow.h | 2 |
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; |