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
|
@@ -1637,6 +1637,76 @@ var Md3Loader = class {
|
|
|
1637
1637
|
}
|
|
1638
1638
|
};
|
|
1639
1639
|
|
|
1640
|
+
// src/assets/sprite.ts
|
|
1641
|
+
var IDSPRITEHEADER = 1229214514;
|
|
1642
|
+
var SPRITE_VERSION = 2;
|
|
1643
|
+
var MAX_SKINNAME = 64;
|
|
1644
|
+
var HEADER_SIZE3 = 12;
|
|
1645
|
+
var SpriteParseError = class extends Error {
|
|
1646
|
+
};
|
|
1647
|
+
function readCString3(view, offset, maxLength) {
|
|
1648
|
+
const chars = [];
|
|
1649
|
+
for (let i = 0; i < maxLength; i += 1) {
|
|
1650
|
+
const code = view.getUint8(offset + i);
|
|
1651
|
+
if (code === 0) break;
|
|
1652
|
+
chars.push(code);
|
|
1653
|
+
}
|
|
1654
|
+
return String.fromCharCode(...chars);
|
|
1655
|
+
}
|
|
1656
|
+
function parseSprite(buffer) {
|
|
1657
|
+
if (buffer.byteLength < HEADER_SIZE3) {
|
|
1658
|
+
throw new SpriteParseError("Sprite buffer too small to contain header");
|
|
1659
|
+
}
|
|
1660
|
+
const view = new DataView(buffer);
|
|
1661
|
+
const ident = view.getInt32(0, true);
|
|
1662
|
+
const version = view.getInt32(4, true);
|
|
1663
|
+
const numFrames = view.getInt32(8, true);
|
|
1664
|
+
if (ident !== IDSPRITEHEADER) {
|
|
1665
|
+
throw new SpriteParseError(`Invalid Sprite ident: ${ident}`);
|
|
1666
|
+
}
|
|
1667
|
+
if (version !== SPRITE_VERSION) {
|
|
1668
|
+
throw new SpriteParseError(`Unsupported Sprite version: ${version}`);
|
|
1669
|
+
}
|
|
1670
|
+
const frames = [];
|
|
1671
|
+
const frameSize = 16 + MAX_SKINNAME;
|
|
1672
|
+
let offset = HEADER_SIZE3;
|
|
1673
|
+
for (let i = 0; i < numFrames; i += 1) {
|
|
1674
|
+
if (offset + frameSize > buffer.byteLength) {
|
|
1675
|
+
throw new SpriteParseError("Sprite frame data exceeds buffer length");
|
|
1676
|
+
}
|
|
1677
|
+
const width = view.getInt32(offset, true);
|
|
1678
|
+
const height = view.getInt32(offset + 4, true);
|
|
1679
|
+
const originX = view.getInt32(offset + 8, true);
|
|
1680
|
+
const originY = view.getInt32(offset + 12, true);
|
|
1681
|
+
const name = readCString3(view, offset + 16, MAX_SKINNAME);
|
|
1682
|
+
frames.push({
|
|
1683
|
+
width,
|
|
1684
|
+
height,
|
|
1685
|
+
originX,
|
|
1686
|
+
originY,
|
|
1687
|
+
name
|
|
1688
|
+
});
|
|
1689
|
+
offset += frameSize;
|
|
1690
|
+
}
|
|
1691
|
+
return {
|
|
1692
|
+
ident,
|
|
1693
|
+
version,
|
|
1694
|
+
numFrames,
|
|
1695
|
+
frames
|
|
1696
|
+
};
|
|
1697
|
+
}
|
|
1698
|
+
var SpriteLoader = class {
|
|
1699
|
+
constructor(vfs) {
|
|
1700
|
+
this.vfs = vfs;
|
|
1701
|
+
}
|
|
1702
|
+
async load(path) {
|
|
1703
|
+
const bytes = await this.vfs.readFile(path);
|
|
1704
|
+
const copy = new Uint8Array(bytes.byteLength);
|
|
1705
|
+
copy.set(bytes);
|
|
1706
|
+
return parseSprite(copy.buffer);
|
|
1707
|
+
}
|
|
1708
|
+
};
|
|
1709
|
+
|
|
1640
1710
|
// src/assets/animation.ts
|
|
1641
1711
|
function advanceAnimation(state, deltaSeconds) {
|
|
1642
1712
|
const duration = (state.sequence.end - state.sequence.start + 1) / state.sequence.fps;
|
|
@@ -2195,6 +2265,7 @@ var AssetManager = class {
|
|
|
2195
2265
|
this.dependencyTracker = options.dependencyTracker ?? new AssetDependencyTracker();
|
|
2196
2266
|
this.md2 = new Md2Loader(vfs);
|
|
2197
2267
|
this.md3 = new Md3Loader(vfs);
|
|
2268
|
+
this.sprite = new SpriteLoader(vfs);
|
|
2198
2269
|
}
|
|
2199
2270
|
isAssetLoaded(type, path) {
|
|
2200
2271
|
return this.dependencyTracker.isLoaded(this.makeKey(type, path));
|
|
@@ -2236,6 +2307,13 @@ var AssetManager = class {
|
|
|
2236
2307
|
this.dependencyTracker.markLoaded(modelKey);
|
|
2237
2308
|
return model;
|
|
2238
2309
|
}
|
|
2310
|
+
async loadSprite(path) {
|
|
2311
|
+
const spriteKey = this.makeKey("sprite", path);
|
|
2312
|
+
this.dependencyTracker.register(spriteKey);
|
|
2313
|
+
const sprite = await this.sprite.load(path);
|
|
2314
|
+
this.dependencyTracker.markLoaded(spriteKey);
|
|
2315
|
+
return sprite;
|
|
2316
|
+
}
|
|
2239
2317
|
resetForLevelChange() {
|
|
2240
2318
|
this.textures.clear();
|
|
2241
2319
|
this.audio.clearAll();
|
|
@@ -4981,6 +5059,8 @@ export {
|
|
|
4981
5059
|
SoundChannel,
|
|
4982
5060
|
SoundPrecache,
|
|
4983
5061
|
SoundRegistry,
|
|
5062
|
+
SpriteLoader,
|
|
5063
|
+
SpriteParseError,
|
|
4984
5064
|
Texture2D,
|
|
4985
5065
|
TextureCache,
|
|
4986
5066
|
TextureCubeMap,
|
|
@@ -5021,6 +5101,7 @@ export {
|
|
|
5021
5101
|
parseMd2,
|
|
5022
5102
|
parseMd3,
|
|
5023
5103
|
parsePcx,
|
|
5104
|
+
parseSprite,
|
|
5024
5105
|
parseWal,
|
|
5025
5106
|
parseWalTexture,
|
|
5026
5107
|
parseWav,
|