Пример #1
0
void CharacterCore::addModifier(const SpellModifier& modifier, int slotNr, int modifierNr) {
	Weapon* wep = dynamic_cast<Weapon*>(m_equippedItems.at(ItemType::Equipment_weapon));
	if (wep == nullptr) return;
	if (wep->addModifier(slotNr, modifierNr, modifier, true)) {
		// check if this spell slot exists. If not, fill the slots
		if (m_data.equippedWeaponSlots.size() < slotNr + 1) {
			for (size_t i = m_data.equippedWeaponSlots.size(); i < slotNr + 1; ++i) {
				std::pair<SpellID, std::vector<SpellModifier>> newSlot;
				newSlot.first = SpellID::VOID;
				m_data.equippedWeaponSlots.push_back(newSlot);
			}
		}
		std::pair<SpellID, std::vector<SpellModifier>>& slot = m_data.equippedWeaponSlots.at(slotNr);
		// check if this modifier slot exist
		if (slot.second.size() < modifierNr + 1) {
			g_logger->logInfo("CharacterCore", "Adding empty modifier slots slots to the weapon!");
			for (size_t i = slot.second.size(); i < modifierNr + 1; ++i) {
				slot.second.push_back(EMPTY_SPELLMODIFIER);
			}
		}
		for (auto& it : slot.second) {
			if (it.type == modifier.type) {
				it.type = SpellModifierType::VOID;;
			}
		}

		// add the modifier
		slot.second[modifierNr] = modifier;
	}
	reloadWeaponSlots();
}
Пример #2
0
void CharacterCore::loadEquipmentItems()
{
	clearEquippedItems();

	Weapon* eqWeapon = nullptr;
	Item* eqBack = nullptr;
	Item* eqBody = nullptr;
	Item* eqHead = nullptr;
	Item* eqNeck = nullptr;
	Item* eqRing1 = nullptr;
	Item* eqRing2 = nullptr;
	if (!m_data.equippedWeapon.empty() && g_resourceManager->getItemBean(m_data.equippedWeapon) != nullptr)
	{
		eqWeapon = new Weapon(*g_resourceManager->getItemBean(m_data.equippedWeapon));
		// add equipped spells and their modifiers
		for (int slot = 0; slot < m_data.equippedWeaponSlots.size(); slot++)
		{
			eqWeapon->addSpell(slot, m_data.equippedWeaponSlots[slot].first, false);
			for (auto& it : m_data.equippedWeaponSlots[slot].second)
			{
				eqWeapon->addModifier(slot, it, false);
			}
		}
	}
	if (!m_data.equippedBack.empty() && g_resourceManager->getItemBean(m_data.equippedBack) != nullptr)
	{
		eqBack = new Item(*g_resourceManager->getItemBean(m_data.equippedBack));
	}
	if (!m_data.equippedBody.empty() && g_resourceManager->getItemBean(m_data.equippedBody) != nullptr)
	{
		eqBody = new Item(*g_resourceManager->getItemBean(m_data.equippedBody));
	}
	if (!m_data.equippedHead.empty() && g_resourceManager->getItemBean(m_data.equippedHead) != nullptr)
	{
		eqHead = new Item(*g_resourceManager->getItemBean(m_data.equippedHead));
	}
	if (!m_data.equippedNeck.empty() && g_resourceManager->getItemBean(m_data.equippedNeck) != nullptr)
	{
		eqNeck = new Item(*g_resourceManager->getItemBean(m_data.equippedNeck));
	}
	if (!m_data.equippedRing1.empty() && g_resourceManager->getItemBean(m_data.equippedRing1) != nullptr)
	{
		eqRing1 = new Item(*g_resourceManager->getItemBean(m_data.equippedRing1));
	}
	if (!m_data.equippedRing2.empty() && g_resourceManager->getItemBean(m_data.equippedRing2) != nullptr)
	{
		eqRing2 = new Item(*g_resourceManager->getItemBean(m_data.equippedRing2));
	}
	
	m_equippedItems.insert({ ItemType::Equipment_weapon, eqWeapon });
	m_equippedItems.insert({ ItemType::Equipment_back, eqBack });
	m_equippedItems.insert({ ItemType::Equipment_body, eqBody });
	m_equippedItems.insert({ ItemType::Equipment_head, eqHead });
	m_equippedItems.insert({ ItemType::Equipment_neck, eqNeck });
	m_equippedItems.insert({ ItemType::Equipment_ring_1, eqRing1 });
	m_equippedItems.insert({ ItemType::Equipment_ring_2, eqRing2 });
}
Пример #3
0
void CharacterCore::reloadWeaponSlots() {
	Weapon* wep = dynamic_cast<Weapon*>(m_equippedItems.at(ItemType::Equipment_weapon));
	if (wep == nullptr) return;
	wep->reload();
	for (int slot = 0; slot < m_data.equippedWeaponSlots.size(); slot++) {
		wep->addSpell(slot, m_data.equippedWeaponSlots[slot].first, false);
		for (int i = 0; i < m_data.equippedWeaponSlots[slot].second.size(); ++i) {
			wep->addModifier(slot, i, m_data.equippedWeaponSlots[slot].second[i], false);
		}
	}
}
Пример #4
0
void CharacterCore::addModifier(const SpellModifier& modifier, int slotNr)
{
	Weapon* wep = dynamic_cast<Weapon*>(m_equippedItems.at(ItemType::Equipment_weapon));
	if (wep == nullptr) return;
	if (wep->addModifier(slotNr, modifier, true))
	{
		std::pair<SpellID, std::vector<SpellModifier>>& slot = m_data.equippedWeaponSlots.at(slotNr);
		// check if this type already exists. if yes, remove it.
		for (auto& it = slot.second.begin(); it != slot.second.end(); /* don't increment here */)
		{
			if (it->type == modifier.type)
			{
				it = slot.second.erase(it);
			}
			else ++it;
		}
		
		slot.second.push_back(modifier);
	}
	reloadWeaponSlots();
}