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; }