bitburner-src/src/ui/React/CinematicText.tsx

38 lines
904 B
TypeScript
Raw Normal View History

2021-09-13 00:03:07 +02:00
import React, { useState } from "react";
import { CinematicLine } from "./CinematicLine";
interface IProps {
lines: string[];
2021-09-18 01:43:08 +02:00
auto?: boolean;
2021-09-13 00:03:07 +02:00
onDone?: () => void;
}
export function CinematicText(props: IProps): React.ReactElement {
const [i, setI] = useState(0);
2021-09-18 01:43:08 +02:00
const [done, setDone] = useState(false);
2021-09-13 00:03:07 +02:00
function advance(): void {
const newI = i + 1;
setI(newI);
2021-09-18 01:43:08 +02:00
if (newI >= props.lines.length) {
if (props.onDone && props.auto) props.onDone();
setDone(true);
}
2021-09-13 00:03:07 +02:00
}
return (
2021-09-18 01:43:08 +02:00
<div>
2021-09-13 00:03:07 +02:00
{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} />}
2021-09-18 01:43:08 +02:00
{!props.auto && props.onDone && done && (
<button className="std-button" onClick={props.onDone}>
Continue ...
</button>
)}
</div>
2021-09-13 00:03:07 +02:00
);
}