| 108 | } |
| 109 | |
| 110 | TileDamageParameters TileDamageParameters::sum(TileDamageParameters const& other) const { |
| 111 | TileDamageParameters result; |
| 112 | |
| 113 | result.m_damageRecoveryPerSecond = m_damageRecoveryPerSecond + other.m_damageRecoveryPerSecond; |
| 114 | result.m_totalHealth = m_totalHealth + other.m_totalHealth; |
| 115 | |
| 116 | result.m_requiredHarvestLevel = max(m_requiredHarvestLevel, other.m_requiredHarvestLevel); |
| 117 | result.m_maximumEffectTime = max(m_maximumEffectTime, other.m_maximumEffectTime); |
| 118 | |
| 119 | for (auto key : m_damages.keys()) { |
| 120 | if (other.m_damages.contains(key)) |
| 121 | result.m_damages[key] = result.m_totalHealth / ((m_totalHealth / m_damages.value(key, 0)) + (other.m_totalHealth / other.m_damages.value(key, 0))); |
| 122 | else |
| 123 | result.m_damages[key] = m_damages.value(key, 0); |
| 124 | } |
| 125 | |
| 126 | for (auto key : m_damages.keys()) { |
| 127 | if (m_damages.contains(key)) |
| 128 | result.m_damages[key] = result.m_totalHealth / ((m_totalHealth / m_damages.value(key, 0)) + (other.m_totalHealth / other.m_damages.value(key, 0))); |
| 129 | else |
| 130 | result.m_damages[key] = other.m_damages.value(key, 0); |
| 131 | } |
| 132 | |
| 133 | return result; |
| 134 | } |
| 135 | |
| 136 | Json TileDamageParameters::toJson() const { |
| 137 | return JsonObject{ |
no test coverage detected