quake2ts 0.0.427 → 0.0.430
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/packages/cgame/dist/index.cjs +1 -1
- package/packages/cgame/dist/index.cjs.map +1 -1
- package/packages/cgame/dist/index.js +1 -1
- package/packages/cgame/dist/index.js.map +1 -1
- package/packages/client/dist/browser/index.global.js +12 -12
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/cjs/index.cjs +133 -2
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js +133 -2
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/browser/index.global.js +9 -9
- package/packages/engine/dist/browser/index.global.js.map +1 -1
- package/packages/engine/dist/cjs/index.cjs +162 -2
- package/packages/engine/dist/cjs/index.cjs.map +1 -1
- package/packages/engine/dist/esm/index.js +159 -2
- package/packages/engine/dist/esm/index.js.map +1 -1
- package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/types/commands.d.ts +7 -0
- package/packages/engine/dist/types/commands.d.ts.map +1 -1
- package/packages/engine/dist/types/demo/analyzer.d.ts +6 -1
- package/packages/engine/dist/types/demo/analyzer.d.ts.map +1 -1
- package/packages/engine/dist/types/demo/camera.d.ts +17 -0
- package/packages/engine/dist/types/demo/camera.d.ts.map +1 -0
- package/packages/engine/dist/types/demo/playback.d.ts +13 -1
- package/packages/engine/dist/types/demo/playback.d.ts.map +1 -1
- package/packages/engine/dist/types/host.d.ts.map +1 -1
- package/packages/engine/dist/types/index.d.ts +5 -0
- package/packages/engine/dist/types/index.d.ts.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
|
@@ -46,6 +46,9 @@ __export(index_exports, {
|
|
|
46
46
|
ConfigStringRegistry: () => ConfigStringRegistry,
|
|
47
47
|
Cvar: () => Cvar,
|
|
48
48
|
CvarRegistry: () => CvarRegistry,
|
|
49
|
+
DemoAnalyzer: () => DemoAnalyzer,
|
|
50
|
+
DemoCameraMode: () => DemoCameraMode,
|
|
51
|
+
DemoEventType: () => DemoEventType,
|
|
49
52
|
DemoPlaybackController: () => DemoPlaybackController,
|
|
50
53
|
DemoReader: () => DemoReader,
|
|
51
54
|
DemoRecorder: () => DemoRecorder,
|
|
@@ -291,6 +294,9 @@ var Command = class {
|
|
|
291
294
|
var CommandRegistry = class {
|
|
292
295
|
constructor() {
|
|
293
296
|
this.commands = /* @__PURE__ */ new Map();
|
|
297
|
+
this.history = [];
|
|
298
|
+
this.historyLimit = 64;
|
|
299
|
+
this.autocompleteProviders = [];
|
|
294
300
|
}
|
|
295
301
|
register(name, callback, description) {
|
|
296
302
|
const command = new Command(name, callback, description);
|
|
@@ -300,10 +306,23 @@ var CommandRegistry = class {
|
|
|
300
306
|
registerCommand(name, callback) {
|
|
301
307
|
this.register(name, callback);
|
|
302
308
|
}
|
|
309
|
+
registerAutocompleteProvider(provider) {
|
|
310
|
+
this.autocompleteProviders.push(provider);
|
|
311
|
+
}
|
|
303
312
|
get(name) {
|
|
304
313
|
return this.commands.get(name);
|
|
305
314
|
}
|
|
306
315
|
execute(commandString) {
|
|
316
|
+
const trimmed = commandString.trim();
|
|
317
|
+
if (trimmed.length === 0) {
|
|
318
|
+
return false;
|
|
319
|
+
}
|
|
320
|
+
if (this.history.length === 0 || this.history[this.history.length - 1] !== trimmed) {
|
|
321
|
+
this.history.push(trimmed);
|
|
322
|
+
if (this.history.length > this.historyLimit) {
|
|
323
|
+
this.history.shift();
|
|
324
|
+
}
|
|
325
|
+
}
|
|
307
326
|
const parts = this.tokenize(commandString);
|
|
308
327
|
if (parts.length === 0) {
|
|
309
328
|
return false;
|
|
@@ -321,6 +340,26 @@ var CommandRegistry = class {
|
|
|
321
340
|
executeCommand(cmd) {
|
|
322
341
|
this.execute(cmd);
|
|
323
342
|
}
|
|
343
|
+
getHistory() {
|
|
344
|
+
return [...this.history];
|
|
345
|
+
}
|
|
346
|
+
getSuggestions(prefix) {
|
|
347
|
+
const suggestions = /* @__PURE__ */ new Set();
|
|
348
|
+
for (const name of this.commands.keys()) {
|
|
349
|
+
if (name.startsWith(prefix)) {
|
|
350
|
+
suggestions.add(name);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
for (const provider of this.autocompleteProviders) {
|
|
354
|
+
const providerSuggestions = provider();
|
|
355
|
+
for (const suggestion of providerSuggestions) {
|
|
356
|
+
if (suggestion.startsWith(prefix)) {
|
|
357
|
+
suggestions.add(suggestion);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
return Array.from(suggestions).sort();
|
|
362
|
+
}
|
|
324
363
|
tokenize(text) {
|
|
325
364
|
const args = [];
|
|
326
365
|
let currentArg = "";
|
|
@@ -1618,6 +1657,9 @@ var EngineHost = class {
|
|
|
1618
1657
|
},
|
|
1619
1658
|
{ ...options.loop, startTimeMs: this.startTimeMs }
|
|
1620
1659
|
);
|
|
1660
|
+
this.commands.registerAutocompleteProvider(() => {
|
|
1661
|
+
return this.cvars.list().map((cvar) => cvar.name);
|
|
1662
|
+
});
|
|
1621
1663
|
}
|
|
1622
1664
|
start() {
|
|
1623
1665
|
if (this.started) return;
|
|
@@ -12825,6 +12867,18 @@ var NetworkMessageParser = class _NetworkMessageParser {
|
|
|
12825
12867
|
}
|
|
12826
12868
|
};
|
|
12827
12869
|
|
|
12870
|
+
// src/demo/analysis.ts
|
|
12871
|
+
var DemoEventType = /* @__PURE__ */ ((DemoEventType2) => {
|
|
12872
|
+
DemoEventType2[DemoEventType2["WeaponFire"] = 0] = "WeaponFire";
|
|
12873
|
+
DemoEventType2[DemoEventType2["DamageDealt"] = 1] = "DamageDealt";
|
|
12874
|
+
DemoEventType2[DemoEventType2["DamageReceived"] = 2] = "DamageReceived";
|
|
12875
|
+
DemoEventType2[DemoEventType2["Pickup"] = 3] = "Pickup";
|
|
12876
|
+
DemoEventType2[DemoEventType2["Death"] = 4] = "Death";
|
|
12877
|
+
DemoEventType2[DemoEventType2["Spawn"] = 5] = "Spawn";
|
|
12878
|
+
DemoEventType2[DemoEventType2["PlayerInfo"] = 6] = "PlayerInfo";
|
|
12879
|
+
return DemoEventType2;
|
|
12880
|
+
})(DemoEventType || {});
|
|
12881
|
+
|
|
12828
12882
|
// src/demo/analyzer.ts
|
|
12829
12883
|
var DemoAnalyzer = class {
|
|
12830
12884
|
constructor(buffer) {
|
|
@@ -12843,6 +12897,8 @@ var DemoAnalyzer = class {
|
|
|
12843
12897
|
this.playerStats = /* @__PURE__ */ new Map();
|
|
12844
12898
|
// By playerNum
|
|
12845
12899
|
this.weaponStats = /* @__PURE__ */ new Map();
|
|
12900
|
+
// By entity ID
|
|
12901
|
+
this.activeEntities = /* @__PURE__ */ new Set();
|
|
12846
12902
|
this.buffer = buffer;
|
|
12847
12903
|
}
|
|
12848
12904
|
analyze() {
|
|
@@ -12878,9 +12934,28 @@ var DemoAnalyzer = class {
|
|
|
12878
12934
|
onSpawnBaseline: (entity) => {
|
|
12879
12935
|
},
|
|
12880
12936
|
onFrame: (frame) => {
|
|
12937
|
+
const currentFrameEntities = /* @__PURE__ */ new Set();
|
|
12938
|
+
if (frame.packetEntities && frame.packetEntities.entities) {
|
|
12939
|
+
for (const ent of frame.packetEntities.entities) {
|
|
12940
|
+
currentFrameEntities.add(ent.number);
|
|
12941
|
+
if (!this.activeEntities.has(ent.number)) {
|
|
12942
|
+
this.recordEvent({
|
|
12943
|
+
type: 5 /* Spawn */,
|
|
12944
|
+
frame: currentFrameIndex,
|
|
12945
|
+
time: currentTime,
|
|
12946
|
+
entityId: ent.number,
|
|
12947
|
+
position: { x: ent.origin.x, y: ent.origin.y, z: ent.origin.z },
|
|
12948
|
+
description: `Entity ${ent.number} spawned`
|
|
12949
|
+
});
|
|
12950
|
+
}
|
|
12951
|
+
}
|
|
12952
|
+
}
|
|
12953
|
+
this.activeEntities = currentFrameEntities;
|
|
12954
|
+
if (frame.playerState && this.header) {
|
|
12955
|
+
}
|
|
12881
12956
|
},
|
|
12882
12957
|
onPrint: (level, msg) => {
|
|
12883
|
-
if (msg.includes("died") || msg.includes("killed")) {
|
|
12958
|
+
if (msg.includes("died") || msg.includes("killed") || msg.includes("suicide")) {
|
|
12884
12959
|
this.summary.totalDeaths++;
|
|
12885
12960
|
this.recordEvent({
|
|
12886
12961
|
type: 4 /* Death */,
|
|
@@ -12889,6 +12964,14 @@ var DemoAnalyzer = class {
|
|
|
12889
12964
|
description: msg.trim()
|
|
12890
12965
|
});
|
|
12891
12966
|
}
|
|
12967
|
+
if (msg.startsWith("You got the ")) {
|
|
12968
|
+
this.recordEvent({
|
|
12969
|
+
type: 3 /* Pickup */,
|
|
12970
|
+
frame: currentFrameIndex,
|
|
12971
|
+
time: currentTime,
|
|
12972
|
+
description: msg.trim()
|
|
12973
|
+
});
|
|
12974
|
+
}
|
|
12892
12975
|
},
|
|
12893
12976
|
onCenterPrint: () => {
|
|
12894
12977
|
},
|
|
@@ -12929,6 +13012,10 @@ var DemoAnalyzer = class {
|
|
|
12929
13012
|
description: `Took ${ind.damage} damage`
|
|
12930
13013
|
});
|
|
12931
13014
|
this.summary.damageReceived += ind.damage;
|
|
13015
|
+
if (this.header) {
|
|
13016
|
+
const pStats = this.getOrCreatePlayerStats(this.header.playerNum);
|
|
13017
|
+
pStats.damageReceived += ind.damage;
|
|
13018
|
+
}
|
|
12932
13019
|
}
|
|
12933
13020
|
}
|
|
12934
13021
|
};
|
|
@@ -12956,7 +13043,9 @@ var DemoAnalyzer = class {
|
|
|
12956
13043
|
header: this.header,
|
|
12957
13044
|
configStrings: this.configStrings,
|
|
12958
13045
|
serverInfo: this.serverInfo,
|
|
12959
|
-
statistics: this.statistics
|
|
13046
|
+
statistics: this.statistics,
|
|
13047
|
+
playerStats: this.playerStats,
|
|
13048
|
+
weaponStats: this.weaponStats
|
|
12960
13049
|
};
|
|
12961
13050
|
}
|
|
12962
13051
|
handleWeaponFire(ent, weapon, frame, time) {
|
|
@@ -12970,6 +13059,8 @@ var DemoAnalyzer = class {
|
|
|
12970
13059
|
});
|
|
12971
13060
|
const count = this.summary.weaponUsage.get(weapon) || 0;
|
|
12972
13061
|
this.summary.weaponUsage.set(weapon, count + 1);
|
|
13062
|
+
const wStats = this.getOrCreateWeaponStat(ent, weapon);
|
|
13063
|
+
wStats.shotsFired++;
|
|
12973
13064
|
}
|
|
12974
13065
|
recordEvent(event) {
|
|
12975
13066
|
this.events.push(event);
|
|
@@ -12982,8 +13073,44 @@ var DemoAnalyzer = class {
|
|
|
12982
13073
|
}
|
|
12983
13074
|
}
|
|
12984
13075
|
}
|
|
13076
|
+
getOrCreatePlayerStats(playerNum) {
|
|
13077
|
+
let stats = this.playerStats.get(playerNum);
|
|
13078
|
+
if (!stats) {
|
|
13079
|
+
stats = {
|
|
13080
|
+
kills: 0,
|
|
13081
|
+
deaths: 0,
|
|
13082
|
+
damageDealt: 0,
|
|
13083
|
+
damageReceived: 0,
|
|
13084
|
+
suicides: 0
|
|
13085
|
+
};
|
|
13086
|
+
this.playerStats.set(playerNum, stats);
|
|
13087
|
+
}
|
|
13088
|
+
return stats;
|
|
13089
|
+
}
|
|
13090
|
+
getOrCreateWeaponStat(entityId, weaponId) {
|
|
13091
|
+
let statsList = this.weaponStats.get(entityId);
|
|
13092
|
+
if (!statsList) {
|
|
13093
|
+
statsList = [];
|
|
13094
|
+
this.weaponStats.set(entityId, statsList);
|
|
13095
|
+
}
|
|
13096
|
+
let stat = statsList.find((s) => s.weaponId === weaponId);
|
|
13097
|
+
if (!stat) {
|
|
13098
|
+
stat = { weaponId, shotsFired: 0, hits: 0, kills: 0 };
|
|
13099
|
+
statsList.push(stat);
|
|
13100
|
+
}
|
|
13101
|
+
return stat;
|
|
13102
|
+
}
|
|
12985
13103
|
};
|
|
12986
13104
|
|
|
13105
|
+
// src/demo/camera.ts
|
|
13106
|
+
var DemoCameraMode = /* @__PURE__ */ ((DemoCameraMode2) => {
|
|
13107
|
+
DemoCameraMode2[DemoCameraMode2["FirstPerson"] = 0] = "FirstPerson";
|
|
13108
|
+
DemoCameraMode2[DemoCameraMode2["ThirdPerson"] = 1] = "ThirdPerson";
|
|
13109
|
+
DemoCameraMode2[DemoCameraMode2["Free"] = 2] = "Free";
|
|
13110
|
+
DemoCameraMode2[DemoCameraMode2["Follow"] = 3] = "Follow";
|
|
13111
|
+
return DemoCameraMode2;
|
|
13112
|
+
})(DemoCameraMode || {});
|
|
13113
|
+
|
|
12987
13114
|
// src/demo/playback.ts
|
|
12988
13115
|
var PlaybackState = /* @__PURE__ */ ((PlaybackState2) => {
|
|
12989
13116
|
PlaybackState2[PlaybackState2["Stopped"] = 0] = "Stopped";
|
|
@@ -13019,6 +13146,12 @@ var DemoPlaybackController = class {
|
|
|
13019
13146
|
this.cachedConfigStrings = null;
|
|
13020
13147
|
this.cachedServerInfo = null;
|
|
13021
13148
|
this.cachedStatistics = null;
|
|
13149
|
+
this.cachedPlayerStats = null;
|
|
13150
|
+
this.cachedWeaponStats = null;
|
|
13151
|
+
// Camera State
|
|
13152
|
+
this.cameraMode = 0 /* FirstPerson */;
|
|
13153
|
+
this.thirdPersonDistance = 80;
|
|
13154
|
+
this.thirdPersonOffset = { x: 0, y: 0, z: 0 };
|
|
13022
13155
|
}
|
|
13023
13156
|
setHandler(handler) {
|
|
13024
13157
|
this.handler = handler;
|
|
@@ -13041,6 +13174,8 @@ var DemoPlaybackController = class {
|
|
|
13041
13174
|
this.cachedConfigStrings = null;
|
|
13042
13175
|
this.cachedServerInfo = null;
|
|
13043
13176
|
this.cachedStatistics = null;
|
|
13177
|
+
this.cachedPlayerStats = null;
|
|
13178
|
+
this.cachedWeaponStats = null;
|
|
13044
13179
|
}
|
|
13045
13180
|
play() {
|
|
13046
13181
|
if (this.reader && this.state !== 1 /* Playing */) {
|
|
@@ -13392,6 +13527,14 @@ var DemoPlaybackController = class {
|
|
|
13392
13527
|
this.ensureAnalysis();
|
|
13393
13528
|
return this.cachedStatistics;
|
|
13394
13529
|
}
|
|
13530
|
+
getPlayerStatistics(playerIndex) {
|
|
13531
|
+
this.ensureAnalysis();
|
|
13532
|
+
return this.cachedPlayerStats?.get(playerIndex) || null;
|
|
13533
|
+
}
|
|
13534
|
+
getWeaponStatistics(entityId) {
|
|
13535
|
+
this.ensureAnalysis();
|
|
13536
|
+
return this.cachedWeaponStats?.get(entityId) || null;
|
|
13537
|
+
}
|
|
13395
13538
|
ensureAnalysis() {
|
|
13396
13539
|
if (!this.cachedEvents && this.buffer) {
|
|
13397
13540
|
const analyzer = new DemoAnalyzer(this.buffer);
|
|
@@ -13402,8 +13545,22 @@ var DemoPlaybackController = class {
|
|
|
13402
13545
|
this.cachedConfigStrings = result.configStrings;
|
|
13403
13546
|
this.cachedServerInfo = result.serverInfo;
|
|
13404
13547
|
this.cachedStatistics = result.statistics;
|
|
13548
|
+
this.cachedPlayerStats = result.playerStats;
|
|
13549
|
+
this.cachedWeaponStats = result.weaponStats;
|
|
13405
13550
|
}
|
|
13406
13551
|
}
|
|
13552
|
+
setCameraMode(mode) {
|
|
13553
|
+
this.cameraMode = mode;
|
|
13554
|
+
}
|
|
13555
|
+
getCameraMode() {
|
|
13556
|
+
return this.cameraMode;
|
|
13557
|
+
}
|
|
13558
|
+
setThirdPersonDistance(distance) {
|
|
13559
|
+
this.thirdPersonDistance = distance;
|
|
13560
|
+
}
|
|
13561
|
+
setThirdPersonOffset(offset) {
|
|
13562
|
+
this.thirdPersonOffset = offset;
|
|
13563
|
+
}
|
|
13407
13564
|
};
|
|
13408
13565
|
|
|
13409
13566
|
// src/demo/recorder.ts
|
|
@@ -13854,6 +14011,9 @@ function createEngine(imports) {
|
|
|
13854
14011
|
ConfigStringRegistry,
|
|
13855
14012
|
Cvar,
|
|
13856
14013
|
CvarRegistry,
|
|
14014
|
+
DemoAnalyzer,
|
|
14015
|
+
DemoCameraMode,
|
|
14016
|
+
DemoEventType,
|
|
13857
14017
|
DemoPlaybackController,
|
|
13858
14018
|
DemoReader,
|
|
13859
14019
|
DemoRecorder,
|