import React from "react"; import {useTheme} from "@mui/material/styles"; import useMediaQuery from "@mui/material/useMediaQuery"; import ArmorTypeNames from "../types/ArmorTypeValues"; import { Table, TableBody, TableContainer, TableHead, TableRow } from "@mui/material"; import ArmorType from "./ArmorType"; import {IMod} from "../types/Imod"; import {IPiercing} from "../types/IPiercing"; import {IArmorType} from "../types/IArmorType"; import {StyledTableCell} from "../commons/StyledTableCell"; export default function DpsTable(props: { mod: IMod, minDamageValue?: number, minDamage?: number, maxDamage?: number, piercings: IPiercing[], targetFilter: IArmorType[], moraleDamage?: number }) { const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down('md')); function getPiercingK(armorType: string): number|null { if(props.targetFilter.length > 0 && props.targetFilter.find(tf => tf.name == armorType) === undefined) return null const piercing = props.piercings.find((p) => p.armorType.name === armorType) return (typeof piercing !== "undefined" ? piercing.piercingValue : 10) / 100 } const infLowPiercing = getPiercingK(ArmorTypeNames.InfantryLow) const infMedPiercing = getPiercingK(ArmorTypeNames.InfantryMedium) const infHighPiercing = getPiercingK(ArmorTypeNames.InfantryHigh) const infHeavyMedPiercing = getPiercingK(ArmorTypeNames.InfantryHeavyMedium) const infHeavyHighPiercing = getPiercingK(ArmorTypeNames.InfantryHeavyHigh) const demonPiercing = getPiercingK(ArmorTypeNames.DemonMedium) const demonHighPiercing = getPiercingK(ArmorTypeNames.DemonHigh) const commanderPiercing = getPiercingK(ArmorTypeNames.Commander) const airPiercing = getPiercingK(ArmorTypeNames.Air) const vehLowPiercing = getPiercingK(ArmorTypeNames.VehicleLow) const vehMedPiercing = getPiercingK(ArmorTypeNames.VehicleMedium) const vehHighPiercing = getPiercingK(ArmorTypeNames.VehicleHigh) const buildingLowPiercing = getPiercingK(ArmorTypeNames.BuildingLow) const buildingMedPiercing = getPiercingK(ArmorTypeNames.BuildingMedium) const buildingHighPiercing = getPiercingK(ArmorTypeNames.BuildingHigh) // UA mod const demonLowPiercing = getPiercingK(ArmorTypeNames.DemonLow) const buildingSuperPiercing = getPiercingK(ArmorTypeNames.BuildingSuper) const livingMetalPiercing = getPiercingK(ArmorTypeNames.LivingMetal) const titanPiercing = getPiercingK(ArmorTypeNames.Titan) const getTotalDamage = (damagePiercing: number|null) => { if(damagePiercing === null) return "" if(props.minDamageValue !== undefined && props.minDamage !== undefined && props.maxDamage !== undefined){ var minDamage = damagePiercing * props.minDamage var maxDamage = damagePiercing * props.maxDamage if(props.minDamageValue !== undefined){ if (minDamage < props.minDamageValue) { minDamage = props.minDamageValue } if (maxDamage < props.minDamageValue) { maxDamage = props.minDamageValue } } const averageDmg = (minDamage + maxDamage) / 2 return averageDmg.toFixed(2) } } const getMoraleDamage = () => { if(props.moraleDamage !== undefined) return (props.moraleDamage / 2).toFixed(2) } if (isMobile) { const items = props.mod !== undefined && props.mod.name.includes("Ultimate Apocalypse") ? [ { label: , value: () => getTotalDamage(infLowPiercing) }, { label: , value: () => getTotalDamage(infMedPiercing) }, { label: , value: () => getTotalDamage(infHighPiercing) }, { label: , value: () => getTotalDamage(infHeavyMedPiercing) }, { label: , value: () => getTotalDamage(infHeavyHighPiercing) }, { label: , value: () => getTotalDamage(commanderPiercing) }, { label: , value: () => getTotalDamage(demonLowPiercing) }, { label: , value: () => getTotalDamage(demonPiercing) }, { label: , value: () => getTotalDamage(demonHighPiercing) }, { label: , value: () => getTotalDamage(airPiercing) }, { label: , value: () => getTotalDamage(vehLowPiercing) }, { label: , value: () => getTotalDamage(vehMedPiercing) }, { label: , value: () => getTotalDamage(vehHighPiercing) }, { label: , value: () => getTotalDamage(livingMetalPiercing) }, { label: , value: () => getTotalDamage(titanPiercing) }, { label: , value: () => getTotalDamage(buildingLowPiercing) }, { label: , value: () => getTotalDamage(buildingMedPiercing) }, { label: , value: () => getTotalDamage(buildingHighPiercing) }, { label: , value: () => getTotalDamage(buildingSuperPiercing) }, { label: , value: () => getMoraleDamage() }, ] : [ { label: , value: () => getTotalDamage(infLowPiercing) }, { label: , value: () => getTotalDamage(infMedPiercing) }, { label: , value: () => getTotalDamage(infHighPiercing) }, { label: , value: () => getTotalDamage(infHeavyMedPiercing) }, { label: , value: () => getTotalDamage(infHeavyHighPiercing) }, { label: , value: () => getTotalDamage(commanderPiercing) }, { label: , value: () => getTotalDamage(demonPiercing) }, { label: , value: () => getTotalDamage(demonHighPiercing) }, { label: , value: () => getTotalDamage(airPiercing) }, { label: , value: () => getTotalDamage(vehLowPiercing) }, { label: , value: () => getTotalDamage(vehMedPiercing) }, { label: , value: () => getTotalDamage(vehHighPiercing) }, { label: , value: () => getTotalDamage(buildingLowPiercing) }, { label: , value: () => getTotalDamage(buildingMedPiercing) }, { label: , value: () => getTotalDamage(buildingHighPiercing) }, { label: , value: () => getMoraleDamage() }, ]; const chunks = []; for (let i = 0; i < items.length; i += 5) { chunks.push(items.slice(i, i + 5)); } return (<>{chunks.map((chunk, chunkIndex) => ( {chunk.map((item, i) => ( {item.label} ))} {chunk.map((item, i) => ( {item.value()} ))}
))}) } return ( { props.mod !== undefined && props.mod.name.includes("Ultimate Apocalypse") ? {getTotalDamage(infLowPiercing)} {getTotalDamage(infMedPiercing)} {getTotalDamage(infHighPiercing)} {getTotalDamage(infHeavyMedPiercing)} {getTotalDamage(infHeavyHighPiercing)} {getTotalDamage(commanderPiercing)} {getTotalDamage(demonLowPiercing)} {getTotalDamage(demonPiercing)} {getTotalDamage(demonHighPiercing)} {getTotalDamage(airPiercing)} {getTotalDamage(vehLowPiercing)} {getTotalDamage(vehMedPiercing)} {getTotalDamage(vehHighPiercing)} {getTotalDamage(livingMetalPiercing)} {getTotalDamage(titanPiercing)} {getTotalDamage(buildingLowPiercing)} {getTotalDamage(buildingMedPiercing)} {getTotalDamage(buildingHighPiercing)} {getTotalDamage(buildingSuperPiercing)} {getMoraleDamage()}
: {getTotalDamage(infLowPiercing)} {getTotalDamage(infMedPiercing)} {getTotalDamage(infHighPiercing)} {getTotalDamage(infHeavyMedPiercing)} {getTotalDamage(infHeavyHighPiercing)} {getTotalDamage(commanderPiercing)} {getTotalDamage(demonPiercing)} {getTotalDamage(demonHighPiercing)} {getTotalDamage(airPiercing)} {getTotalDamage(vehLowPiercing)} {getTotalDamage(vehMedPiercing)} {getTotalDamage(vehHighPiercing)} {getTotalDamage(buildingLowPiercing)} {getTotalDamage(buildingMedPiercing)} {getTotalDamage(buildingHighPiercing)} {getMoraleDamage()}
}
) }