diff --git a/package-lock.json b/package-lock.json index e84db63..c1ecce9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,7 +5,7 @@ "packages": { "": { "dependencies": { - "@demostf/edit": "0.2.0", + "@demostf/edit": "0.2.1", "@demostf/tf-demos-viewer": "^0.3.3", "@lutaok/solid-modal": "^0.1.1", "@solid-primitives/autofocus": "^0.0.111", @@ -18,9 +18,9 @@ } }, "node_modules/@demostf/edit": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@demostf/edit/-/edit-0.2.0.tgz", - "integrity": "sha512-s9wk3QVm+aTpMhIyfdGIHRm5qHp7FQ1dq/Jn0fms+lXsB1xY3wgjfWH+5gwRjjo/Dd3UMNM0o3atjO2uh+CxOQ==" + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@demostf/edit/-/edit-0.2.1.tgz", + "integrity": "sha512-0wtwe717/iyO8awK2iZV2gUopZxl/ApBq1w3h9sDfPdI+58CBUMFlIItJMuWtpis8VfiHoQRR3l1qmTe49+5vQ==" }, "node_modules/@demostf/tf-demos-viewer": { "version": "0.3.3", diff --git a/package.json b/package.json index 7aba791..87d240c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "dependencies": { - "@demostf/edit": "0.2.0", + "@demostf/edit": "0.2.1", "@demostf/tf-demos-viewer": "^0.3.3", "@lutaok/solid-modal": "^0.1.1", "@solid-primitives/autofocus": "^0.0.111", diff --git a/script/edit/EditPage.tsx b/script/edit/EditPage.tsx index 2d739bf..7bbedd5 100644 --- a/script/edit/EditPage.tsx +++ b/script/edit/EditPage.tsx @@ -1,106 +1,163 @@ -import {Duration, formatDuration} from '../components/Duration'; +import { Duration, formatDuration } from "../components/Duration"; import Element = JSX.Element; -import {Section} from "../components/Section"; +import { Section } from "../components/Section"; import MultiRangeSlider from "../components/MultiSlider"; -import {DemoHead} from "../header"; -import {createSignal} from "solid-js"; -import {downloadBuffer, edit} from "./tools"; +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, + header: DemoHead; + demoData: ArrayBuffer; + setDropText: (string) => void; + name: string; } export const Editor = (props: EditPageProps) => { - let demoInfo: any[] | Element = []; - demoInfo = ( -
- {props.header.map} - -
- ); + 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 [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(), cutFrom(), cutTo()); - (props.setDropText)(props.name); - setLoading(false); - } catch (e) { - (props.setDropText)("Error: " + e.toString()); - setLoading(false); - } + 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)} - /> -

-
-
-

- -

-
-
- ); + 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")); } - - -async function doEdit(name: string, data: ArrayBuffer, header: DemoHead, unlockPov: boolean, from: number, to: number) { - let options = { - unlock_pov: unlockPov, - 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')); -} \ No newline at end of file diff --git a/script/edit/tools.ts b/script/edit/tools.ts index c3bd28b..0ef5e88 100644 --- a/script/edit/tools.ts +++ b/script/edit/tools.ts @@ -1,5 +1,6 @@ export interface EditOptions { unlock_pov: boolean, + fix_player_count: boolean, cut?: TickRange, }