diff options
Diffstat (limited to 'src/player.cpp')
-rw-r--r-- | src/player.cpp | 132 |
1 files changed, 104 insertions, 28 deletions
diff --git a/src/player.cpp b/src/player.cpp index 19486d6e..09eec0d1 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -1,63 +1,127 @@ /* * The Mana World - * Copyright 2004 The Mana World Development Team + * Copyright (C) 2004 The Mana World Development Team * * This file is part of The Mana World. * - * The Mana World is free software; you can redistribute it and/or modify + * 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. * - * The Mana World is distributed in the hope that it will be useful, + * 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 The Mana World; if not, write to the Free Software + * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "player.h" - #include "animatedsprite.h" #include "game.h" -#include "graphics.h" +#ifdef TMWSERV_SUPPORT #include "guild.h" -#include "log.h" +#endif +#include "player.h" +#include "text.h" +#include "resources/colordb.h" #include "resources/itemdb.h" -#include "resources/iteminfo.h" #include "utils/strprintf.h" -#include "gui/gui.h" +static const int NAME_X_OFFSET = 15; +static const int NAME_Y_OFFSET = 30; Player::Player(int id, int job, Map *map): Being(id, job, map) { + mName = NULL; } Player::~Player() { + delete mName; } -Being::Type -Player::getType() const +void Player::setName(const std::string &name) { - return PLAYER; + if (mName == NULL) + { + if (mIsGM) + { + mNameColor = 0x009000; + mName = new FlashText("(GM) " + name, mPx + NAME_X_OFFSET, mPy + + NAME_Y_OFFSET, gcn::Graphics::CENTER, + gcn::Color(0, 255, 0)); + } + else + { + mNameColor = 0x202020; + mName = new FlashText(name, mPx + NAME_X_OFFSET, mPy + NAME_Y_OFFSET, + gcn::Graphics::CENTER, + gcn::Color(255, 255, 255)); + } + Being::setName(name); + } } -void Player::drawName(Graphics *graphics, int offsetX, int offsetY) +#ifdef EATHENA_SUPPORT +void Player::logic() { - const Vector &pos = getPosition(); - const int px = (int) pos.x + offsetX; - const int py = (int) pos.y + offsetY; + switch (mAction) + { + case STAND: + break; + + case SIT: + break; + + case DEAD: + break; + + case HURT: + break; + + case WALK: + mFrame = (get_elapsed_time(mWalkTime) * 6) / getWalkSpeed(); + + if (mFrame >= 6) + nextStep(); + + break; + + case ATTACK: + int frames = 4; + if (mEquippedWeapon && + mEquippedWeapon->getAttackType() == ACTION_ATTACK_BOW) + { + frames = 5; + } + + mFrame = (get_elapsed_time(mWalkTime) * frames) / mAttackSpeed; - graphics->setFont(speechFont); - graphics->setColor(gcn::Color(255, 255, 255)); - graphics->drawText(mName, px, py, gcn::Graphics::CENTER); + if (mFrame >= frames) + nextStep(); + + break; + } + + Being::logic(); +} +#endif + +Being::Type Player::getType() const +{ + return PLAYER; +} + +void Player::flash(int time) +{ + if (mName) + mName->flash(time); } void Player::setGender(Gender gender) @@ -76,22 +140,20 @@ void Player::setGender(Gender gender) for (int i = 1; i < VECTOREND_SPRITE; i++) { if (mSpriteIDs.at(i) != 0) - { setSprite(i, mSpriteIDs.at(i), mSpriteColors.at(i)); - } } } } void Player::setHairStyle(int style, int color) { - style = style < 0 ? mHairStyle : style % getHairStylesNr(); - color = color < 0 ? mHairColor : color % getHairColorsNr(); + style = style < 0 ? mHairStyle : style % mNumberOfHairstyles; + color = color < 0 ? mHairColor : color % ColorDB::size(); if (style == mHairStyle && color == mHairColor) return; Being::setHairStyle(style, color); - setSprite(HAIR_SPRITE, style * -1, getHairColor(color)); + setSprite(HAIR_SPRITE, style * -1, ColorDB::get(color)); setAction(mAction); } @@ -103,6 +165,11 @@ void Player::setSprite(int slot, int id, const std::string &color) { delete mSprites[slot]; mSprites[slot] = NULL; + +#ifdef EATHENA_SUPPORT + if (slot == WEAPON_SPRITE) + mEquippedWeapon = NULL; +#endif } else { @@ -113,8 +180,9 @@ void Player::setSprite(int slot, int id, const std::string &color) { if (!color.empty()) filename += "|" + color; - equipmentSprite = - AnimatedSprite::load("graphics/sprites/" + filename); + + equipmentSprite = AnimatedSprite::load("graphics/sprites/" + + filename); } if (equipmentSprite) @@ -132,6 +200,14 @@ void Player::setSprite(int slot, int id, const std::string &color) Being::setSprite(slot, id, color); } +void Player::updateCoords() +{ + if (mName) + mName->adviseXY(mPx + NAME_X_OFFSET, mPy + NAME_Y_OFFSET); +} + +#ifdef TMWSERV_SUPPORT + Guild* Player::addGuild(short guildId, short rights) { Guild *guild = new Guild(guildId, rights); @@ -181,4 +257,4 @@ void Player::setInParty(bool value) mInParty = value; } - +#endif |