import React, { useState } from "react"; import { ActionTypes } from "../data/ActionTypes"; import { createProgressBarText } from "../../../utils/helpers/createProgressBarText"; import { formatNumber, convertTimeMsToTimeElapsedString, } from "../../../utils/StringHelperFunctions"; import { IBladeburner } from "../IBladeburner"; import { IPlayer } from "../../PersonObjects/IPlayer"; import { CopyableText } from "../../ui/React/CopyableText"; interface IProps { bladeburner: IBladeburner; player: IPlayer; action: any; } export function GeneralActionElem(props: IProps): React.ReactElement { const setRerender = useState(false)[1]; const isActive = props.action.name === props.bladeburner.action.name; const computedActionTimeCurrent = Math.min( props.bladeburner.actionTimeCurrent + props.bladeburner.actionTimeOverflow, props.bladeburner.actionTimeToComplete, ); const actionTime = (function (): number { switch (props.action.name) { case "Training": case "Field Analysis": return 30; case "Diplomacy": case "Hyperbolic Regeneration Chamber": return 60; case "Recruitment": return props.bladeburner.getRecruitmentTime(props.player); } return -1; // dead code })(); const successChance = props.action.name === "Recruitment" ? Math.max( 0, Math.min( props.bladeburner.getRecruitmentSuccessChance(props.player), 1, ), ) : -1; function onStart(): void { props.bladeburner.action.type = ActionTypes[props.action.name as string]; props.bladeburner.action.name = props.action.name; props.bladeburner.startAction(props.player, props.bladeburner.action); setRerender((old) => !old); } return ( <>

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

{isActive ? (

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

) : ( <> Start )}


      

        Time Required: {convertTimeMsToTimeElapsedString(actionTime * 1000)}
        {successChance !== -1 && (
          <>
            
Estimated success chance: {formatNumber(successChance * 100, 1)}% )}
); }