import { Duration, formatDuration } from "../components/Duration"; import Element = JSX.Element; import { Section } from "../components/Section"; import MultiRangeSlider from "../components/MultiSlider"; import { DemoHead } from "../header"; import { createSignal } from "solid-js"; import { downloadBuffer, edit } from "./tools"; export interface EditPageProps { header: DemoHead; demoData: ArrayBuffer; setDropText: (string) => void; name: string; } export const Editor = (props: EditPageProps) => { let demoInfo: any[] | Element = []; demoInfo = (
{props.header.map}
); const [loading, setLoading] = createSignal(false); const [cutFrom, setCutFrom] = createSignal(0); const [cutTo, setCutTo] = createSignal(props.header.ticks); const intervalPerTick = props.header.duration / props.header.ticks; const [unlockPov, setUnlockPov] = createSignal(false); const [fixPlayerCount, setFixPlayerCount] = createSignal(true); const editCb = async () => { try { setLoading(true); props.setDropText("Editing..."); await doEdit( props.name, props.demoData, props.header, unlockPov(), fixPlayerCount(), cutFrom(), cutTo(), ); props.setDropText(props.name); setLoading(false); } catch (e) { props.setDropText("Error: " + e.toString()); setLoading(false); } }; return (
{demoInfo}

{ setUnlockPov(!unlockPov()); }} />

{ if (min !== cutFrom() || max !== cutTo()) { setCutFrom(min); setCutTo(max); } }} labelFn={(ticks) => formatDuration(ticks * intervalPerTick)} />

{ setFixPlayerCount(!fixPlayerCount()); }} />

); }; async function doEdit( name: string, data: ArrayBuffer, header: DemoHead, unlockPov: boolean, fixPlayerCount: boolean, from: number, to: number, ) { let options = { unlock_pov: unlockPov, fix_player_count: fixPlayerCount, cut: from > 0 || to < header.ticks ? { from, to } : undefined, }; console.log(options); const edited = await edit(data, options); downloadBuffer(edited, name.replace(".dem", "_edited.dem")); }