quake2ts 0.0.417 → 0.0.420

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.
Files changed (29) hide show
  1. package/package.json +1 -1
  2. package/packages/client/dist/browser/index.global.js +16 -16
  3. package/packages/client/dist/browser/index.global.js.map +1 -1
  4. package/packages/client/dist/cjs/index.cjs +151 -16
  5. package/packages/client/dist/cjs/index.cjs.map +1 -1
  6. package/packages/client/dist/esm/index.js +151 -16
  7. package/packages/client/dist/esm/index.js.map +1 -1
  8. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  9. package/packages/client/dist/types/blend.d.ts +9 -0
  10. package/packages/client/dist/types/blend.d.ts.map +1 -0
  11. package/packages/client/dist/types/index.d.ts.map +1 -1
  12. package/packages/client/dist/types/net/serverBrowser.d.ts +17 -0
  13. package/packages/client/dist/types/net/serverBrowser.d.ts.map +1 -0
  14. package/packages/client/dist/types/session.d.ts +1 -0
  15. package/packages/client/dist/types/session.d.ts.map +1 -1
  16. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
  17. package/packages/engine/dist/types/render/debug.d.ts +7 -0
  18. package/packages/engine/dist/types/render/debug.d.ts.map +1 -1
  19. package/packages/engine/dist/types/render/frame.d.ts +1 -0
  20. package/packages/engine/dist/types/render/frame.d.ts.map +1 -1
  21. package/packages/engine/dist/types/render/gpuProfiler.d.ts +19 -2
  22. package/packages/engine/dist/types/render/gpuProfiler.d.ts.map +1 -1
  23. package/packages/engine/dist/types/render/renderer.d.ts +2 -2
  24. package/packages/engine/dist/types/render/renderer.d.ts.map +1 -1
  25. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  26. package/packages/server/dist/index.cjs +35 -0
  27. package/packages/server/dist/index.d.cts +1 -0
  28. package/packages/server/dist/index.d.ts +1 -0
  29. package/packages/server/dist/index.js +35 -0
@@ -13938,6 +13938,33 @@ var ClientEffectSystem = class {
13938
13938
  }
13939
13939
  };
13940
13940
 
13941
+ // src/blend.ts
13942
+ var createBlendState = () => ({
13943
+ damageAlpha: 0,
13944
+ bonusAlpha: 0,
13945
+ lastFlashes: 0
13946
+ });
13947
+ var updateBlend = (state, ps, dt, damageIntensity = 0) => {
13948
+ state.damageAlpha -= dt;
13949
+ if (state.damageAlpha < 0) state.damageAlpha = 0;
13950
+ if (damageIntensity > 0) {
13951
+ state.damageAlpha = damageIntensity;
13952
+ }
13953
+ state.bonusAlpha -= dt;
13954
+ if (state.bonusAlpha < 0) state.bonusAlpha = 0;
13955
+ const flashes = ps.stats ? ps.stats[PlayerStat.STAT_FLASHES] ?? 0 : 0;
13956
+ if (flashes !== state.lastFlashes) {
13957
+ state.bonusAlpha = 0.6;
13958
+ state.lastFlashes = flashes;
13959
+ }
13960
+ if (state.bonusAlpha > 0) {
13961
+ return [1, 1, 0, state.bonusAlpha * 0.3];
13962
+ } else if (state.damageAlpha > 0) {
13963
+ return [1, 0, 0, state.damageAlpha * 0.5];
13964
+ }
13965
+ return [0, 0, 0, 0];
13966
+ };
13967
+
13941
13968
  // src/input/bindings.ts
13942
13969
  var DEFAULT_BINDINGS = [
13943
13970
  { code: "KeyW", command: "+forward" },
@@ -14548,13 +14575,111 @@ var GameSession = class {
14548
14575
  }
14549
14576
  }
14550
14577
  loadSavedGame(saveData) {
14578
+ if (this.host) {
14579
+ this.shutdown();
14580
+ }
14581
+ const mapName = saveData.map;
14582
+ const skill = saveData.difficulty;
14583
+ const gameOptions = {
14584
+ gravity: { x: 0, y: 0, z: -800 },
14585
+ skill,
14586
+ deathmatch: false,
14587
+ coop: false
14588
+ };
14589
+ const gameEngineAdapter = {
14590
+ trace: (start, end) => {
14591
+ return this.engine.trace(start, end);
14592
+ },
14593
+ centerprintf: (ent, msg) => {
14594
+ if (this.client) {
14595
+ this.client.ParseCenterPrint(msg);
14596
+ }
14597
+ },
14598
+ configstring: (idx, val) => {
14599
+ if (this.client) {
14600
+ this.client.ParseConfigString(idx, val);
14601
+ }
14602
+ },
14603
+ multicast: () => {
14604
+ },
14605
+ unicast: () => {
14606
+ },
14607
+ serverCommand: () => {
14608
+ }
14609
+ };
14610
+ const gameImports = {
14611
+ trace: (start, mins, maxs, end, passent, contentmask) => {
14612
+ const tr = this.engine.trace(start, end, mins || void 0, maxs || void 0);
14613
+ let plane = null;
14614
+ if (tr.planeNormal) {
14615
+ plane = {
14616
+ normal: tr.planeNormal,
14617
+ dist: 0,
14618
+ type: 0,
14619
+ signbits: 0
14620
+ };
14621
+ }
14622
+ return {
14623
+ allsolid: tr.allsolid,
14624
+ startsolid: tr.startsolid,
14625
+ fraction: tr.fraction,
14626
+ endpos: tr.endpos,
14627
+ plane,
14628
+ surfaceFlags: tr.surfaceFlags ?? 0,
14629
+ contents: tr.contents ?? 0,
14630
+ ent: null
14631
+ };
14632
+ },
14633
+ pointcontents: (p) => {
14634
+ const t = this.engine.trace(p, p, void 0, void 0);
14635
+ return t.contents || 0;
14636
+ },
14637
+ multicast: () => {
14638
+ },
14639
+ unicast: () => {
14640
+ },
14641
+ configstring: (idx, val) => {
14642
+ if (this.client) {
14643
+ this.client.ParseConfigString(idx, val);
14644
+ }
14645
+ },
14646
+ serverCommand: (cmd) => {
14647
+ }
14648
+ };
14649
+ this.game = createGame(gameImports, gameEngineAdapter, gameOptions);
14650
+ const clientProxy = {
14651
+ init: (initial) => this.client?.init(initial),
14652
+ render: (sample) => this.client?.render(sample),
14653
+ shutdown: () => this.client?.shutdown(),
14654
+ get camera() {
14655
+ return this.client?.camera;
14656
+ }
14657
+ };
14658
+ this.host = new EngineHost(this.game, clientProxy);
14659
+ const clientImports = {
14660
+ engine: this.engine,
14661
+ host: this.host
14662
+ };
14663
+ this.client = createClient(clientImports);
14664
+ if (this.engine.cmd) {
14665
+ this.engine.cmd.executeText(`map ${mapName}`);
14666
+ } else if (this.host.commands) {
14667
+ this.host.commands.execute(`map ${mapName}`);
14668
+ }
14669
+ if (this.game) {
14670
+ this.game.loadSave(saveData);
14671
+ }
14672
+ this.host.start();
14551
14673
  }
14552
14674
  shutdown() {
14553
14675
  if (this.host) {
14554
14676
  this.host.stop();
14555
14677
  this.host = null;
14556
14678
  }
14557
- this.client = null;
14679
+ if (this.client) {
14680
+ this.client.shutdown();
14681
+ this.client = null;
14682
+ }
14558
14683
  this.game = null;
14559
14684
  }
14560
14685
  getClient() {
@@ -14635,6 +14760,9 @@ function createClient(imports) {
14635
14760
  let pauseMenuFactory;
14636
14761
  let optionsFactory;
14637
14762
  const configStrings = new ClientConfigStrings();
14763
+ const blendState = createBlendState();
14764
+ let currentBlend = [0, 0, 0, 0];
14765
+ let pendingDamage = 0;
14638
14766
  let latestFrame;
14639
14767
  let lastRenderTime = 0;
14640
14768
  let clientInAutoDemo = false;
@@ -14706,6 +14834,9 @@ function createClient(imports) {
14706
14834
  if (pos) {
14707
14835
  effectSystem.onTempEntity(type, pos, time);
14708
14836
  }
14837
+ },
14838
+ onDamage: (indicators) => {
14839
+ pendingDamage = 0.5;
14709
14840
  }
14710
14841
  });
14711
14842
  demoPlayback.setHandler(demoHandler);
@@ -15016,7 +15147,16 @@ function createClient(imports) {
15016
15147
  }
15017
15148
  }
15018
15149
  const frameTimeMs = sample.latest && sample.previous ? Math.max(0, sample.latest.timeMs - sample.previous.timeMs) : 0;
15150
+ if (frameTimeMs > 0) {
15151
+ prediction.decayError(frameTimeMs / 1e3);
15152
+ }
15019
15153
  lastView = view.sample(lastRendered, frameTimeMs);
15154
+ if (lastRendered) {
15155
+ currentBlend = updateBlend(blendState, lastRendered, frameTimeMs / 1e3, pendingDamage);
15156
+ pendingDamage = 0;
15157
+ } else {
15158
+ currentBlend = [0, 0, 0, 0];
15159
+ }
15020
15160
  const command = {};
15021
15161
  const timeSeconds = sample.nowMs / 1e3;
15022
15162
  dlightManager.update(timeSeconds);
@@ -15072,23 +15212,18 @@ function createClient(imports) {
15072
15212
  }, renderEntities);
15073
15213
  }
15074
15214
  if (imports.engine.renderer && lastRendered && lastRendered.client) {
15075
- const stats = imports.engine.renderer.stats ? {
15076
- ...imports.engine.renderer.stats,
15077
- batches: 0,
15078
- facesDrawn: 0,
15079
- drawCalls: 0,
15080
- skyDrawn: false,
15081
- viewModelDrawn: false,
15082
- fps: 0,
15083
- vertexCount: 0
15084
- } : {
15085
- batches: 0,
15086
- facesDrawn: 0,
15087
- drawCalls: 0,
15215
+ const perfReport = imports.engine.renderer.getPerformanceReport();
15216
+ const stats = {
15217
+ batches: perfReport.textureBinds,
15218
+ facesDrawn: perfReport.triangles,
15219
+ // approximate
15220
+ drawCalls: perfReport.drawCalls,
15088
15221
  skyDrawn: false,
15222
+ // Not exposed in report
15089
15223
  viewModelDrawn: false,
15224
+ // Not exposed in report
15090
15225
  fps: 0,
15091
- vertexCount: 0
15226
+ vertexCount: perfReport.vertices
15092
15227
  };
15093
15228
  const timeMs = sample.latest?.timeMs ?? 0;
15094
15229
  this.DrawHUD(stats, timeMs);
@@ -15111,7 +15246,7 @@ function createClient(imports) {
15111
15246
  maxs: { x: 16, y: 16, z: 32 },
15112
15247
  damageAlpha: lastRendered.damageAlpha ?? 0,
15113
15248
  damageIndicators: lastRendered.damageIndicators ?? [],
15114
- blend: lastRendered.blend ?? [0, 0, 0, 0],
15249
+ blend: currentBlend,
15115
15250
  pickupIcon: lastRendered.pickupIcon,
15116
15251
  centerPrint: void 0,
15117
15252
  // Handled by CGame MessageSystem now