Add object shredder to damage table

This commit is contained in:
Kalle
2022-10-23 22:36:04 +03:00
parent c918aafb9d
commit 6f1a4935a9
2 changed files with 36 additions and 19 deletions

View File

@@ -96,6 +96,7 @@ export function multipliersToRecordWithFallbacks(
) as Record<DamageReceiver, number>;
}
const objectShredderMultipliers = objectDamages.ObjectEffect_Up.rates;
export function calculateDamage({
analyzed,
mainWeaponId,
@@ -140,21 +141,34 @@ export function calculateDamage({
return {
receiver,
hitPoints: damageReceiverHp,
damages: filteredDamages.map((damage) => {
const multiplier = multipliers[damage.type]![receiver];
const damagePerHit = roundToNDecimalPlaces(damage.value * multiplier);
damages: filteredDamages
.flatMap((damage) => [
{ ...damage, objectShredder: false },
{ ...damage, objectShredder: true },
])
.map((damage) => {
const baseMultiplier = multipliers[damage.type]![receiver];
const objectShredderMultiplier =
objectShredderMultipliers.find((m) => m.target === receiver)
?.rate ?? 1;
const multiplier =
baseMultiplier *
(damage.objectShredder ? objectShredderMultiplier : 1);
const hitsToDestroy = Math.ceil(damageReceiverHp / damagePerHit);
const damagePerHit = roundToNDecimalPlaces(damage.value * multiplier);
return {
value: damagePerHit,
hitsToDestroy,
multiplier,
type: damage.type,
id: damage.id,
distance: damage.distance,
};
}),
const hitsToDestroy = Math.ceil(damageReceiverHp / damagePerHit);
return {
value: damagePerHit,
hitsToDestroy,
multiplier: roundToNDecimalPlaces(multiplier, 2),
type: damage.type,
id: `${damage.id}-${String(damage.objectShredder)}`,
distance: damage.distance,
objectShredder: damage.objectShredder,
};
}),
};
});
}

View File

@@ -184,12 +184,15 @@ function DamageReceiversGrid({
<div />
{damagesToReceivers[0]?.damages.map((damage) => (
<div key={damage.id} className="object-damage__table-header">
{t(
damageTypeTranslationString({
damageType: damage.type,
subWeaponId: subWeaponId,
})
)}
<div className="stack horizontal sm justify-center items-center">
{t(
damageTypeTranslationString({
damageType: damage.type,
subWeaponId: subWeaponId,
})
)}
{damage.objectShredder && <Ability ability="OS" size="TINY" />}
</div>
<div
className={clsx("object-damage__distance", {
invisible: !damage.distance,