bitburner-src/src/ui/React/CinematicText.tsx
2021-09-12 18:03:07 -04:00

28 lines
625 B
TypeScript

import React, { useState } from "react";
import { CinematicLine } from "./CinematicLine";
interface IProps {
lines: string[];
onDone?: () => void;
}
export function CinematicText(props: IProps): React.ReactElement {
const [i, setI] = useState(0);
function advance(): void {
const newI = i + 1;
setI(newI);
if (newI >= props.lines.length && props.onDone) props.onDone();
}
return (
<>
{props.lines.slice(0, i).map((line, i) => (
<pre key={i}>{line}</pre>
))}
{props.lines.length > i && <CinematicLine key={i} text={props.lines[i]} onDone={advance} />}
</>
);
}