From 2032ca0fb1fd6b59c025180b673e6760d9c12bdc Mon Sep 17 00:00:00 2001 From: Jared Adams Date: Thu, 14 May 2009 10:32:17 -0600 Subject: Add QOAL's outfit window --- src/gui/itemcontainer.cpp | 4 ++++ src/gui/windowmenu.cpp | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) (limited to 'src/gui') diff --git a/src/gui/itemcontainer.cpp b/src/gui/itemcontainer.cpp index 54aa818b..d8ae6e20 100644 --- a/src/gui/itemcontainer.cpp +++ b/src/gui/itemcontainer.cpp @@ -23,6 +23,7 @@ #include "gui/chat.h" #include "gui/itempopup.h" +#include "gui/outfitwindow.h" #include "gui/palette.h" #include "gui/sdlinput.h" #include "gui/viewport.h" @@ -162,6 +163,7 @@ void ItemContainer::selectNone() { setSelectedIndex(-1); mSelectionStatus = SEL_NONE; + outfitWindow->setItemSelected(-1); } void ItemContainer::setSelectedIndex(int newIndex) @@ -260,6 +262,8 @@ void ItemContainer::mousePressed(gcn::MouseEvent &event) mSelectionStatus = SEL_SELECTING; itemShortcut->setItemSelected(item->getId()); + if (item->isEquipment()) + outfitWindow->setItemSelected(item->getId()); } else { diff --git a/src/gui/windowmenu.cpp b/src/gui/windowmenu.cpp index 5e33a4ed..d66aa602 100644 --- a/src/gui/windowmenu.cpp +++ b/src/gui/windowmenu.cpp @@ -47,7 +47,7 @@ extern Window *buddyWindow; extern Window *guildWindow; extern Window *magicDialog; #endif - +extern Window *outfitWindow; WindowMenu::WindowMenu(): mEmotePopup(0) @@ -56,6 +56,7 @@ WindowMenu::WindowMenu(): static const char *buttonNames[] = { ":-)", + N_("Outfits"), N_("Status"), N_("Equipment"), N_("Inventory"), @@ -114,6 +115,10 @@ void WindowMenu::action(const gcn::ActionEvent &event) mEmotePopup = 0; } } + else if (event.getId() == "Outfits") + { + window = outfitWindow; + } else if (event.getId() == "Status") { window = statusWindow; -- cgit v1.2.3-70-g09d2 From c316bd0a9ffdbeb85ea80dc3ca2e731062b45c85 Mon Sep 17 00:00:00 2001 From: Jared Adams Date: Thu, 14 May 2009 11:21:37 -0600 Subject: Add missing windows --- src/gui/outfitwindow.cpp | 301 +++++++++++++++++++++++++++++++++++++++++++++++ src/gui/outfitwindow.h | 92 +++++++++++++++ 2 files changed, 393 insertions(+) create mode 100644 src/gui/outfitwindow.cpp create mode 100644 src/gui/outfitwindow.h (limited to 'src/gui') diff --git a/src/gui/outfitwindow.cpp b/src/gui/outfitwindow.cpp new file mode 100644 index 00000000..1812c58b --- /dev/null +++ b/src/gui/outfitwindow.cpp @@ -0,0 +1,301 @@ +/* + * The Mana World + * Copyright (C) 2007 The Mana World Development Team + * + * This file is part of The Mana World. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "outfitwindow.h" + +#include "configuration.h" +#include "localplayer.h" +#include "graphics.h" +#include "inventory.h" +#include "equipment.h" +#include "item.h" + +#include "gui/widgets/button.h" +#include "gui/widgets/checkbox.h" +#include "gui/widgets/label.h" +#include "gui/widgets/layout.h" + +#include "net/inventoryhandler.h" +#include "net/net.h" + +#include "resources/image.h" + +#include "utils/gettext.h" +#include "utils/stringutils.h" + +#include + +OutfitWindow::OutfitWindow(): + Window(_("Outfits")), + mBoxWidth(33), + mBoxHeight(33), + mGridWidth(3), + mGridHeight(3), + mItemClicked(false), + mItemMoved(NULL), + mItemSelected(-1), + mCurrentOutfit(0) +{ + setWindowName("Outfits"); + setCloseButton(true); + setDefaultSize(250, 250, 118, 180); //160 + + mPreviousButton = new Button("<", "previous", this); + mNextButton = new Button(">", "next", this); + mCurrentLabel = new Label("Outfit: 1"); + mCurrentLabel->setAlignment(gcn::Graphics::CENTER); + mUnequipCheck = new CheckBox(_("Unequip first"), + config.getValue("OutfitUnequip", true)); + + place(0, 3, mPreviousButton, 1); + place(1, 3, mCurrentLabel, 2); + place(3, 3, mNextButton, 1); + place(0, 4, mUnequipCheck, 4); + + Layout &layout = getLayout(); + layout.setRowHeight(0, Layout::AUTO_SET); + layout.setColWidth(4, Layout::CENTER); + + loadWindowState(); + + load(); +} + +OutfitWindow::~OutfitWindow() +{ + save(); +} + +void OutfitWindow::load() +{ + memset(mItems, -1, sizeof(mItems)); + for (int o = 0; o < 10; o++) + { + std::string outfit = config.getValue("Outfit" + toString(o), "-1"); + std::string buf; + std::stringstream ss(outfit); + + std::vector tokens; + + while (ss >> buf) { + tokens.push_back(atoi(buf.c_str())); + } + + for (int i = 0; i < (int)tokens.size(); i++) + { + mItems[o][i] = tokens[i]; + } + } +} + +void OutfitWindow::save() +{ + std::string outfitStr; + for (int o = 0; o < 10; o++) + { + for (int i = 0; i < 9; i++) + { + outfitStr += mItems[o][i] ? toString(mItems[o][i]) : toString(-1); + if (i <8) outfitStr += " "; + } + config.setValue("Outfit" + toString(o), outfitStr); + outfitStr = ""; + } + config.setValue("OutfitUnequip", mUnequipCheck ? true : false); +} + +void OutfitWindow::action(const gcn::ActionEvent &event) +{ + if (event.getId() == "next") + { + if (mCurrentOutfit < 9) { + mCurrentOutfit++; + } else { + mCurrentOutfit = 0; + } + } + else if (event.getId() == "previous") + { + if (mCurrentOutfit > 0) { + mCurrentOutfit--; + } else { + mCurrentOutfit = 9; + } + } + mCurrentLabel->setCaption("Outfit: " + toString(mCurrentOutfit + 1)); +} + +void OutfitWindow::wearOutfit(int outfit) +{ + Item *item; + if (mUnequipCheck->isSelected()) + { + for (int i = 0; i < 11; i++) + { + //non vis is 3,4,7 + if (i != 3 && i != 4 && i != 7) + { + if (!(item = player_node->getInventory()->getItem(player_node + ->mEquipment.get()->getEquipment(i)))) + continue; + Net::getInventoryHandler()->unequipItem(item); + } + } + } + + for (int i = 0; i < 9; i++) + { + item = player_node->getInventory()->findItem(mItems[outfit][i]); + if (item && item->getQuantity()) + { + if (item->isEquipment()) { + Net::getInventoryHandler()->equipItem(item); + } + } + } +} + +void OutfitWindow::draw(gcn::Graphics *graphics) +{ + Window::draw(graphics); + Graphics *g = static_cast(graphics); + + for (int i = 0; i < 9; i++) + { + const int itemX = 10 + (i % mGridWidth) * mBoxWidth; + const int itemY = 25 + (i / mGridWidth) * mBoxHeight; + + graphics->setColor(gcn::Color(0, 0, 0, 64)); + graphics->drawRectangle(gcn::Rectangle(itemX, itemY, 32, 32)); + graphics->setColor(gcn::Color(255, 255, 255, 32)); + graphics->fillRectangle(gcn::Rectangle(itemX, itemY, 32, 32)); + + if (mItems[mCurrentOutfit][i] < 0) + continue; + + Item *item = + player_node->getInventory()->findItem(mItems[mCurrentOutfit][i]); + if (item) { + // Draw item icon. + Image* image = item->getImage(); + if (image) { + g->drawImage(image, itemX, itemY); + } + } + } + if (mItemMoved) + { + // Draw the item image being dragged by the cursor. + Image* image = mItemMoved->getImage(); + if (image) + { + const int tPosX = mCursorPosX - (image->getWidth() / 2); + const int tPosY = mCursorPosY - (image->getHeight() / 2); + + g->drawImage(image, tPosX, tPosY); + } + } +} + + +void OutfitWindow::mouseDragged(gcn::MouseEvent &event) +{ + Window::mouseDragged(event); + if (event.getButton() == gcn::MouseEvent::LEFT) { + if (!mItemMoved && mItemClicked) { + const int index = getIndexFromGrid(event.getX(), event.getY()); + if (index == -1) { + return; + } + const int itemId = mItems[mCurrentOutfit][index]; + if (itemId < 0) + return; + Item *item = player_node->getInventory()->findItem(itemId); + if (item) + { + mItemMoved = item; + mItems[mCurrentOutfit][index] = -1; + } + } + if (mItemMoved) { + mCursorPosX = event.getX(); + mCursorPosY = event.getY(); + } + } +} + +void OutfitWindow::mousePressed(gcn::MouseEvent &event) +{ + Window::mousePressed(event); + const int index = getIndexFromGrid(event.getX(), event.getY()); + if (index == -1) { + return; + } + + // Stores the selected item if there is one. + if (isItemSelected()) { + mItems[mCurrentOutfit][index] = mItemSelected; + mItemSelected = -1; + } + else if (mItems[mCurrentOutfit][index]) { + mItemClicked = true; + } +} + +void OutfitWindow::mouseReleased(gcn::MouseEvent &event) +{ + Window::mouseReleased(event); + if (event.getButton() == gcn::MouseEvent::LEFT) + { + if (isItemSelected()) + { + mItemSelected = -1; + } + const int index = getIndexFromGrid(event.getX(), event.getY()); + if (index == -1) { + mItemMoved = NULL; + return; + } + if (mItemMoved) { + mItems[mCurrentOutfit][index] = mItemMoved->getId(); + mItemMoved = NULL; + } + if (mItemClicked) { + mItemClicked = false; + } + } +} + +int OutfitWindow::getIndexFromGrid(int pointX, int pointY) const +{ + const gcn::Rectangle tRect = gcn::Rectangle( + 10, 25, 10 + mGridWidth * mBoxWidth, 25 + mGridHeight * mBoxHeight); + if (!tRect.isPointInRect(pointX, pointY)) { + return -1; + } + const int index = (((pointY - 25) / mBoxHeight) * mGridWidth) + + (pointX - 10) / mBoxWidth; + if (index >= 9) + { + return -1; + } + return index; +} diff --git a/src/gui/outfitwindow.h b/src/gui/outfitwindow.h new file mode 100644 index 00000000..3e70815c --- /dev/null +++ b/src/gui/outfitwindow.h @@ -0,0 +1,92 @@ +/* + * The Mana World + * Copyright (C) 2007 The Mana World Development Team + * + * This file is part of The Mana World. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef OUTFITWINDOW_H +#define OUTFITWINDOW_H + +#include "gui/widgets/window.h" + +#include + +class Button; +class CheckBox; +class Item; +class Label; + +class OutfitWindow : public Window, gcn::ActionListener +{ + public: + /** + * Constructor. + */ + OutfitWindow(); + + /** + * Destructor. + */ + ~OutfitWindow(); + + void action(const gcn::ActionEvent &event); + + void draw(gcn::Graphics *graphics); + + void mousePressed(gcn::MouseEvent &event); + + void mouseDragged(gcn::MouseEvent &event); + + void mouseReleased(gcn::MouseEvent &event); + + void load(); + + void setItemSelected(int itemId) + { mItemSelected = itemId; } + + bool isItemSelected() + { return mItemSelected > -1; } + + void wearOutfit(int outfit); + + private: + Button *mPreviousButton; + Button *mNextButton; + Label *mCurrentLabel; + CheckBox *mUnequipCheck; + + int getIndexFromGrid(int pointX, int pointY) const; + + int mBoxWidth; + int mBoxHeight; + int mCursorPosX, mCursorPosY; + int mGridWidth, mGridHeight; + bool mItemClicked; + Item *mItemMoved; + + void save(); + + int mItems[10][9]; + int mItemSelected; + + int mCurrentOutfit; +}; + +extern OutfitWindow *outfitWindow; + +#endif -- cgit v1.2.3-70-g09d2 From 3591c264f14edf300e7d3ea20577c517a092cf50 Mon Sep 17 00:00:00 2001 From: Bjørn Lindeijer Date: Thu, 14 May 2009 19:08:25 +0200 Subject: Fixed alpha to also apply to the main text of a text particle It was only being applied to the outline and shadow. This improves the fadeout a little, but because the text is being rendered multiple times, it still looks strange. --- src/gui/textrenderer.h | 2 +- src/localplayer.cpp | 3 ++- src/localplayer.h | 3 ++- src/textparticle.cpp | 17 +++++++---------- src/textparticle.h | 2 +- 5 files changed, 13 insertions(+), 14 deletions(-) (limited to 'src/gui') diff --git a/src/gui/textrenderer.h b/src/gui/textrenderer.h index 712c1312..c8ff5833 100644 --- a/src/gui/textrenderer.h +++ b/src/gui/textrenderer.h @@ -50,7 +50,7 @@ class TextRenderer if (shadow) { graphics->setColor(guiPalette->getColor(Palette::SHADOW, - alpha / 2)); + alpha / 2)); if (outline) { graphics->drawText(text, x + 2, y + 2, align); diff --git a/src/localplayer.cpp b/src/localplayer.cpp index c1423190..7119bfc9 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -946,7 +946,8 @@ void LocalPlayer::initTargetCursor() true, TC_LARGE); } -void LocalPlayer::loadTargetCursor(std::string filename, int width, int height, +void LocalPlayer::loadTargetCursor(const std::string &filename, + int width, int height, bool outRange, TargetCursorSize size) { assert(size > -1); diff --git a/src/localplayer.h b/src/localplayer.h index add5c049..4a85dd75 100644 --- a/src/localplayer.h +++ b/src/localplayer.h @@ -490,7 +490,8 @@ class LocalPlayer : public Player /** * Helper function for loading target cursors */ - void loadTargetCursor(std::string filename, int width, int height, + void loadTargetCursor(const std::string &filename, + int width, int height, bool outRange, Being::TargetCursorSize size); /** Images of the target cursor. */ diff --git a/src/textparticle.cpp b/src/textparticle.cpp index 04b7abe1..da176087 100644 --- a/src/textparticle.cpp +++ b/src/textparticle.cpp @@ -26,7 +26,7 @@ #include "gui/textrenderer.h" TextParticle::TextParticle(Map *map, const std::string &text, - const gcn::Color* color, + const gcn::Color *color, gcn::Font *font, bool outline): Particle(map), mText(text), @@ -47,18 +47,15 @@ void TextParticle::draw(Graphics *graphics, int offsetX, int offsetY) const float alpha = mAlpha * 255.0f; if (mLifetimeLeft > -1 && mLifetimeLeft < mFadeOut) - { - alpha *= mLifetimeLeft; - alpha /= mFadeOut; - } + alpha = alpha * mLifetimeLeft / mFadeOut; if (mLifetimePast < mFadeIn) - { - alpha *= mLifetimePast; - alpha /= mFadeIn; - } + alpha = alpha * mLifetimePast / mFadeIn; + + gcn::Color color = *mColor; + color.a = (int) alpha; TextRenderer::renderText(graphics, mText, screenX, screenY, gcn::Graphics::CENTER, - *mColor, mTextFont, mOutline, false, (int) alpha); + color, mTextFont, mOutline, false, (int) alpha); } diff --git a/src/textparticle.h b/src/textparticle.h index 8b7d3e01..a87137ea 100644 --- a/src/textparticle.h +++ b/src/textparticle.h @@ -47,7 +47,7 @@ class TextParticle : public Particle private: std::string mText; /**< Text of the particle. */ gcn::Font *mTextFont; /**< Font used for drawing the text. */ - const gcn::Color* mColor; /**< Color used for drawing the text. */ + const gcn::Color *mColor; /**< Color used for drawing the text. */ bool mOutline; /**< Make the text better readable */ }; -- cgit v1.2.3-70-g09d2 From d4247f3edb63733e9b2a6903ad2ae08c770e8a0f Mon Sep 17 00:00:00 2001 From: Dennis Friis Date: Thu, 14 May 2009 21:49:19 +0200 Subject: Fixes to outfit window - Moved the outfit button onto the Inventory window - Fixed 'unequip first' saving bug Patch by QOAL --- src/gui/inventorywindow.cpp | 18 +++++++++++++++--- src/gui/inventorywindow.h | 1 + src/gui/outfitwindow.cpp | 2 +- src/gui/windowmenu.cpp | 6 ------ 4 files changed, 17 insertions(+), 10 deletions(-) (limited to 'src/gui') diff --git a/src/gui/inventorywindow.cpp b/src/gui/inventorywindow.cpp index d6cd3a84..c44ae9e7 100644 --- a/src/gui/inventorywindow.cpp +++ b/src/gui/inventorywindow.cpp @@ -79,6 +79,7 @@ InventoryWindow::InventoryWindow(int invSize): mUseButton = new Button(longestUseString, "use", this); mDropButton = new Button(_("Drop"), "drop", this); mSplitButton = new Button(_("Split"), "split", this); + mOutfitButton = new Button(_("Outfits"), "outfit", this); mItems = new ItemContainer(player_node->getInventory()); mItems->addSelectionListener(this); @@ -103,6 +104,7 @@ InventoryWindow::InventoryWindow(int invSize): place(0, 2, mUseButton); place(1, 2, mDropButton); place(2, 2, mSplitButton); + place(6, 2, mOutfitButton); Layout &layout = getLayout(); layout.setRowHeight(1, Layout::AUTO_SET); @@ -156,6 +158,16 @@ void InventoryWindow::logic() void InventoryWindow::action(const gcn::ActionEvent &event) { + if (event.getId() == "outfit") + { + extern Window *outfitWindow; + outfitWindow->setVisible(!outfitWindow->isVisible()); + if (outfitWindow->isVisible()) + { + outfitWindow->requestMoveToTop(); + } + } + Item *item = mItems->getSelectedItem(); if (!item) @@ -163,7 +175,7 @@ void InventoryWindow::action(const gcn::ActionEvent &event) if (event.getId() == "use") { - if (item->isEquipment()) + if (item->isEquipment()) { if (item->isEquipped()) Net::getInventoryHandler()->unequipItem(item); @@ -258,10 +270,10 @@ void InventoryWindow::updateButtons() mDropButton->setEnabled(false); return; } - + mUseButton->setEnabled(true); mDropButton->setEnabled(true); - + if (selectedItem->isEquipment()) { if (selectedItem->isEquipped()) diff --git a/src/gui/inventorywindow.h b/src/gui/inventorywindow.h index 6e34666d..fbda5ac7 100644 --- a/src/gui/inventorywindow.h +++ b/src/gui/inventorywindow.h @@ -109,6 +109,7 @@ class InventoryWindow : public Window, gcn::Button *mUseButton; gcn::Button *mDropButton; gcn::Button *mSplitButton; + gcn::Button *mOutfitButton; gcn::Label *mWeightLabel; gcn::Label *mSlotsLabel; diff --git a/src/gui/outfitwindow.cpp b/src/gui/outfitwindow.cpp index 1812c58b..53950299 100644 --- a/src/gui/outfitwindow.cpp +++ b/src/gui/outfitwindow.cpp @@ -119,7 +119,7 @@ void OutfitWindow::save() config.setValue("Outfit" + toString(o), outfitStr); outfitStr = ""; } - config.setValue("OutfitUnequip", mUnequipCheck ? true : false); + config.setValue("OutfitUnequip", mUnequipCheck->isSelected()); } void OutfitWindow::action(const gcn::ActionEvent &event) diff --git a/src/gui/windowmenu.cpp b/src/gui/windowmenu.cpp index d66aa602..8964f072 100644 --- a/src/gui/windowmenu.cpp +++ b/src/gui/windowmenu.cpp @@ -47,7 +47,6 @@ extern Window *buddyWindow; extern Window *guildWindow; extern Window *magicDialog; #endif -extern Window *outfitWindow; WindowMenu::WindowMenu(): mEmotePopup(0) @@ -56,7 +55,6 @@ WindowMenu::WindowMenu(): static const char *buttonNames[] = { ":-)", - N_("Outfits"), N_("Status"), N_("Equipment"), N_("Inventory"), @@ -115,10 +113,6 @@ void WindowMenu::action(const gcn::ActionEvent &event) mEmotePopup = 0; } } - else if (event.getId() == "Outfits") - { - window = outfitWindow; - } else if (event.getId() == "Status") { window = statusWindow; -- cgit v1.2.3-70-g09d2 From 53c32dd1beb5575c38bbc830f7d37cb954be90d2 Mon Sep 17 00:00:00 2001 From: Bjørn Lindeijer Date: Thu, 14 May 2009 19:08:25 +0200 Subject: Fixed alpha to also apply to the main text of a text particle It was only being applied to the outline and shadow. This improves the fadeout a little, but because the text is being rendered multiple times, it still looks strange. (cherry picked from commit 3591c264f14edf300e7d3ea20577c517a092cf50) --- src/gui/textrenderer.h | 2 +- src/localplayer.cpp | 3 ++- src/localplayer.h | 3 ++- src/textparticle.cpp | 17 +++++++---------- src/textparticle.h | 2 +- 5 files changed, 13 insertions(+), 14 deletions(-) (limited to 'src/gui') diff --git a/src/gui/textrenderer.h b/src/gui/textrenderer.h index 712c1312..c8ff5833 100644 --- a/src/gui/textrenderer.h +++ b/src/gui/textrenderer.h @@ -50,7 +50,7 @@ class TextRenderer if (shadow) { graphics->setColor(guiPalette->getColor(Palette::SHADOW, - alpha / 2)); + alpha / 2)); if (outline) { graphics->drawText(text, x + 2, y + 2, align); diff --git a/src/localplayer.cpp b/src/localplayer.cpp index c1423190..7119bfc9 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -946,7 +946,8 @@ void LocalPlayer::initTargetCursor() true, TC_LARGE); } -void LocalPlayer::loadTargetCursor(std::string filename, int width, int height, +void LocalPlayer::loadTargetCursor(const std::string &filename, + int width, int height, bool outRange, TargetCursorSize size) { assert(size > -1); diff --git a/src/localplayer.h b/src/localplayer.h index add5c049..4a85dd75 100644 --- a/src/localplayer.h +++ b/src/localplayer.h @@ -490,7 +490,8 @@ class LocalPlayer : public Player /** * Helper function for loading target cursors */ - void loadTargetCursor(std::string filename, int width, int height, + void loadTargetCursor(const std::string &filename, + int width, int height, bool outRange, Being::TargetCursorSize size); /** Images of the target cursor. */ diff --git a/src/textparticle.cpp b/src/textparticle.cpp index 04b7abe1..da176087 100644 --- a/src/textparticle.cpp +++ b/src/textparticle.cpp @@ -26,7 +26,7 @@ #include "gui/textrenderer.h" TextParticle::TextParticle(Map *map, const std::string &text, - const gcn::Color* color, + const gcn::Color *color, gcn::Font *font, bool outline): Particle(map), mText(text), @@ -47,18 +47,15 @@ void TextParticle::draw(Graphics *graphics, int offsetX, int offsetY) const float alpha = mAlpha * 255.0f; if (mLifetimeLeft > -1 && mLifetimeLeft < mFadeOut) - { - alpha *= mLifetimeLeft; - alpha /= mFadeOut; - } + alpha = alpha * mLifetimeLeft / mFadeOut; if (mLifetimePast < mFadeIn) - { - alpha *= mLifetimePast; - alpha /= mFadeIn; - } + alpha = alpha * mLifetimePast / mFadeIn; + + gcn::Color color = *mColor; + color.a = (int) alpha; TextRenderer::renderText(graphics, mText, screenX, screenY, gcn::Graphics::CENTER, - *mColor, mTextFont, mOutline, false, (int) alpha); + color, mTextFont, mOutline, false, (int) alpha); } diff --git a/src/textparticle.h b/src/textparticle.h index 8b7d3e01..a87137ea 100644 --- a/src/textparticle.h +++ b/src/textparticle.h @@ -47,7 +47,7 @@ class TextParticle : public Particle private: std::string mText; /**< Text of the particle. */ gcn::Font *mTextFont; /**< Font used for drawing the text. */ - const gcn::Color* mColor; /**< Color used for drawing the text. */ + const gcn::Color *mColor; /**< Color used for drawing the text. */ bool mOutline; /**< Make the text better readable */ }; -- cgit v1.2.3-70-g09d2 From 5cdca270a98b9358382e31e3a7b70b1e225bde66 Mon Sep 17 00:00:00 2001 From: Bjørn Lindeijer Date: Thu, 14 May 2009 23:15:54 +0200 Subject: Fixed Reset Windows to also reset the party window Mantis-issue: 697 --- src/gui/setup.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/gui') diff --git a/src/gui/setup.cpp b/src/gui/setup.cpp index e73f9b74..aebcf61b 100644 --- a/src/gui/setup.cpp +++ b/src/gui/setup.cpp @@ -46,6 +46,7 @@ extern Window *inventoryWindow; extern Window *npcTextDialog; extern Window *npcStringDialog; extern Window *skillDialog; +extern Window *partyWindow; extern Window *minimap; extern Window *equipmentWindow; extern Window *tradeWindow; @@ -145,6 +146,7 @@ void Setup::action(const gcn::ActionEvent &event) #endif inventoryWindow->resetToDefaultSize(); skillDialog->resetToDefaultSize(); + partyWindow->resetToDefaultSize(); minimap->resetToDefaultSize(); equipmentWindow->resetToDefaultSize(); tradeWindow->resetToDefaultSize(); -- cgit v1.2.3-70-g09d2 From ff4b7434b7bd25412a24a13bc0ef00e253c17f0e Mon Sep 17 00:00:00 2001 From: Maximilian Philipps Date: Fri, 15 May 2009 17:43:58 +0200 Subject: scale the partywindow down --- src/gui/partywindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/gui') diff --git a/src/gui/partywindow.cpp b/src/gui/partywindow.cpp index 1260a2c3..68e5a371 100644 --- a/src/gui/partywindow.cpp +++ b/src/gui/partywindow.cpp @@ -54,8 +54,8 @@ PartyWindow::PartyWindow() : setSaveVisible(true); setCloseButton(true); setMinWidth(120); - setMinHeight(200); - setDefaultSize(590, 200, 150, 200); + setMinHeight(55); + setDefaultSize(590, 200, 150, 60); loadWindowState(); } -- cgit v1.2.3-70-g09d2 From fc6b38d113e7f78af1075a37e1853e00294742e9 Mon Sep 17 00:00:00 2001 From: Dennis Friis Date: Sun, 17 May 2009 01:37:10 +0200 Subject: Enable and fix path drawing for athena. Notice that in Being::Logic() we call Being::setPosition() with the added offset of x+16, y+32, this makes both the Vector Being::mPos and Being::mPx / Being::mPy not mean the same as pre-merge client. Thus some effects and code dividing these members with 32 to get the tile coords get wrong results. Perhaps this all these methods of getting x,y on beings should be cleaned up so we have 1 method we settle on and store the sprites' fixed x,y offset on the sprite itself. so we have x + fixed_offset + animation_offset and not all these magic numbers floating around. --- src/gui/viewport.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/gui') diff --git a/src/gui/viewport.cpp b/src/gui/viewport.cpp index f92a81b8..2c3f4007 100644 --- a/src/gui/viewport.cpp +++ b/src/gui/viewport.cpp @@ -195,7 +195,7 @@ void Viewport::draw(gcn::Graphics *gcnGraphics) mMap->drawCollision(graphics, (int) mPixelViewX, (int) mPixelViewY); -#if 0 +#if EATHENA_SUPPORT drawDebugPath(graphics); #endif } @@ -265,8 +265,8 @@ void Viewport::drawDebugPath(Graphics *graphics) const Vector &playerPos = player_node->getPosition(); Path debugPath = mMap->findPath( - (int) playerPos.x / 32, - (int) playerPos.y / 32, + (int) (playerPos.x - 16) / 32, + (int) (playerPos.y - 32) / 32, mouseTileX, mouseTileY, 0xFF); drawPath(graphics, debugPath); -- cgit v1.2.3-70-g09d2 From 6e8b4df7f826ce7a6c43b22f67c654a5c4893a1c Mon Sep 17 00:00:00 2001 From: Maximilian Philipps Date: Fri, 15 May 2009 17:43:58 +0200 Subject: scale the partywindow down (cherry picked from commit ff4b7434b7bd25412a24a13bc0ef00e253c17f0e) --- src/gui/partywindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/gui') diff --git a/src/gui/partywindow.cpp b/src/gui/partywindow.cpp index 1260a2c3..68e5a371 100644 --- a/src/gui/partywindow.cpp +++ b/src/gui/partywindow.cpp @@ -54,8 +54,8 @@ PartyWindow::PartyWindow() : setSaveVisible(true); setCloseButton(true); setMinWidth(120); - setMinHeight(200); - setDefaultSize(590, 200, 150, 200); + setMinHeight(55); + setDefaultSize(590, 200, 150, 60); loadWindowState(); } -- cgit v1.2.3-70-g09d2 From 91bd2b5862242c88cfe999ee578febf97dc21939 Mon Sep 17 00:00:00 2001 From: Dennis Friis Date: Sun, 17 May 2009 01:37:10 +0200 Subject: Enable and fix path drawing for athena. Notice that in Being::Logic() we call Being::setPosition() with the added offset of x+16, y+32, this makes both the Vector Being::mPos and Being::mPx / Being::mPy not mean the same as pre-merge client. Thus some effects and code dividing these members with 32 to get the tile coords get wrong results. Perhaps this all these methods of getting x,y on beings should be cleaned up so we have 1 method we settle on and store the sprites' fixed x,y offset on the sprite itself. so we have x + fixed_offset + animation_offset and not all these magic numbers floating around. (cherry picked from commit fc6b38d113e7f78af1075a37e1853e00294742e9) --- src/gui/viewport.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/gui') diff --git a/src/gui/viewport.cpp b/src/gui/viewport.cpp index f92a81b8..2c3f4007 100644 --- a/src/gui/viewport.cpp +++ b/src/gui/viewport.cpp @@ -195,7 +195,7 @@ void Viewport::draw(gcn::Graphics *gcnGraphics) mMap->drawCollision(graphics, (int) mPixelViewX, (int) mPixelViewY); -#if 0 +#if EATHENA_SUPPORT drawDebugPath(graphics); #endif } @@ -265,8 +265,8 @@ void Viewport::drawDebugPath(Graphics *graphics) const Vector &playerPos = player_node->getPosition(); Path debugPath = mMap->findPath( - (int) playerPos.x / 32, - (int) playerPos.y / 32, + (int) (playerPos.x - 16) / 32, + (int) (playerPos.y - 32) / 32, mouseTileX, mouseTileY, 0xFF); drawPath(graphics, debugPath); -- cgit v1.2.3-70-g09d2 From 7b2b5dabb44ce1448f3af99fcba96eefe6d9147d Mon Sep 17 00:00:00 2001 From: Bjørn Lindeijer Date: Sun, 17 May 2009 22:43:33 +0200 Subject: Make the state variable a bit more type-safe Should be no change in behaviour. --- src/gui/serverselectdialog.cpp | 2 +- src/gui/serverselectdialog.h | 6 ++++-- src/main.cpp | 8 ++++---- src/main.h | 4 ++-- 4 files changed, 11 insertions(+), 9 deletions(-) (limited to 'src/gui') diff --git a/src/gui/serverselectdialog.cpp b/src/gui/serverselectdialog.cpp index ccdf2bb6..f492ebc7 100644 --- a/src/gui/serverselectdialog.cpp +++ b/src/gui/serverselectdialog.cpp @@ -55,7 +55,7 @@ class ServerListModel : public gcn::ListModel } }; -ServerSelectDialog::ServerSelectDialog(LoginData *loginData, int nextState): +ServerSelectDialog::ServerSelectDialog(LoginData *loginData, State nextState): Window(_("Select Server")), mLoginData(loginData), mNextState(nextState) diff --git a/src/gui/serverselectdialog.h b/src/gui/serverselectdialog.h index b80ad286..fd1484af 100644 --- a/src/gui/serverselectdialog.h +++ b/src/gui/serverselectdialog.h @@ -24,6 +24,8 @@ #include "gui/widgets/window.h" +#include "main.h" + #include #include @@ -42,7 +44,7 @@ class ServerSelectDialog : public Window, public gcn::ActionListener { * * @see Window::Window */ - ServerSelectDialog(LoginData *loginData, int nextState); + ServerSelectDialog(LoginData *loginData, State nextState); /** * Destructor. @@ -59,7 +61,7 @@ class ServerSelectDialog : public Window, public gcn::ActionListener { ServerListModel *mServerListModel; gcn::ListBox *mServerList; gcn::Button *mOkButton; - int mNextState; + State mNextState; }; #endif diff --git a/src/main.cpp b/src/main.cpp index bc010d30..fb061818 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -161,7 +161,7 @@ extern Net::Connection *accountServerConnection; Graphics *graphics; Game *game = 0; -unsigned char state = STATE_NULL; +State state = STATE_NULL; std::string errorMessage; Sound sound; @@ -975,7 +975,7 @@ int main(int argc, char *argv[]) desktop->setSize(screenWidth, screenHeight); - unsigned int oldstate = !state; // We start with a status change. + State oldstate = STATE_EXIT; // We start with a status change SDL_Event event; @@ -1429,9 +1429,9 @@ int main(int argc, char *argv[]) } else { - int nextState = STATE_UPDATE; + State nextState = STATE_UPDATE; currentDialog = new ServerSelectDialog(&loginData, - nextState); + nextState); positionDialog(currentDialog, screenWidth, screenHeight); if (options.chooseDefault) diff --git a/src/main.h b/src/main.h index a3894d13..75343944 100644 --- a/src/main.h +++ b/src/main.h @@ -78,7 +78,7 @@ /* * Client different States */ -enum { +enum State { STATE_EXIT, STATE_LOADDATA, STATE_LOGIN, @@ -136,7 +136,7 @@ const short maxSlot = 2; extern std::string token; extern char n_server, n_character; -extern unsigned char state; +extern State state; extern std::string errorMessage; #endif -- cgit v1.2.3-70-g09d2 From e7df8c9dd7ebc14c1263c19c6a238ebcf4fd9465 Mon Sep 17 00:00:00 2001 From: David Athay Date: Mon, 18 May 2009 17:19:43 +0100 Subject: Fixed compilation for tmwserv --- src/gui/connection.cpp | 2 +- src/gui/connection.h | 6 ++++-- src/gui/outfitwindow.cpp | 9 +++++++-- tmw.cbp | 16 +++++++--------- 4 files changed, 19 insertions(+), 14 deletions(-) (limited to 'src/gui') diff --git a/src/gui/connection.cpp b/src/gui/connection.cpp index 0862ee69..4863edcd 100644 --- a/src/gui/connection.cpp +++ b/src/gui/connection.cpp @@ -30,7 +30,7 @@ #include "utils/gettext.h" -ConnectionDialog::ConnectionDialog(int previousState): +ConnectionDialog::ConnectionDialog(State previousState): Window("Info"), mProgress(0), mPreviousState(previousState) { setContentSize(200, 100); diff --git a/src/gui/connection.h b/src/gui/connection.h index 62441fa9..d6059c3f 100644 --- a/src/gui/connection.h +++ b/src/gui/connection.h @@ -24,6 +24,8 @@ #include "gui/widgets/window.h" +#include "main.h" + #include class ProgressBar; @@ -41,7 +43,7 @@ class ConnectionDialog : public Window, gcn::ActionListener * * @see Window::Window */ - ConnectionDialog(int previousState); + ConnectionDialog(State previousState); /** * Called when the user presses Cancel. Restores the global state to @@ -54,7 +56,7 @@ class ConnectionDialog : public Window, gcn::ActionListener private: ProgressBar *mProgressBar; float mProgress; - int mPreviousState; + State mPreviousState; }; #endif diff --git a/src/gui/outfitwindow.cpp b/src/gui/outfitwindow.cpp index 53950299..f43e1440 100644 --- a/src/gui/outfitwindow.cpp +++ b/src/gui/outfitwindow.cpp @@ -153,9 +153,14 @@ void OutfitWindow::wearOutfit(int outfit) //non vis is 3,4,7 if (i != 3 && i != 4 && i != 7) { - if (!(item = player_node->getInventory()->getItem(player_node - ->mEquipment.get()->getEquipment(i)))) +#ifdef TMWSERV_SUPPORT + if (!(item = player_node->mEquipment.get()->getEquipment(i))) continue; +#else + if (!(item = player_node->getInventory()->getItem( + player_node->mEquipment.get()->getEquipment(i)))) + continue; +#endif Net::getInventoryHandler()->unequipItem(item); } } diff --git a/tmw.cbp b/tmw.cbp index c9ac6fb3..b1332b5f 100644 --- a/tmw.cbp +++ b/tmw.cbp @@ -218,10 +218,10 @@