Skip to content
Snippets Groups Projects
Commit 82a7c1ef authored by Lorenz Martin Diel's avatar Lorenz Martin Diel
Browse files

logic of different tabels per weapon implemented

parent 8d77c11b
Branches units2+xml
No related tags found
No related merge requests found
...@@ -93,42 +93,74 @@ namespace advanced_wars ...@@ -93,42 +93,74 @@ namespace advanced_wars
void Unit::attack(Unit &enemy) void Unit::attack(Unit &enemy)
{ {
// Zuerst die Tabel für die Waffen der angreifenden Einheit holen
// Zuerst die Tabel für die primäre Waffe der angreifenden Einheit holen
auto &attackerSecondaryWeaponTable = secWeapon[id]; auto &attackerSecondaryWeaponTable = secWeapon[id];
auto &attackerPrimaryWeaponTable = primWeapon[id];
// Schadenswert für die angreifende Einheit gegen die verteidigende Einheit berechnen // Schadenswert für die angreifende Einheit gegen die verteidigende Einheit berechnen
// Es wird die Waffe genommen die mehr Schaden macht
int attackerDamageValue = 0;
if (attackerSecondaryWeaponTable.find(enemy.id) != attackerSecondaryWeaponTable.end()) if (attackerSecondaryWeaponTable.find(enemy.id) != attackerSecondaryWeaponTable.end())
{ {
int attackerDamageValue = attackerSecondaryWeaponTable[enemy.id]; attackerDamageValue = attackerSecondaryWeaponTable[enemy.id];
// Berechne den Schaden in Abhängigkeit der Gesundheit der angreifenden Einheit }
int offDamage = attackerDamageValue * (static_cast<float>(health) / max_health); if (attackerPrimaryWeaponTable.find(enemy.id) != attackerPrimaryWeaponTable.end())
{
if (attackerDamageValue < attackerPrimaryWeaponTable[enemy.id])
{
// Here ammo deduction should happen if applicable
attackerDamageValue = attackerPrimaryWeaponTable[enemy.id];
}
}
if (attackerDamageValue == 0)
{
std::cout << "No damage value found for attack from unit " << static_cast<int>(id)
<< " against unit " << static_cast<int>(enemy.id) << std::endl;
}
else
{
// Schaden auf den Gegner anwenden int offDamage = attackerDamageValue * (static_cast<float>(health) / max_health);
enemy.health -= offDamage; enemy.health -= offDamage;
enemy.health = std::max(0, enemy.health); // Ensuring health is not negative
std::cout << "Enemy health after attack: " << enemy.health << std::endl; std::cout << "Enemy health after attack: " << enemy.health << std::endl;
// Prüfen, ob der Gegner noch am Leben ist um zurückzuschlagen // Prüfen, ob der Gegner noch am Leben ist um zurückzuschlagen
if (enemy.health > 0) if (enemy.health > 0)
{ {
// Tabelle für die primäre Waffe der verteidigenden Einheit holen // Weapon tables for the defender
auto &defenderSecondaryWeaponTable = secWeapon[enemy.id]; auto &defenderSecondaryWeaponTable = secWeapon[enemy.id];
if (defenderSecondaryWeaponTable.find(this->id) != defenderSecondaryWeaponTable.end()) auto &defenderPrimaryWeaponTable = primWeapon[enemy.id];
int defenderDamageValue = 0; // Declare outside for later use
// Determine the damage value for the defender
if (defenderSecondaryWeaponTable.find(id) != defenderSecondaryWeaponTable.end())
{
defenderDamageValue = defenderSecondaryWeaponTable[id];
}
if (defenderPrimaryWeaponTable.find(id) != defenderPrimaryWeaponTable.end())
{
if (defenderDamageValue < defenderPrimaryWeaponTable[id])
{ {
int defenderDamageValue = defenderSecondaryWeaponTable[this->id]; // Deduct ammo for primary weapon, if applicable
int defDamage = defenderDamageValue * (static_cast<float>(enemy.health) / enemy.max_health); defenderDamageValue = defenderPrimaryWeaponTable[id];
}
}
// Schaden auf die angreifende Einheit anwenden // If a valid damage value was determined for retaliation
if (defenderDamageValue > 0)
{
int defDamage = static_cast<int>(defenderDamageValue * static_cast<float>(enemy.health) / enemy.max_health);
this->health -= defDamage; this->health -= defDamage;
this->health = std::max(0, this->health); // Safeguard against negative health
std::cout << "Ally health after retaliation: " << this->health << std::endl; std::cout << "Ally health after retaliation: " << this->health << std::endl;
} }
} }
} }
else
{
std::cerr << "No damage value found for attack from unit " << static_cast<int>(id)
<< " against unit " << static_cast<int>(enemy.id) << std::endl;
}
} }
void Unit::update_position(int posX, int posY) void Unit::update_position(int posX, int posY)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment