quake2ts 0.0.52 → 0.0.55
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/apps/demo/dist/assets/index-BBC0sAl6.js +1 -0
- package/apps/demo/dist/index.html +20 -0
- package/apps/viewer/dist/browser/index.global.js +1 -1
- package/apps/viewer/dist/browser/index.global.js.map +1 -1
- package/apps/viewer/dist/cjs/index.cjs +2627 -414
- package/apps/viewer/dist/cjs/index.cjs.map +1 -1
- package/apps/viewer/dist/esm/index.js +2627 -414
- package/apps/viewer/dist/esm/index.js.map +1 -1
- package/apps/viewer/dist/tsconfig.tsbuildinfo +1 -1
- package/apps/viewer/dist/types/index.d.ts.map +1 -1
- package/package.json +6 -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 +2101 -108
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js +2107 -108
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/client/dist/types/index.d.ts +3 -2
- package/packages/client/dist/types/index.d.ts.map +1 -1
- package/packages/client/dist/types/prediction.d.ts +3 -1
- package/packages/client/dist/types/prediction.d.ts.map +1 -1
- package/packages/engine/dist/browser/index.global.js +15 -15
- package/packages/engine/dist/browser/index.global.js.map +1 -1
- package/packages/engine/dist/cjs/index.cjs +18 -2
- package/packages/engine/dist/cjs/index.cjs.map +1 -1
- package/packages/engine/dist/esm/index.js +17 -2
- package/packages/engine/dist/esm/index.js.map +1 -1
- package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/types/host.d.ts +5 -2
- package/packages/engine/dist/types/host.d.ts.map +1 -1
- package/packages/engine/dist/types/index.d.ts +3 -2
- package/packages/engine/dist/types/index.d.ts.map +1 -1
- package/packages/engine/dist/types/render/camera.d.ts +8 -0
- package/packages/engine/dist/types/render/camera.d.ts.map +1 -0
- package/packages/engine/dist/types/render/draw.d.ts +9 -0
- package/packages/engine/dist/types/render/draw.d.ts.map +1 -0
- 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 +200 -3
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +200 -3
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/entities/spawn.d.ts +1 -0
- package/packages/game/dist/types/entities/spawn.d.ts.map +1 -1
- package/packages/game/dist/types/entities/system.d.ts +1 -0
- package/packages/game/dist/types/entities/system.d.ts.map +1 -1
- package/packages/game/dist/types/index.d.ts +2 -1
- package/packages/game/dist/types/index.d.ts.map +1 -1
- package/packages/shared/dist/browser/index.global.js +1 -1
- package/packages/shared/dist/browser/index.global.js.map +1 -1
- package/packages/shared/dist/cjs/index.cjs +68 -0
- package/packages/shared/dist/cjs/index.cjs.map +1 -1
- package/packages/shared/dist/esm/index.js +67 -0
- package/packages/shared/dist/esm/index.js.map +1 -1
- package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/shared/dist/types/index.d.ts +2 -1
- package/packages/shared/dist/types/index.d.ts.map +1 -1
- package/packages/shared/dist/types/pmove/apply.d.ts +5 -0
- package/packages/shared/dist/types/pmove/apply.d.ts.map +1 -0
- package/packages/shared/dist/types/pmove/index.d.ts +18 -0
- package/packages/shared/dist/types/pmove/index.d.ts.map +1 -0
- package/packages/shared/dist/types/protocol/index.d.ts +6 -0
- package/packages/shared/dist/types/protocol/index.d.ts.map +1 -0
- package/packages/shared/dist/types/protocol/player-state.d.ts +11 -0
- package/packages/shared/dist/types/protocol/player-state.d.ts.map +1 -0
- package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
|
@@ -489,7 +489,167 @@ var WaterLevel = /* @__PURE__ */ ((WaterLevel3) => {
|
|
|
489
489
|
WaterLevel3[WaterLevel3["Under"] = 3] = "Under";
|
|
490
490
|
return WaterLevel3;
|
|
491
491
|
})(WaterLevel || {});
|
|
492
|
+
function applyPmoveFriction(params) {
|
|
493
|
+
const {
|
|
494
|
+
velocity,
|
|
495
|
+
frametime,
|
|
496
|
+
onGround,
|
|
497
|
+
groundIsSlick,
|
|
498
|
+
onLadder,
|
|
499
|
+
waterlevel,
|
|
500
|
+
pmFriction,
|
|
501
|
+
pmStopSpeed,
|
|
502
|
+
pmWaterFriction
|
|
503
|
+
} = params;
|
|
504
|
+
const speed = lengthVec3(velocity);
|
|
505
|
+
if (speed < 1) {
|
|
506
|
+
return { x: 0, y: 0, z: velocity.z };
|
|
507
|
+
}
|
|
508
|
+
let drop = 0;
|
|
509
|
+
if (onGround && !groundIsSlick || onLadder) {
|
|
510
|
+
const control = speed < pmStopSpeed ? pmStopSpeed : speed;
|
|
511
|
+
const friction = pmFriction;
|
|
512
|
+
drop += control * friction * frametime;
|
|
513
|
+
}
|
|
514
|
+
if (waterlevel > 0 && !onLadder) {
|
|
515
|
+
drop += speed * pmWaterFriction * waterlevel * frametime;
|
|
516
|
+
}
|
|
517
|
+
let newspeed = speed - drop;
|
|
518
|
+
if (newspeed < 0) {
|
|
519
|
+
newspeed = 0;
|
|
520
|
+
}
|
|
521
|
+
if (newspeed === speed) {
|
|
522
|
+
return velocity;
|
|
523
|
+
}
|
|
524
|
+
const scale = newspeed / speed;
|
|
525
|
+
return scaleVec3(velocity, scale);
|
|
526
|
+
}
|
|
527
|
+
function applyPmoveAccelerate(params) {
|
|
528
|
+
const { velocity, wishdir, wishspeed, accel, frametime } = params;
|
|
529
|
+
const currentSpeed = dotVec3(velocity, wishdir);
|
|
530
|
+
const addSpeed = wishspeed - currentSpeed;
|
|
531
|
+
if (addSpeed <= 0) {
|
|
532
|
+
return velocity;
|
|
533
|
+
}
|
|
534
|
+
let accelSpeed = accel * frametime * wishspeed;
|
|
535
|
+
if (accelSpeed > addSpeed) {
|
|
536
|
+
accelSpeed = addSpeed;
|
|
537
|
+
}
|
|
538
|
+
return {
|
|
539
|
+
x: velocity.x + wishdir.x * accelSpeed,
|
|
540
|
+
y: velocity.y + wishdir.y * accelSpeed,
|
|
541
|
+
z: velocity.z + wishdir.z * accelSpeed
|
|
542
|
+
};
|
|
543
|
+
}
|
|
544
|
+
function buildAirGroundWish(params) {
|
|
545
|
+
const { forward, right, cmd, maxSpeed } = params;
|
|
546
|
+
let wishvel = {
|
|
547
|
+
x: forward.x * cmd.forwardmove + right.x * cmd.sidemove,
|
|
548
|
+
y: forward.y * cmd.forwardmove + right.y * cmd.sidemove,
|
|
549
|
+
z: 0
|
|
550
|
+
};
|
|
551
|
+
let wishspeed = lengthVec3(wishvel);
|
|
552
|
+
if (wishspeed > maxSpeed) {
|
|
553
|
+
const scale = maxSpeed / wishspeed;
|
|
554
|
+
wishvel = scaleVec3(wishvel, scale);
|
|
555
|
+
wishspeed = maxSpeed;
|
|
556
|
+
}
|
|
557
|
+
return {
|
|
558
|
+
wishdir: wishspeed === 0 ? wishvel : normalizeVec3(wishvel),
|
|
559
|
+
wishspeed
|
|
560
|
+
};
|
|
561
|
+
}
|
|
562
|
+
function buildWaterWish(params) {
|
|
563
|
+
const { forward, right, cmd, maxSpeed } = params;
|
|
564
|
+
let wishvel = {
|
|
565
|
+
x: forward.x * cmd.forwardmove + right.x * cmd.sidemove,
|
|
566
|
+
y: forward.y * cmd.forwardmove + right.y * cmd.sidemove,
|
|
567
|
+
z: 0
|
|
568
|
+
};
|
|
569
|
+
if (cmd.upmove > 10) {
|
|
570
|
+
wishvel = addVec3(wishvel, { x: 0, y: 0, z: cmd.upmove });
|
|
571
|
+
} else if (cmd.upmove < -10) {
|
|
572
|
+
wishvel = addVec3(wishvel, { x: 0, y: 0, z: cmd.upmove });
|
|
573
|
+
} else {
|
|
574
|
+
wishvel = addVec3(wishvel, { x: 0, y: 0, z: 10 });
|
|
575
|
+
}
|
|
576
|
+
let wishspeed = lengthVec3(wishvel);
|
|
577
|
+
if (wishspeed > maxSpeed) {
|
|
578
|
+
const scale = maxSpeed / wishspeed;
|
|
579
|
+
wishvel = scaleVec3(wishvel, scale);
|
|
580
|
+
wishspeed = maxSpeed;
|
|
581
|
+
}
|
|
582
|
+
wishspeed *= 0.5;
|
|
583
|
+
return {
|
|
584
|
+
wishdir: wishspeed === 0 ? wishvel : normalizeVec3(wishvel),
|
|
585
|
+
wishspeed
|
|
586
|
+
};
|
|
587
|
+
}
|
|
492
588
|
var WATERJUMP_CLEAR = 8 | 16 | 32 | 1024;
|
|
589
|
+
var FRAMETIME = 0.025;
|
|
590
|
+
var categorizePosition2 = (state, trace) => {
|
|
591
|
+
const point = { ...state.origin };
|
|
592
|
+
point.z -= 0.25;
|
|
593
|
+
const traceResult = trace(state.origin, point);
|
|
594
|
+
return {
|
|
595
|
+
...state,
|
|
596
|
+
onGround: traceResult.fraction < 1
|
|
597
|
+
};
|
|
598
|
+
};
|
|
599
|
+
var checkWater = (state, pointContents2) => {
|
|
600
|
+
const point = { ...state.origin };
|
|
601
|
+
point.z += state.mins.z + 1;
|
|
602
|
+
const contents = pointContents2(point);
|
|
603
|
+
if (contents & 33554432) {
|
|
604
|
+
return { ...state, waterLevel: 1 };
|
|
605
|
+
}
|
|
606
|
+
return { ...state, waterLevel: 0 };
|
|
607
|
+
};
|
|
608
|
+
var applyPmove = (state, cmd, trace, pointContents2) => {
|
|
609
|
+
let newState = { ...state };
|
|
610
|
+
newState = categorizePosition2(newState, trace);
|
|
611
|
+
newState = checkWater(newState, pointContents2);
|
|
612
|
+
const { origin, velocity, onGround, waterLevel } = newState;
|
|
613
|
+
const frictionedVelocity = applyPmoveFriction({
|
|
614
|
+
velocity,
|
|
615
|
+
frametime: FRAMETIME,
|
|
616
|
+
onGround,
|
|
617
|
+
groundIsSlick: false,
|
|
618
|
+
onLadder: false,
|
|
619
|
+
waterlevel: waterLevel,
|
|
620
|
+
pmFriction: 6,
|
|
621
|
+
pmStopSpeed: 100,
|
|
622
|
+
pmWaterFriction: 1
|
|
623
|
+
});
|
|
624
|
+
const wish = waterLevel >= 2 ? buildWaterWish({
|
|
625
|
+
forward: { x: 1, y: 0, z: 0 },
|
|
626
|
+
right: { x: 0, y: 1, z: 0 },
|
|
627
|
+
cmd,
|
|
628
|
+
maxSpeed: 320
|
|
629
|
+
}) : buildAirGroundWish({
|
|
630
|
+
forward: { x: 1, y: 0, z: 0 },
|
|
631
|
+
right: { x: 0, y: 1, z: 0 },
|
|
632
|
+
cmd,
|
|
633
|
+
maxSpeed: 320
|
|
634
|
+
});
|
|
635
|
+
const finalVelocity = applyPmoveAccelerate({
|
|
636
|
+
velocity: frictionedVelocity,
|
|
637
|
+
wishdir: wish.wishdir,
|
|
638
|
+
wishspeed: wish.wishspeed,
|
|
639
|
+
accel: onGround ? 10 : 1,
|
|
640
|
+
frametime: FRAMETIME
|
|
641
|
+
});
|
|
642
|
+
const traceResult = trace(origin, {
|
|
643
|
+
x: origin.x + finalVelocity.x * FRAMETIME,
|
|
644
|
+
y: origin.y + finalVelocity.y * FRAMETIME,
|
|
645
|
+
z: origin.z + finalVelocity.z * FRAMETIME
|
|
646
|
+
});
|
|
647
|
+
return {
|
|
648
|
+
...newState,
|
|
649
|
+
origin: traceResult.endpos,
|
|
650
|
+
velocity: finalVelocity
|
|
651
|
+
};
|
|
652
|
+
};
|
|
493
653
|
|
|
494
654
|
// src/entities/entity.ts
|
|
495
655
|
var MoveType = /* @__PURE__ */ ((MoveType2) => {
|
|
@@ -1067,6 +1227,14 @@ var EntitySystem = class {
|
|
|
1067
1227
|
callback(entity);
|
|
1068
1228
|
}
|
|
1069
1229
|
}
|
|
1230
|
+
find(predicate) {
|
|
1231
|
+
for (const entity of this.pool) {
|
|
1232
|
+
if (predicate(entity)) {
|
|
1233
|
+
return entity;
|
|
1234
|
+
}
|
|
1235
|
+
}
|
|
1236
|
+
return void 0;
|
|
1237
|
+
}
|
|
1070
1238
|
spawn() {
|
|
1071
1239
|
return this.pool.spawn();
|
|
1072
1240
|
}
|
|
@@ -2056,6 +2224,11 @@ function spawnEntitiesFromText(text, options) {
|
|
|
2056
2224
|
}
|
|
2057
2225
|
return spawned;
|
|
2058
2226
|
}
|
|
2227
|
+
function findPlayerStart(entities) {
|
|
2228
|
+
return entities.find(
|
|
2229
|
+
(entity) => entity.classname === "info_player_start"
|
|
2230
|
+
);
|
|
2231
|
+
}
|
|
2059
2232
|
function registerDefaultSpawns(registry) {
|
|
2060
2233
|
registry.register("worldspawn", (entity) => {
|
|
2061
2234
|
entity.movetype = 2 /* Push */;
|
|
@@ -4216,7 +4389,7 @@ var WEAPONS = {
|
|
|
4216
4389
|
|
|
4217
4390
|
// src/index.ts
|
|
4218
4391
|
var ZERO_VEC32 = { x: 0, y: 0, z: 0 };
|
|
4219
|
-
function createGame(engine, options) {
|
|
4392
|
+
function createGame(trace, pointContents, engine, options) {
|
|
4220
4393
|
const gravity = options.gravity;
|
|
4221
4394
|
const levelClock = new LevelClock();
|
|
4222
4395
|
const frameLoop = new GameFrameLoop();
|
|
@@ -4265,15 +4438,39 @@ function createGame(engine, options) {
|
|
|
4265
4438
|
return {
|
|
4266
4439
|
init(startTimeMs) {
|
|
4267
4440
|
resetState(startTimeMs);
|
|
4268
|
-
void engine.trace({ x: 0, y: 0, z: 0 }, gravity);
|
|
4269
4441
|
return snapshot(0);
|
|
4270
4442
|
},
|
|
4271
4443
|
shutdown() {
|
|
4272
4444
|
},
|
|
4273
4445
|
spawnWorld() {
|
|
4446
|
+
const playerStart = findPlayerStart(entities);
|
|
4447
|
+
if (playerStart) {
|
|
4448
|
+
const player = entities.spawn();
|
|
4449
|
+
player.classname = "player";
|
|
4450
|
+
player.origin = { ...playerStart.origin };
|
|
4451
|
+
player.angles = { ...playerStart.angles };
|
|
4452
|
+
player.health = 100;
|
|
4453
|
+
player.mins = { x: -16, y: -16, z: -24 };
|
|
4454
|
+
player.maxs = { x: 16, y: 16, z: 32 };
|
|
4455
|
+
entities.finalizeSpawn(player);
|
|
4456
|
+
origin = { ...player.origin };
|
|
4457
|
+
}
|
|
4274
4458
|
},
|
|
4275
|
-
frame(step) {
|
|
4459
|
+
frame(step, command) {
|
|
4276
4460
|
const context = frameLoop.advance(step);
|
|
4461
|
+
const player = entities.find((e) => e.classname === "player");
|
|
4462
|
+
if (command && player) {
|
|
4463
|
+
const pcmd = {
|
|
4464
|
+
forwardmove: command.forwardmove,
|
|
4465
|
+
sidemove: command.sidemove,
|
|
4466
|
+
upmove: command.upmove,
|
|
4467
|
+
buttons: command.buttons
|
|
4468
|
+
};
|
|
4469
|
+
const playerState = { origin: player.origin, velocity: player.velocity, onGround: false, waterLevel: 0, mins: player.mins, maxs: player.maxs };
|
|
4470
|
+
const newState = applyPmove(playerState, pcmd, trace, pointContents);
|
|
4471
|
+
player.origin = newState.origin;
|
|
4472
|
+
player.velocity = newState.velocity;
|
|
4473
|
+
}
|
|
4277
4474
|
return snapshot(context.frame);
|
|
4278
4475
|
},
|
|
4279
4476
|
entities,
|