Prettier
This commit is contained in:
parent
28cf51a6b6
commit
270fce7f9e
9 changed files with 385 additions and 356 deletions
1
.prettierignore
Normal file
1
.prettierignore
Normal file
|
@ -0,0 +1 @@
|
||||||
|
build/
|
20
.prettierrc
Normal file
20
.prettierrc
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"arrowParens": "always",
|
||||||
|
"bracketSpacing": true,
|
||||||
|
"cursorOffset": -1,
|
||||||
|
"endOfLine": "lf",
|
||||||
|
"htmlWhitespaceSensitivity": "css",
|
||||||
|
"insertPragma": false,
|
||||||
|
"jsxBracketSameLine": false,
|
||||||
|
"jsxSingleQuote": false,
|
||||||
|
"printWidth": 140,
|
||||||
|
"proseWrap": "preserve",
|
||||||
|
"quoteProps": "as-needed",
|
||||||
|
"requirePragma": false,
|
||||||
|
"semi": true,
|
||||||
|
"singleQuote": false,
|
||||||
|
"tabWidth": 2,
|
||||||
|
"trailingComma": "es5",
|
||||||
|
"useTabs": false,
|
||||||
|
"vueIndentScriptAndStyle": false
|
||||||
|
}
|
|
@ -1,9 +1,11 @@
|
||||||
## demo-interp
|
## demo-interp
|
||||||
|
|
||||||
An experiemental project for interpolating TF2 SourceTV demo files.
|
An experiemental project for interpolating TF2 SourceTV demo files.
|
||||||
Normally a SourceTV demo has a Packet every 4 ticks, this fills out the ticks inbetween by interpolating between the Packets.
|
Normally a SourceTV demo has a Packet every 4 ticks, this fills out the ticks inbetween by interpolating between the Packets.
|
||||||
This may be pointless but there is a visible difference when using `cl_interp` values lower than ~60ms (4 / 66 ticks/s).
|
This may be pointless but there is a visible difference when using `cl_interp` values lower than ~60ms (4 / 66 ticks/s).
|
||||||
|
|
||||||
## usage
|
## usage
|
||||||
|
|
||||||
`yarn install`
|
`yarn install`
|
||||||
`yarn build`
|
`yarn build`
|
||||||
`cd test`
|
`cd test`
|
||||||
|
|
|
@ -12,7 +12,7 @@ function lerp(start, end, amount) {
|
||||||
}
|
}
|
||||||
function circleLerp(start, end, amount) {
|
function circleLerp(start, end, amount) {
|
||||||
var shortestAngle = ((((end - start) % 360) + 540) % 360) - 180;
|
var shortestAngle = ((((end - start) % 360) + 540) % 360) - 180;
|
||||||
return start + (shortestAngle * amount) % 360;
|
return start + ((shortestAngle * amount) % 360);
|
||||||
}
|
}
|
||||||
function interpNumber(start, end, amount, lowValue, highValue) {
|
function interpNumber(start, end, amount, lowValue, highValue) {
|
||||||
if (lowValue === 0 && highValue === 360) {
|
if (lowValue === 0 && highValue === 360) {
|
||||||
|
@ -127,10 +127,7 @@ function interpEntity(start, end, amount) {
|
||||||
return start;
|
return start;
|
||||||
}
|
}
|
||||||
function incrementEntityTicks(entity, amount) {
|
function incrementEntityTicks(entity, amount) {
|
||||||
var names = [
|
var names = ["m_nTickBase", "m_flSimulationTime"];
|
||||||
"m_nTickBase",
|
|
||||||
"m_flSimulationTime"
|
|
||||||
];
|
|
||||||
for (let prop of entity.props) {
|
for (let prop of entity.props) {
|
||||||
if (names.includes(prop.definition.name)) {
|
if (names.includes(prop.definition.name)) {
|
||||||
prop.value = prop.value + amount;
|
prop.value = prop.value + amount;
|
||||||
|
@ -194,7 +191,7 @@ class InterpTransformer extends Parser_1.Parser {
|
||||||
for (let e of p.entities) {
|
for (let e of p.entities) {
|
||||||
if (p.removedEntities.includes(e.entityIndex)) {
|
if (p.removedEntities.includes(e.entityIndex)) {
|
||||||
//console.log("packet includes removed ent");
|
//console.log("packet includes removed ent");
|
||||||
delete (lastKnownProps[`${e.entityIndex}:${e.serverClass.id}`]);
|
delete lastKnownProps[`${e.entityIndex}:${e.serverClass.id}`];
|
||||||
}
|
}
|
||||||
// Store from entity
|
// Store from entity
|
||||||
for (const prop of e.props) {
|
for (const prop of e.props) {
|
||||||
|
@ -233,7 +230,7 @@ class InterpTransformer extends Parser_1.Parser {
|
||||||
for (const index of newPacket.removedEntities) {
|
for (const index of newPacket.removedEntities) {
|
||||||
for (let propIndex = Object.keys(lastKnownProps).length - 1; propIndex > 0; propIndex--) {
|
for (let propIndex = Object.keys(lastKnownProps).length - 1; propIndex > 0; propIndex--) {
|
||||||
if (Object.keys(lastKnownProps)[propIndex].startsWith(index.toString() + ":")) {
|
if (Object.keys(lastKnownProps)[propIndex].startsWith(index.toString() + ":")) {
|
||||||
delete (lastKnownProps[Object.keys(lastKnownProps)[propIndex]]);
|
delete lastKnownProps[Object.keys(lastKnownProps)[propIndex]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -318,7 +315,7 @@ class InterpTransformer extends Parser_1.Parser {
|
||||||
// 0 0.25 1.0 0.25
|
// 0 0.25 1.0 0.25
|
||||||
// 0.25 0.5 1.0 1/3
|
// 0.25 0.5 1.0 1/3
|
||||||
// 0.5 0.75 1.0 0.5
|
// 0.5 0.75 1.0 0.5
|
||||||
var interp = 0.25 * (1 / (1 - (0.25 * i)));
|
var interp = 0.25 * (1 / (1 - 0.25 * i));
|
||||||
entity = interpEntity(entity, newEntity, interp);
|
entity = interpEntity(entity, newEntity, interp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -11,6 +11,7 @@
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"postinstall": "patch-package",
|
"postinstall": "patch-package",
|
||||||
"build": "tsc"
|
"build": "tsc",
|
||||||
|
"format": "prettier --write ."
|
||||||
}
|
}
|
||||||
}
|
}
|
46
src/index.ts
46
src/index.ts
|
@ -1,10 +1,10 @@
|
||||||
import { BitStream } from 'bit-buffer';
|
import { BitStream } from "bit-buffer";
|
||||||
import { readFileSync, writeFileSync } from 'fs';
|
import { readFileSync, writeFileSync } from "fs";
|
||||||
import { DynamicBitStream } from '@demostf/demo.js/build/DynamicBitStream';
|
import { DynamicBitStream } from "@demostf/demo.js/build/DynamicBitStream";
|
||||||
import { Message, MessageType, PacketMessage } from '@demostf/demo.js/build/Data/Message';
|
import { Message, MessageType, PacketMessage } from "@demostf/demo.js/build/Data/Message";
|
||||||
import { Parser } from '@demostf/demo.js/build/Parser';
|
import { Parser } from "@demostf/demo.js/build/Parser";
|
||||||
import { Encoder } from '@demostf/demo.js/build/Encoder';
|
import { Encoder } from "@demostf/demo.js/build/Encoder";
|
||||||
import { PacketEntity } from '@demostf/demo.js/build/Data/PacketEntity';
|
import { PacketEntity } from "@demostf/demo.js/build/Data/PacketEntity";
|
||||||
|
|
||||||
function lerp(start: number, end: number, amount: number) {
|
function lerp(start: number, end: number, amount: number) {
|
||||||
return start + (end - start) * amount;
|
return start + (end - start) * amount;
|
||||||
|
@ -12,7 +12,7 @@ function lerp(start: number, end: number, amount: number) {
|
||||||
|
|
||||||
function circleLerp(start: number, end: number, amount: number) {
|
function circleLerp(start: number, end: number, amount: number) {
|
||||||
var shortestAngle = ((((end - start) % 360) + 540) % 360) - 180;
|
var shortestAngle = ((((end - start) % 360) + 540) % 360) - 180;
|
||||||
return start + (shortestAngle * amount) % 360;
|
return start + ((shortestAngle * amount) % 360);
|
||||||
}
|
}
|
||||||
|
|
||||||
function interpNumber(start: number, end: number, amount: number, lowValue: number, highValue: number) {
|
function interpNumber(start: number, end: number, amount: number, lowValue: number, highValue: number) {
|
||||||
|
@ -94,7 +94,7 @@ const propNames = [
|
||||||
];
|
];
|
||||||
|
|
||||||
const vecKeys = ["x", "y", "z"];
|
const vecKeys = ["x", "y", "z"];
|
||||||
const EF_NOINTERP = 8
|
const EF_NOINTERP = 8;
|
||||||
|
|
||||||
function interpEntity(start: PacketEntity, end: PacketEntity, amount: number): PacketEntity {
|
function interpEntity(start: PacketEntity, end: PacketEntity, amount: number): PacketEntity {
|
||||||
for (let prop1 of start.props) {
|
for (let prop1 of start.props) {
|
||||||
|
@ -105,7 +105,13 @@ function interpEntity(start: PacketEntity, end: PacketEntity, amount: number): P
|
||||||
if (prop1.definition.fullName !== prop2.definition.fullName) continue;
|
if (prop1.definition.fullName !== prop2.definition.fullName) continue;
|
||||||
|
|
||||||
if (typeof prop1.value === "number") {
|
if (typeof prop1.value === "number") {
|
||||||
prop1.value = interpNumber(prop1.value as number, prop2.value as number, amount, prop1.definition.lowValue, prop1.definition.highValue);
|
prop1.value = interpNumber(
|
||||||
|
prop1.value as number,
|
||||||
|
prop2.value as number,
|
||||||
|
amount,
|
||||||
|
prop1.definition.lowValue,
|
||||||
|
prop1.definition.highValue
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,7 +136,13 @@ function interpEntity(start: PacketEntity, end: PacketEntity, amount: number): P
|
||||||
if (cont) continue;
|
if (cont) continue;
|
||||||
|
|
||||||
for (const key of vecKeys) {
|
for (const key of vecKeys) {
|
||||||
prop1.value[key] = interpNumber(prop1.value[key] as number, prop2.value[key] as number, amount, prop1.definition.lowValue, prop1.definition.highValue);
|
prop1.value[key] = interpNumber(
|
||||||
|
prop1.value[key] as number,
|
||||||
|
prop2.value[key] as number,
|
||||||
|
amount,
|
||||||
|
prop1.definition.lowValue,
|
||||||
|
prop1.definition.highValue
|
||||||
|
);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -141,10 +153,7 @@ function interpEntity(start: PacketEntity, end: PacketEntity, amount: number): P
|
||||||
}
|
}
|
||||||
|
|
||||||
function incrementEntityTicks(entity: PacketEntity, amount: number): PacketEntity {
|
function incrementEntityTicks(entity: PacketEntity, amount: number): PacketEntity {
|
||||||
var names = [
|
var names = ["m_nTickBase", "m_flSimulationTime"];
|
||||||
"m_nTickBase",
|
|
||||||
"m_flSimulationTime"
|
|
||||||
];
|
|
||||||
for (let prop of entity.props) {
|
for (let prop of entity.props) {
|
||||||
if (names.includes(prop.definition.name)) {
|
if (names.includes(prop.definition.name)) {
|
||||||
prop.value = (prop.value as number) + amount;
|
prop.value = (prop.value as number) + amount;
|
||||||
|
@ -221,7 +230,7 @@ class InterpTransformer extends Parser {
|
||||||
for (let e of p.entities as PacketEntity[]) {
|
for (let e of p.entities as PacketEntity[]) {
|
||||||
if (p.removedEntities.includes(e.entityIndex)) {
|
if (p.removedEntities.includes(e.entityIndex)) {
|
||||||
//console.log("packet includes removed ent");
|
//console.log("packet includes removed ent");
|
||||||
delete (lastKnownProps[`${e.entityIndex}:${e.serverClass.id}`]);
|
delete lastKnownProps[`${e.entityIndex}:${e.serverClass.id}`];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store from entity
|
// Store from entity
|
||||||
|
@ -257,7 +266,6 @@ class InterpTransformer extends Parser {
|
||||||
|
|
||||||
// packetEntities
|
// packetEntities
|
||||||
for (let entity of packet.entities as PacketEntity[]) {
|
for (let entity of packet.entities as PacketEntity[]) {
|
||||||
|
|
||||||
// Loop through new message and interp
|
// Loop through new message and interp
|
||||||
for (let newPacket of message.packets) {
|
for (let newPacket of message.packets) {
|
||||||
if (newPacket.packetType !== "packetEntities") {
|
if (newPacket.packetType !== "packetEntities") {
|
||||||
|
@ -267,7 +275,7 @@ class InterpTransformer extends Parser {
|
||||||
for (const index of newPacket.removedEntities) {
|
for (const index of newPacket.removedEntities) {
|
||||||
for (let propIndex = Object.keys(lastKnownProps).length - 1; propIndex > 0; propIndex--) {
|
for (let propIndex = Object.keys(lastKnownProps).length - 1; propIndex > 0; propIndex--) {
|
||||||
if (Object.keys(lastKnownProps)[propIndex].startsWith(index.toString() + ":")) {
|
if (Object.keys(lastKnownProps)[propIndex].startsWith(index.toString() + ":")) {
|
||||||
delete (lastKnownProps[Object.keys(lastKnownProps)[propIndex]]);
|
delete lastKnownProps[Object.keys(lastKnownProps)[propIndex]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -364,7 +372,7 @@ class InterpTransformer extends Parser {
|
||||||
// 0 0.25 1.0 0.25
|
// 0 0.25 1.0 0.25
|
||||||
// 0.25 0.5 1.0 1/3
|
// 0.25 0.5 1.0 1/3
|
||||||
// 0.5 0.75 1.0 0.5
|
// 0.5 0.75 1.0 0.5
|
||||||
var interp = 0.25 * (1 / (1 - (0.25 * i)));
|
var interp = 0.25 * (1 / (1 - 0.25 * i));
|
||||||
|
|
||||||
entity = interpEntity(entity, newEntity, interp);
|
entity = interpEntity(entity, newEntity, interp);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
var interp = require('../build/index.js').interp;
|
var interp = require("../build/index.js").interp;
|
||||||
|
|
||||||
interp('test.dem', 'test_out.dem');
|
interp("test.dem", "test_out.dem");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue