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}
-
-
-
- - Cuts the demo file to the selected tick range.
- - Cutting demos is experimental, resulting demo files might crash, have broken animations or have other issues.
- - Changing the specific cut range can sometimes work around issues with broken demos.
-
-
- {
- if (min !== cutFrom() || max !== cutTo()) {
- setCutFrom(min);
- setCutTo(max);
- }
- }}
- labelFn={(ticks) => formatDuration(ticks * intervalPerTick)}
- />
-
-
-
-
-
-
-
-
- );
+ return (
+
+ {demoInfo}
+
+
+
+ - Cuts the demo file to the selected tick range.
+ -
+ Cutting demos is experimental, resulting demo files might crash,
+ have broken animations or have other issues.
+
+ -
+ Changing the specific cut range can sometimes work around issues
+ with broken demos.
+
+
+
+ {
+ if (min !== cutFrom() || max !== cutTo()) {
+ setCutFrom(min);
+ setCutTo(max);
+ }
+ }}
+ labelFn={(ticks) => formatDuration(ticks * intervalPerTick)}
+ />
+
+
+
+
+
+
+
+
+
+ );
+};
+
+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,
}