From 8a60e11684e84807f3526b37afa8cbf6f103b8fd Mon Sep 17 00:00:00 2001 From: Guillaume Melquiond Date: Sat, 3 Nov 2007 09:58:25 +0000 Subject: Fixed double load of hair graphics. --- ChangeLog | 6 ++++++ src/gui/char_select.cpp | 13 +++++-------- src/net/beinghandler.cpp | 4 ++-- src/net/charserverhandler.cpp | 4 ++-- src/player.cpp | 45 ++++++++++++++----------------------------- src/player.h | 9 ++------- 6 files changed, 31 insertions(+), 50 deletions(-) diff --git a/ChangeLog b/ChangeLog index b9aa344d..0bf5c443 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-11-03 Guillaume Melquiond + + * src/player.cpp, src/player.h, src/gui/char_select.cpp: Factored code. + * src/net/beinghandler.cpp, src/net/charserverhandler.cpp: Fixed double + load of hair graphics. + 2007-10-28 Matthias Hartmann * po/de.po: Updated german translation. diff --git a/src/gui/char_select.cpp b/src/gui/char_select.cpp index c2306880..ccdf20c8 100644 --- a/src/gui/char_select.cpp +++ b/src/gui/char_select.cpp @@ -245,8 +245,7 @@ CharCreateDialog::CharCreateDialog(Window *parent, int slot): Window(_("Create Character"), true, parent), mSlot(slot) { mPlayer = new Player(0, 0, NULL); - mPlayer->setHairStyle(rand() % NR_HAIR_STYLES); - mPlayer->setHairColor(rand() % NR_HAIR_COLORS); + mPlayer->setHairStyle(rand() % NR_HAIR_STYLES, rand() % NR_HAIR_COLORS); mNameField = new TextField(""); mNameLabel = new gcn::Label(_("Name:")); @@ -373,18 +372,16 @@ CharCreateDialog::action(const gcn::ActionEvent &event) scheduleDelete(); } else if (event.getId() == "nextcolor") { - mPlayer->setHairColor((mPlayer->getHairColor() + 1) % NR_HAIR_COLORS); + mPlayer->setHairStyle(-1, mPlayer->getHairColor() + 1); } else if (event.getId() == "prevcolor") { - int prevColor = mPlayer->getHairColor() + NR_HAIR_COLORS - 1; - mPlayer->setHairColor(prevColor % NR_HAIR_COLORS); + mPlayer->setHairStyle(-1, mPlayer->getHairColor() + NR_HAIR_COLORS - 1); } else if (event.getId() == "nextstyle") { - mPlayer->setHairStyle((mPlayer->getHairStyle() + 1) % NR_HAIR_STYLES); + mPlayer->setHairStyle(mPlayer->getHairStyle() + 1, -1); } else if (event.getId() == "prevstyle") { - int prevStyle = mPlayer->getHairStyle() + NR_HAIR_STYLES - 1; - mPlayer->setHairStyle(prevStyle % NR_HAIR_STYLES); + mPlayer->setHairStyle(mPlayer->getHairStyle() + NR_HAIR_STYLES - 1, -1); } else if (event.getId() == "statslider") { UpdateSliders(); diff --git a/src/net/beinghandler.cpp b/src/net/beinghandler.cpp index 6bd31c9f..56ec0192 100644 --- a/src/net/beinghandler.cpp +++ b/src/net/beinghandler.cpp @@ -472,8 +472,8 @@ BeingHandler::handleBeingEnterMessage(MessageIn &msg) being->setName(name); } Player *p = static_cast< Player * >(being); - p->setHairStyle(msg.readByte()); - p->setHairColor(msg.readByte()); + int hs = msg.readByte(), hc = msg.readByte(); + p->setHairStyle(hs, hc); p->setGender(msg.readByte()); handleLooks(p, msg); } break; diff --git a/src/net/charserverhandler.cpp b/src/net/charserverhandler.cpp index 1cfd815b..76311266 100644 --- a/src/net/charserverhandler.cpp +++ b/src/net/charserverhandler.cpp @@ -217,8 +217,8 @@ CharServerHandler::readPlayerData(MessageIn &msg, int &slot) slot = msg.readByte(); // character slot tempPlayer->mName = msg.readString(); tempPlayer->setGender(msg.readByte()); - tempPlayer->setHairStyle(msg.readByte()); - tempPlayer->setHairColor(msg.readByte()); + int hs = msg.readByte(), hc = msg.readByte(); + tempPlayer->setHairStyle(hs, hc); tempPlayer->setLevel(msg.readByte()); tempPlayer->setMoney(msg.readLong()); diff --git a/src/player.cpp b/src/player.cpp index 0fe6460c..062c1135 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -31,7 +31,7 @@ #include "resources/itemdb.h" #include "resources/iteminfo.h" -#include "utils/tostring.h" +#include "utils/strprintf.h" #include "gui/gui.h" @@ -103,42 +103,25 @@ void Player::setGender(int sex) } } -void Player::setHairColor(int color) +void Player::setHairStyle(int style, int color) { - if (color != mHairColor) - { - mHairColor = color < NR_HAIR_COLORS ? color : 0; - - AnimatedSprite *newHairSprite = AnimatedSprite::load( - "graphics/sprites/hairstyle" + toString(getHairStyle()) + ".xml", - mHairColor); - if (newHairSprite) - newHairSprite->setDirection(getSpriteDirection()); - - delete mSprites[HAIR_SPRITE]; - mSprites[HAIR_SPRITE] = newHairSprite; + style = style < 0 ? mHairStyle : style % NR_HAIR_STYLES; + color = color < 0 ? mHairColor : color % NR_HAIR_COLORS; + if (style == mHairStyle && color == mHairColor) return; - setAction(mAction); - } -} + mHairStyle = style; + mHairColor = color; -void Player::setHairStyle(int style) -{ - if (style != mHairStyle) - { - mHairStyle = style < NR_HAIR_STYLES ? style : 0; + AnimatedSprite *newHairSprite = AnimatedSprite::load + (strprintf("graphics/sprites/hairstyle%d.xml", style), color); - AnimatedSprite *newHairSprite = AnimatedSprite::load( - "graphics/sprites/hairstyle" + toString(getHairStyle()) + ".xml", - mHairColor); - if (newHairSprite) - newHairSprite->setDirection(getSpriteDirection()); + if (newHairSprite) + newHairSprite->setDirection(getSpriteDirection()); - delete mSprites[HAIR_SPRITE]; - mSprites[HAIR_SPRITE] = newHairSprite; + delete mSprites[HAIR_SPRITE]; + mSprites[HAIR_SPRITE] = newHairSprite; - setAction(mAction); - } + setAction(mAction); } void Player::setVisibleEquipment(int slot, int id) diff --git a/src/player.h b/src/player.h index e6d3743a..4d4f53f5 100644 --- a/src/player.h +++ b/src/player.h @@ -59,11 +59,6 @@ class Player : public Being int getHairColor() const { return mHairColor; } - /** - * Sets the hair color for this player. - */ - void setHairColor(int color); - /** * Gets the hair style for this player. */ @@ -71,9 +66,9 @@ class Player : public Being { return mHairStyle; } /** - * Sets the hair style for this player. + * Sets the hair style and color for this player. */ - void setHairStyle(int style); + void setHairStyle(int style, int color); /** * Sets visible equipments for this player. -- cgit v1.2.3-70-g09d2