import React, { useState } from "react"; import { formatNumber, convertTimeMsToTimeElapsedString } from "../../utils/StringHelperFunctions"; import { ActionTypes } from "../data/ActionTypes"; import { createProgressBarText } from "../../utils/helpers/createProgressBarText"; import { stealthIcon, killIcon } from "../data/Icons"; import { createPopup } from "../../ui/React/createPopup"; import { TeamSizePopup } from "./TeamSizePopup"; import { IBladeburner } from "../IBladeburner"; import { IPlayer } from "../../PersonObjects/IPlayer"; import { SuccessChance } from "./SuccessChance"; import { CopyableText } from "../../ui/React/CopyableText"; interface IProps { bladeburner: IBladeburner; player: IPlayer; action: any; } export function BlackOpElem(props: IProps): React.ReactElement { const setRerender = useState(false)[1]; const isCompleted = props.bladeburner.blackops[props.action.name] != null; if (isCompleted) { return

{props.action.name} (COMPLETED)

; } const isActive = props.bladeburner.action.type === ActionTypes["BlackOperation"] && props.action.name === props.bladeburner.action.name; const estimatedSuccessChance = props.action.getEstSuccessChance(props.bladeburner); const actionTime = props.action.getActionTime(props.bladeburner); const hasReqdRank = props.bladeburner.rank >= props.action.reqdRank; const computedActionTimeCurrent = Math.min( props.bladeburner.actionTimeCurrent + props.bladeburner.actionTimeOverflow, props.bladeburner.actionTimeToComplete, ); function onStart(): void { props.bladeburner.action.type = ActionTypes.BlackOperation; props.bladeburner.action.name = props.action.name; props.bladeburner.startAction(props.player, props.bladeburner.action); setRerender((old) => !old); } function onTeam(): void { const popupId = "bladeburner-operation-set-team-size-popup"; createPopup(popupId, TeamSizePopup, { bladeburner: props.bladeburner, action: props.action, popupId: popupId, }); } return ( <>

{isActive ? ( <> (IN PROGRESS - {formatNumber(computedActionTimeCurrent, 0)} /{" "} {formatNumber(props.bladeburner.actionTimeToComplete, 0)}) ) : ( )}

{isActive ? (

{createProgressBarText({ progress: computedActionTimeCurrent / props.bladeburner.actionTimeToComplete, })}

) : ( <> Start Set Team Size (Curr Size: {formatNumber(props.action.teamCount, 0)}) )}



Required Rank: {formatNumber(props.action.reqdRank, 0)}


        Estimated Success Chance: {" "}
        {props.action.isStealth ? stealthIcon : <>}
        {props.action.isKill ? killIcon : <>}
        
Time Required: {convertTimeMsToTimeElapsedString(actionTime * 1000)}
); }