import React from "react"; import { Accordion, AccordionDetails, AccordionSummary, Grid2, Paper, Table, TableBody, TableCell, TableContainer, TableRow } from "@mui/material"; import {IAddonModifier, IBuilding, IBuildingAddon, IBuildingAddonShort} from "../../types/IBuilding"; import {WeaponHardpoint} from "../../types/IUnit"; import AvTimerOutlinedIcon from "@mui/icons-material/AvTimer"; import WeaponSlot from "../WeaponSlot"; import {ExpandMore} from "@mui/icons-material"; import {IconUrl} from "../../core/api"; import {IBuildingShort} from "../../types/IBuildingShort"; import {goToAddon} from "../../pages/BuildingPage"; interface IAddonModifiersProvidesTable{ modifiers: IAddonModifier[], } function AddonModifiersProvidesTable (props: IAddonModifiersProvidesTable) { function getModName(mt: String){ switch(mt) { case 'modifiers\\armour_modifier.lua': return 'Armor'; case 'modifiers\\health_maximum_modifier.lua': return 'Health'; case 'modifiers\\keen_sight_radius_modifier.lua': return 'Detect'; case 'modifiers\\garrison_requisition_modifier.lua': return 'Requisition'; default: return mt; } } function getModIcon(mt: String){ switch(mt) { case 'modifiers\\armour_modifier.lua': return ; case 'modifiers\\health_maximum_modifier.lua': return ; case 'modifiers\\keen_sight_radius_modifier.lua': return ; case 'modifiers\\garrison_requisition_modifier.lua': return ; default: return mt; } } function getChangeDescription(ref: String) { switch(ref) { case 'type_modifierusagetype\\tp_mod_usage_addition.lua': return '+'; case 'type_modifierusagetype\\tp_mod_usage_multiplication.lua': return 'x'; case 'type_modifierusagetype\\tp_mod_usage_percentage.lua': return '%'; case 'type_modifierusagetype\\tp_mod_usage_enable.lua': return ' enable '; default: return ref; } } let noWeaponMods = props.modifiers.filter(m => !m.reference.includes("default_weapon_modifier_hardpoint")) return ( {noWeaponMods.map(m => {getModName(m.reference)} {getModIcon(m.reference)} {getChangeDescription(m.usageType)}{m.value} )}
) } interface IAddonModifiersProvidesWeapons{ modifiers: IAddonModifier[], replacedAddonModifiers: IAddonModifier[], weapons: WeaponHardpoint[] } function AddonModifiersProvidesWeapons (props: IAddonModifiersProvidesWeapons) { function getWeaponByAddonMod(ar: IAddonModifier){ let hardpoint = Number(ar.reference.replace("modifiers\\default_weapon_modifier_hardpoint", "").replace(".lua", "")); let value = ar.value; //let prevAddonWeaponMod = props.replacedAddonModifiers.find(m => m.reference && m.reference.includes("modifiers\\default_weapon_modifier_hardpoint" + hardpoint))?.value ?? 0 let weapon = props.weapons.find(w => w.hardpoint === hardpoint && w.hardpointOrder === 1 + value )?.weapon if (weapon != null){ return ; }else{ return "Can't find weapon, replaced by addon:" + value + " - " } } let weaponMods = props.modifiers.filter(m => m.reference.includes("default_weapon_modifier_hardpoint")) return (
{weaponMods.map(w => getWeaponByAddonMod(w))}
) } interface IBuildingAddonProps { addon: IBuildingAddon, building: IBuilding } function BuildingAddon(props: IBuildingAddonProps){ const addon = props.addon const building = props.building const prevAddonModifiers: IAddonModifier[] = (function() { if (addon.addonRequirement && addon.addonRequirement.requireAddon !== null && !addon.addonRequirement.replaceWhenDone){ return building.addons.find(a => a.id === addon.addonRequirement.requireAddon.id)?.addonModifiers ?? []; } else return []; })() function renderRequirementBuilding(requirementBuildings: IBuildingShort[], building: IBuilding) { return requirementBuildings.length > 0 && (
  Buildings:  {" "} {requirementBuildings[0].name} or    {" "} {requirementBuildings[1].name}
); } function renderRequirementGlobalAddons(rgas: IBuildingAddonShort[], building: IBuilding) { return
{rgas.map(rga =>   Global addon:   {rga.name} )}
} return
} aria-controls="panel1-content" > {addon.icon && }   {addon.name} Cost {addon.addonCostRequisition > 0 &&    {addon.addonCostRequisition.toFixed(0)}} {addon.addonCostPower > 0 &&    {addon.addonCostPower.toFixed(0)}} {(addon.addonCostPopulation !== undefined && addon.addonCostPopulation > 0) &&    {addon.addonCostPopulation.toFixed(0)}} {(addon.addonCostFaith !== undefined && addon.addonCostFaith > 0) &&    {addon.addonCostFaith}} {(addon.addonCostSouls !== undefined && addon.addonCostSouls > 0) &&    {addon.addonCostSouls.toFixed(0)}} {(addon.addonCostTime !== undefined && addon.addonCostTime > 0) &&    {addon.addonCostTime}s}

{addon.description}
{addon.addonModifiers !== null && } {addon.addonRequirement !== null &&

Required:

{addon.addonRequirement.requiredTotalPop !== undefined && addon.addonRequirement.requiredTotalPop !== null &&
  Population:   {addon.addonRequirement.requiredTotalPop}
} {addon.addonRequirement.requireAddon !== null &&
  Addon:   goToAddon(`#addon-` + addon.addonRequirement.requireAddon.id)}>{addon.addonRequirement.requireAddon.name} {addon.addonRequirement.replaceWhenDone && (old provides replace)}
} {addon.addonRequirement.requirementBuildings.map(b =>
  Building:   {b.name}
) } {addon.addonRequirement.requirementBuildingsEither.length !== 0 && renderRequirementBuilding(addon.addonRequirement.requirementBuildingsEither, building)} {addon.addonRequirement.requirementsGlobalAddons.length !== 0 && renderRequirementGlobalAddons(addon.addonRequirement.requirementsGlobalAddons, building)}
}
{addon.filename}
} export default BuildingAddon;