quake2ts 0.0.70 → 0.0.72

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 (36) hide show
  1. package/package.json +1 -1
  2. package/packages/client/dist/browser/index.global.js +1 -1
  3. package/packages/client/dist/browser/index.global.js.map +1 -1
  4. package/packages/client/dist/cjs/index.cjs.map +1 -1
  5. package/packages/client/dist/esm/index.js.map +1 -1
  6. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  7. package/packages/engine/dist/browser/index.global.js +14 -14
  8. package/packages/engine/dist/browser/index.global.js.map +1 -1
  9. package/packages/engine/dist/cjs/index.cjs +84 -0
  10. package/packages/engine/dist/cjs/index.cjs.map +1 -1
  11. package/packages/engine/dist/esm/index.js +81 -0
  12. package/packages/engine/dist/esm/index.js.map +1 -1
  13. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
  14. package/packages/engine/dist/types/assets/manager.d.ts +4 -1
  15. package/packages/engine/dist/types/assets/manager.d.ts.map +1 -1
  16. package/packages/engine/dist/types/assets/sprite.d.ts +23 -0
  17. package/packages/engine/dist/types/assets/sprite.d.ts.map +1 -0
  18. package/packages/engine/dist/types/index.d.ts +1 -0
  19. package/packages/engine/dist/types/index.d.ts.map +1 -1
  20. package/packages/game/dist/browser/index.global.js +1 -1
  21. package/packages/game/dist/browser/index.global.js.map +1 -1
  22. package/packages/game/dist/cjs/index.cjs +259 -40
  23. package/packages/game/dist/cjs/index.cjs.map +1 -1
  24. package/packages/game/dist/esm/index.js +259 -40
  25. package/packages/game/dist/esm/index.js.map +1 -1
  26. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  27. package/packages/game/dist/types/entities/entity.d.ts +4 -1
  28. package/packages/game/dist/types/entities/entity.d.ts.map +1 -1
  29. package/packages/game/dist/types/entities/funcs.d.ts.map +1 -1
  30. package/packages/game/dist/types/entities/lights.d.ts +3 -0
  31. package/packages/game/dist/types/entities/lights.d.ts.map +1 -0
  32. package/packages/game/dist/types/entities/paths.d.ts +3 -0
  33. package/packages/game/dist/types/entities/paths.d.ts.map +1 -0
  34. package/packages/game/dist/types/entities/spawn.d.ts.map +1 -1
  35. package/packages/game/dist/types/entities/utils.d.ts +5 -0
  36. package/packages/game/dist/types/entities/utils.d.ts.map +1 -1
@@ -82,6 +82,8 @@ __export(index_exports, {
82
82
  SoundChannel: () => SoundChannel,
83
83
  SoundPrecache: () => SoundPrecache,
84
84
  SoundRegistry: () => SoundRegistry,
85
+ SpriteLoader: () => SpriteLoader,
86
+ SpriteParseError: () => SpriteParseError,
85
87
  Texture2D: () => Texture2D,
86
88
  TextureCache: () => TextureCache,
87
89
  TextureCubeMap: () => TextureCubeMap,
@@ -122,6 +124,7 @@ __export(index_exports, {
122
124
  parseMd2: () => parseMd2,
123
125
  parseMd3: () => parseMd3,
124
126
  parsePcx: () => parsePcx,
127
+ parseSprite: () => parseSprite,
125
128
  parseWal: () => parseWal,
126
129
  parseWalTexture: () => parseWalTexture,
127
130
  parseWav: () => parseWav,
@@ -1782,6 +1785,76 @@ var Md3Loader = class {
1782
1785
  }
1783
1786
  };
1784
1787
 
1788
+ // src/assets/sprite.ts
1789
+ var IDSPRITEHEADER = 1229214514;
1790
+ var SPRITE_VERSION = 2;
1791
+ var MAX_SKINNAME = 64;
1792
+ var HEADER_SIZE3 = 12;
1793
+ var SpriteParseError = class extends Error {
1794
+ };
1795
+ function readCString3(view, offset, maxLength) {
1796
+ const chars = [];
1797
+ for (let i = 0; i < maxLength; i += 1) {
1798
+ const code = view.getUint8(offset + i);
1799
+ if (code === 0) break;
1800
+ chars.push(code);
1801
+ }
1802
+ return String.fromCharCode(...chars);
1803
+ }
1804
+ function parseSprite(buffer) {
1805
+ if (buffer.byteLength < HEADER_SIZE3) {
1806
+ throw new SpriteParseError("Sprite buffer too small to contain header");
1807
+ }
1808
+ const view = new DataView(buffer);
1809
+ const ident = view.getInt32(0, true);
1810
+ const version = view.getInt32(4, true);
1811
+ const numFrames = view.getInt32(8, true);
1812
+ if (ident !== IDSPRITEHEADER) {
1813
+ throw new SpriteParseError(`Invalid Sprite ident: ${ident}`);
1814
+ }
1815
+ if (version !== SPRITE_VERSION) {
1816
+ throw new SpriteParseError(`Unsupported Sprite version: ${version}`);
1817
+ }
1818
+ const frames = [];
1819
+ const frameSize = 16 + MAX_SKINNAME;
1820
+ let offset = HEADER_SIZE3;
1821
+ for (let i = 0; i < numFrames; i += 1) {
1822
+ if (offset + frameSize > buffer.byteLength) {
1823
+ throw new SpriteParseError("Sprite frame data exceeds buffer length");
1824
+ }
1825
+ const width = view.getInt32(offset, true);
1826
+ const height = view.getInt32(offset + 4, true);
1827
+ const originX = view.getInt32(offset + 8, true);
1828
+ const originY = view.getInt32(offset + 12, true);
1829
+ const name = readCString3(view, offset + 16, MAX_SKINNAME);
1830
+ frames.push({
1831
+ width,
1832
+ height,
1833
+ originX,
1834
+ originY,
1835
+ name
1836
+ });
1837
+ offset += frameSize;
1838
+ }
1839
+ return {
1840
+ ident,
1841
+ version,
1842
+ numFrames,
1843
+ frames
1844
+ };
1845
+ }
1846
+ var SpriteLoader = class {
1847
+ constructor(vfs) {
1848
+ this.vfs = vfs;
1849
+ }
1850
+ async load(path) {
1851
+ const bytes = await this.vfs.readFile(path);
1852
+ const copy = new Uint8Array(bytes.byteLength);
1853
+ copy.set(bytes);
1854
+ return parseSprite(copy.buffer);
1855
+ }
1856
+ };
1857
+
1785
1858
  // src/assets/animation.ts
1786
1859
  function advanceAnimation(state, deltaSeconds) {
1787
1860
  const duration = (state.sequence.end - state.sequence.start + 1) / state.sequence.fps;
@@ -2340,6 +2413,7 @@ var AssetManager = class {
2340
2413
  this.dependencyTracker = options.dependencyTracker ?? new AssetDependencyTracker();
2341
2414
  this.md2 = new Md2Loader(vfs);
2342
2415
  this.md3 = new Md3Loader(vfs);
2416
+ this.sprite = new SpriteLoader(vfs);
2343
2417
  }
2344
2418
  isAssetLoaded(type, path) {
2345
2419
  return this.dependencyTracker.isLoaded(this.makeKey(type, path));
@@ -2381,6 +2455,13 @@ var AssetManager = class {
2381
2455
  this.dependencyTracker.markLoaded(modelKey);
2382
2456
  return model;
2383
2457
  }
2458
+ async loadSprite(path) {
2459
+ const spriteKey = this.makeKey("sprite", path);
2460
+ this.dependencyTracker.register(spriteKey);
2461
+ const sprite = await this.sprite.load(path);
2462
+ this.dependencyTracker.markLoaded(spriteKey);
2463
+ return sprite;
2464
+ }
2384
2465
  resetForLevelChange() {
2385
2466
  this.textures.clear();
2386
2467
  this.audio.clearAll();
@@ -5127,6 +5208,8 @@ function createEngine(imports) {
5127
5208
  SoundChannel,
5128
5209
  SoundPrecache,
5129
5210
  SoundRegistry,
5211
+ SpriteLoader,
5212
+ SpriteParseError,
5130
5213
  Texture2D,
5131
5214
  TextureCache,
5132
5215
  TextureCubeMap,
@@ -5167,6 +5250,7 @@ function createEngine(imports) {
5167
5250
  parseMd2,
5168
5251
  parseMd3,
5169
5252
  parsePcx,
5253
+ parseSprite,
5170
5254
  parseWal,
5171
5255
  parseWalTexture,
5172
5256
  parseWav,