void Being::setDirection(Uint8 direction) { if (mDirection == direction) return; #ifdef TMWSERV_SUPPORT // if the direction does not change much, keep the common component int mFaceDirection = mDirection & direction; if (!mFaceDirection) mFaceDirection = direction; mDirection = direction; SpriteDirection dir; if (mFaceDirection & UP) dir = DIRECTION_UP; else if (mFaceDirection & DOWN) dir = DIRECTION_DOWN; else if (mFaceDirection & RIGHT) dir = DIRECTION_RIGHT; else dir = DIRECTION_LEFT; mSpriteDirection = dir; #else mDirection = direction; SpriteDirection dir = getSpriteDirection(); #endif for (int i = 0; i < VECTOREND_SPRITE; i++) { if (mSprites[i]) mSprites[i]->setDirection(dir); } }
void Being::setSprite(unsigned int slot, int id, const std::string &color, bool isWeapon) { if (slot >= size()) ensureSize(slot + 1); if (slot >= mSpriteIDs.size()) mSpriteIDs.resize(slot + 1); if (slot >= mSpriteColors.size()) mSpriteColors.resize(slot + 1); // id = 0 means unequip if (id == 0) { removeSprite(slot); if (isWeapon) mEquippedWeapon = 0; } else { std::string filename = itemDb->get(id).getSprite(mGender); AnimatedSprite *equipmentSprite = 0; if (!filename.empty()) { if (!color.empty()) filename += "|" + color; equipmentSprite = AnimatedSprite::load( paths.getStringValue("sprites") + filename); } if (equipmentSprite) equipmentSprite->setDirection(getSpriteDirection()); CompoundSprite::setSprite(slot, equipmentSprite); if (isWeapon) mEquippedWeapon = &itemDb->get(id); setAction(mAction); } mSpriteIDs[slot] = id; mSpriteColors[slot] = color; }
void Player::setSprite(unsigned int slot, int id, const std::string &color) { assert(slot >= BASE_SPRITE && slot < VECTOREND_SPRITE); // id = 0 means unequip if (id == 0) { delete mSprites[slot]; mSprites[slot] = NULL; #ifdef EATHENA_SUPPORT if (slot == WEAPON_SPRITE) mEquippedWeapon = NULL; // if (slot == ) #endif } else { std::string filename = ItemDB::get(id).getSprite(mGender); AnimatedSprite *equipmentSprite = NULL; if (!filename.empty()) { if (!color.empty()) filename += "|" + color; equipmentSprite = AnimatedSprite::load("graphics/sprites/" + filename); } if (equipmentSprite) equipmentSprite->setDirection(getSpriteDirection()); delete mSprites[slot]; mSprites[slot] = equipmentSprite; if (slot == WEAPON_SPRITE) mEquippedWeapon = &ItemDB::get(id); setAction(mAction); } mSpriteIDs[slot] = id; mSpriteColors[slot] = color; }