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.
- package/package.json +1 -1
- package/packages/client/dist/browser/index.global.js +1 -1
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- 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 +14 -14
- package/packages/engine/dist/browser/index.global.js.map +1 -1
- package/packages/engine/dist/cjs/index.cjs +84 -0
- package/packages/engine/dist/cjs/index.cjs.map +1 -1
- package/packages/engine/dist/esm/index.js +81 -0
- package/packages/engine/dist/esm/index.js.map +1 -1
- package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/types/assets/manager.d.ts +4 -1
- package/packages/engine/dist/types/assets/manager.d.ts.map +1 -1
- package/packages/engine/dist/types/assets/sprite.d.ts +23 -0
- package/packages/engine/dist/types/assets/sprite.d.ts.map +1 -0
- package/packages/engine/dist/types/index.d.ts +1 -0
- package/packages/engine/dist/types/index.d.ts.map +1 -1
- package/packages/game/dist/browser/index.global.js +1 -1
- package/packages/game/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/cjs/index.cjs +259 -40
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +259 -40
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/entities/entity.d.ts +4 -1
- package/packages/game/dist/types/entities/entity.d.ts.map +1 -1
- package/packages/game/dist/types/entities/funcs.d.ts.map +1 -1
- package/packages/game/dist/types/entities/lights.d.ts +3 -0
- package/packages/game/dist/types/entities/lights.d.ts.map +1 -0
- package/packages/game/dist/types/entities/paths.d.ts +3 -0
- package/packages/game/dist/types/entities/paths.d.ts.map +1 -0
- package/packages/game/dist/types/entities/spawn.d.ts.map +1 -1
- package/packages/game/dist/types/entities/utils.d.ts +5 -0
- 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,
|