@adatechnology/game-weapons-three 0.4.0 → 0.5.0
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/assets/weapon-svg/CREDITS.md +1 -1
- package/assets/weapon-svg/credits.html +1 -1
- package/assets/weapon-svg/generated/cast_iron_skillet.svg +1 -0
- package/assets/weapon-svg/generated/chainsaw.svg +1 -0
- package/assets/weapon-svg/generated/hatchet.svg +1 -0
- package/assets/weapon-svg/generated/improvised_spear.svg +1 -0
- package/assets/weapon-svg/generated/iron_pipe.svg +1 -0
- package/assets/weapon-svg/generated/meat_cleaver.svg +1 -0
- package/assets/weapon-svg/generated/nail_bat.svg +1 -0
- package/assets/weapon-svg/generated/pickaxe.svg +1 -0
- package/assets/weapon-svg/generated/police_baton.svg +1 -0
- package/assets/weapon-svg/generated/recurve_bow.svg +1 -0
- package/assets/weapon-svg/generated/sickle.svg +1 -0
- package/assets/weapon-svg/generated/tactical_knife.svg +1 -0
- package/assets/weapon-svg/manifest.json +48 -0
- package/dist/index.d.ts +23 -2
- package/dist/index.global.js +619 -259
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +100 -51
- package/dist/index.js.map +1 -1
- package/package.json +7 -6
package/dist/index.js
CHANGED
|
@@ -651,56 +651,8 @@ var createLaserRaycast = (THREE, scene, camera, options = {}) => {
|
|
|
651
651
|
};
|
|
652
652
|
};
|
|
653
653
|
|
|
654
|
-
// src/
|
|
655
|
-
|
|
656
|
-
var isVisible = (object) => {
|
|
657
|
-
for (let node = object; node; node = node.parent) if (!node.visible) return false;
|
|
658
|
-
return true;
|
|
659
|
-
};
|
|
660
|
-
var bake = (THREE, mesh, matrix) => {
|
|
661
|
-
const source = mesh.geometry.index ? mesh.geometry.toNonIndexed() : mesh.geometry.clone();
|
|
662
|
-
const baked = new THREE.BufferGeometry();
|
|
663
|
-
const count = source.getAttribute("position").count;
|
|
664
|
-
for (const name of ATTRIBUTES) {
|
|
665
|
-
const attribute = source.getAttribute(name);
|
|
666
|
-
baked.setAttribute(name, attribute ?? new THREE.BufferAttribute(new Float32Array(count * (name === "uv" ? 2 : 3)), name === "uv" ? 2 : 3));
|
|
667
|
-
}
|
|
668
|
-
source.dispose();
|
|
669
|
-
return baked.applyMatrix4(matrix);
|
|
670
|
-
};
|
|
671
|
-
var join = (THREE, geometries) => {
|
|
672
|
-
const merged = new THREE.BufferGeometry();
|
|
673
|
-
for (const name of ATTRIBUTES) {
|
|
674
|
-
const size = (geometries[0]?.getAttribute(name)).itemSize;
|
|
675
|
-
const total = geometries.reduce((sum, geometry) => sum + geometry.getAttribute(name).count, 0);
|
|
676
|
-
const array = new Float32Array(total * size);
|
|
677
|
-
let offset = 0;
|
|
678
|
-
for (const geometry of geometries) {
|
|
679
|
-
array.set(geometry.getAttribute(name).array, offset);
|
|
680
|
-
offset += geometry.getAttribute(name).count * size;
|
|
681
|
-
}
|
|
682
|
-
merged.setAttribute(name, new THREE.BufferAttribute(array, size));
|
|
683
|
-
}
|
|
684
|
-
return merged;
|
|
685
|
-
};
|
|
686
|
-
function mergeByMaterial(THREE, root, space) {
|
|
687
|
-
const toSpace = space.matrixWorld.clone().invert();
|
|
688
|
-
const byMaterial = /* @__PURE__ */ new Map();
|
|
689
|
-
root.traverse((object) => {
|
|
690
|
-
const mesh = object;
|
|
691
|
-
if (!mesh.isMesh || Array.isArray(mesh.material) || !isVisible(mesh)) return;
|
|
692
|
-
const list = byMaterial.get(mesh.material) ?? [];
|
|
693
|
-
list.push(bake(THREE, mesh, new THREE.Matrix4().multiplyMatrices(toSpace, mesh.matrixWorld)));
|
|
694
|
-
byMaterial.set(mesh.material, list);
|
|
695
|
-
});
|
|
696
|
-
return [...byMaterial].map(([material, geometries]) => {
|
|
697
|
-
const merged = new THREE.Mesh(join(THREE, geometries), material);
|
|
698
|
-
for (const geometry of geometries) geometry.dispose();
|
|
699
|
-
merged.castShadow = false;
|
|
700
|
-
merged.receiveShadow = true;
|
|
701
|
-
return merged;
|
|
702
|
-
});
|
|
703
|
-
}
|
|
654
|
+
// src/props.ts
|
|
655
|
+
import { mergeByMaterial } from "@adatechnology/game-props3d";
|
|
704
656
|
|
|
705
657
|
// src/models/index.ts
|
|
706
658
|
import { WEAPONS } from "@adatechnology/game-weapons";
|
|
@@ -5942,6 +5894,10 @@ var manifest_default = {
|
|
|
5942
5894
|
source: "generated",
|
|
5943
5895
|
file: "generated/carl_gustaf_m4.svg"
|
|
5944
5896
|
},
|
|
5897
|
+
cast_iron_skillet: {
|
|
5898
|
+
source: "generated",
|
|
5899
|
+
file: "generated/cast_iron_skillet.svg"
|
|
5900
|
+
},
|
|
5945
5901
|
cbc_122: {
|
|
5946
5902
|
source: "generated",
|
|
5947
5903
|
file: "generated/cbc_122.svg"
|
|
@@ -5954,6 +5910,10 @@ var manifest_default = {
|
|
|
5954
5910
|
source: "generated",
|
|
5955
5911
|
file: "generated/cbc_pump_military_3_0.svg"
|
|
5956
5912
|
},
|
|
5913
|
+
chainsaw: {
|
|
5914
|
+
source: "generated",
|
|
5915
|
+
file: "generated/chainsaw.svg"
|
|
5916
|
+
},
|
|
5957
5917
|
cheytac_m200: {
|
|
5958
5918
|
source: "generated",
|
|
5959
5919
|
file: "generated/cheytac_m200.svg"
|
|
@@ -6110,6 +6070,10 @@ var manifest_default = {
|
|
|
6110
6070
|
source: "generated",
|
|
6111
6071
|
file: "generated/hammer.svg"
|
|
6112
6072
|
},
|
|
6073
|
+
hatchet: {
|
|
6074
|
+
source: "generated",
|
|
6075
|
+
file: "generated/hatchet.svg"
|
|
6076
|
+
},
|
|
6113
6077
|
hk416: {
|
|
6114
6078
|
source: "generated",
|
|
6115
6079
|
file: "generated/hk416.svg"
|
|
@@ -6178,6 +6142,14 @@ var manifest_default = {
|
|
|
6178
6142
|
source: "generated",
|
|
6179
6143
|
file: "generated/improvised_flamethrower.svg"
|
|
6180
6144
|
},
|
|
6145
|
+
improvised_spear: {
|
|
6146
|
+
source: "generated",
|
|
6147
|
+
file: "generated/improvised_spear.svg"
|
|
6148
|
+
},
|
|
6149
|
+
iron_pipe: {
|
|
6150
|
+
source: "generated",
|
|
6151
|
+
file: "generated/iron_pipe.svg"
|
|
6152
|
+
},
|
|
6181
6153
|
kel_tec_ksg: {
|
|
6182
6154
|
source: "generated",
|
|
6183
6155
|
file: "generated/kel_tec_ksg.svg"
|
|
@@ -6246,6 +6218,10 @@ var manifest_default = {
|
|
|
6246
6218
|
source: "generated",
|
|
6247
6219
|
file: "generated/makarov_pm.svg"
|
|
6248
6220
|
},
|
|
6221
|
+
meat_cleaver: {
|
|
6222
|
+
source: "generated",
|
|
6223
|
+
file: "generated/meat_cleaver.svg"
|
|
6224
|
+
},
|
|
6249
6225
|
mg3: {
|
|
6250
6226
|
source: "generated",
|
|
6251
6227
|
file: "generated/mg3.svg"
|
|
@@ -6270,6 +6246,14 @@ var manifest_default = {
|
|
|
6270
6246
|
source: "generated",
|
|
6271
6247
|
file: "generated/mossberg_500_cruiser.svg"
|
|
6272
6248
|
},
|
|
6249
|
+
nail_bat: {
|
|
6250
|
+
source: "generated",
|
|
6251
|
+
file: "generated/nail_bat.svg"
|
|
6252
|
+
},
|
|
6253
|
+
pickaxe: {
|
|
6254
|
+
source: "generated",
|
|
6255
|
+
file: "generated/pickaxe.svg"
|
|
6256
|
+
},
|
|
6273
6257
|
pipe_bomb: {
|
|
6274
6258
|
source: "generated",
|
|
6275
6259
|
file: "generated/pipe_bomb.svg"
|
|
@@ -6290,6 +6274,10 @@ var manifest_default = {
|
|
|
6290
6274
|
source: "generated",
|
|
6291
6275
|
file: "generated/pkm.svg"
|
|
6292
6276
|
},
|
|
6277
|
+
police_baton: {
|
|
6278
|
+
source: "generated",
|
|
6279
|
+
file: "generated/police_baton.svg"
|
|
6280
|
+
},
|
|
6293
6281
|
pp19_bizon: {
|
|
6294
6282
|
source: "generated",
|
|
6295
6283
|
file: "generated/pp19_bizon.svg"
|
|
@@ -6302,6 +6290,10 @@ var manifest_default = {
|
|
|
6302
6290
|
source: "generated",
|
|
6303
6291
|
file: "generated/pry_bar.svg"
|
|
6304
6292
|
},
|
|
6293
|
+
recurve_bow: {
|
|
6294
|
+
source: "generated",
|
|
6295
|
+
file: "generated/recurve_bow.svg"
|
|
6296
|
+
},
|
|
6305
6297
|
remington_700: {
|
|
6306
6298
|
source: "generated",
|
|
6307
6299
|
file: "generated/remington_700.svg"
|
|
@@ -6378,6 +6370,10 @@ var manifest_default = {
|
|
|
6378
6370
|
source: "generated",
|
|
6379
6371
|
file: "generated/shotgun_semi_12.svg"
|
|
6380
6372
|
},
|
|
6373
|
+
sickle: {
|
|
6374
|
+
source: "generated",
|
|
6375
|
+
file: "generated/sickle.svg"
|
|
6376
|
+
},
|
|
6381
6377
|
sig_mpx: {
|
|
6382
6378
|
source: "generated",
|
|
6383
6379
|
file: "generated/sig_mpx.svg"
|
|
@@ -6430,6 +6426,10 @@ var manifest_default = {
|
|
|
6430
6426
|
source: "generated",
|
|
6431
6427
|
file: "generated/sw_model_29.svg"
|
|
6432
6428
|
},
|
|
6429
|
+
tactical_knife: {
|
|
6430
|
+
source: "generated",
|
|
6431
|
+
file: "generated/tactical_knife.svg"
|
|
6432
|
+
},
|
|
6433
6433
|
taurus_82: {
|
|
6434
6434
|
source: "generated",
|
|
6435
6435
|
file: "generated/taurus_82.svg"
|
|
@@ -6528,7 +6528,7 @@ var explosivePart = (def, shape) => ({
|
|
|
6528
6528
|
shape: shape.shape,
|
|
6529
6529
|
position: shape.position,
|
|
6530
6530
|
...SHELL,
|
|
6531
|
-
explodes: { energy: def.energy, radius: def.injuryRadius, ...def.chain ? { chain: { ...def.chain } } : {} }
|
|
6531
|
+
explodes: { energy: def.energy, radius: def.injuryRadius, effect: def.id, ...def.chain ? { chain: { ...def.chain } } : {} }
|
|
6532
6532
|
});
|
|
6533
6533
|
var meshOf = (THREE, shape) => {
|
|
6534
6534
|
const geometry = shape.shape.kind === "cylinder" ? new THREE.CylinderGeometry(shape.shape.radius, shape.shape.radius, shape.shape.height, 16) : shape.shape.kind === "box" ? new THREE.BoxGeometry(...shape.shape.size) : new THREE.SphereGeometry(0.2);
|
|
@@ -6556,6 +6556,51 @@ var worldExplosiveItem = (def, name) => {
|
|
|
6556
6556
|
};
|
|
6557
6557
|
};
|
|
6558
6558
|
|
|
6559
|
+
// src/data/world-effects.json
|
|
6560
|
+
var world_effects_default = {
|
|
6561
|
+
pistol: { muzzle: "muzzle_glock", casing: "casing_brass" },
|
|
6562
|
+
tiny: { muzzle: "muzzle_glock", casing: "casing_brass" },
|
|
6563
|
+
rifle: { muzzle: "muzzle_ak", casing: "casing_brass" },
|
|
6564
|
+
shell: { muzzle: "muzzle_r870", casing: "casing_shell" },
|
|
6565
|
+
big: { muzzle: "muzzle_barrett", casing: "casing_50" }
|
|
6566
|
+
};
|
|
6567
|
+
|
|
6568
|
+
// src/world-effects.ts
|
|
6569
|
+
var WORLD_EFFECTS = world_effects_default;
|
|
6570
|
+
var PORT_BACK = 0.35;
|
|
6571
|
+
var PORT_RIGHT = 0.04;
|
|
6572
|
+
function createWorldEffects(options) {
|
|
6573
|
+
const ids = options.ids ?? WORLD_EFFECTS;
|
|
6574
|
+
const caseTypeOf = options.caseTypeOf ?? ((weapon) => {
|
|
6575
|
+
const def = options.arsenal.weapons.get(weapon);
|
|
6576
|
+
return def && def.action.kind === "firearm" ? options.arsenal.calibers.get(def.action.caliber)?.caseType : void 0;
|
|
6577
|
+
});
|
|
6578
|
+
let counter = 0;
|
|
6579
|
+
return {
|
|
6580
|
+
/** Plays what the event asks for and answers how many effects started. */
|
|
6581
|
+
handle(event, sink) {
|
|
6582
|
+
if (!sink || event.type !== "shot" || !event.origin) return 0;
|
|
6583
|
+
const caseType = caseTypeOf(event.weapon) ?? "rifle";
|
|
6584
|
+
const entry = ids[caseType];
|
|
6585
|
+
if (!entry) return 0;
|
|
6586
|
+
const direction = event.direction ?? [0, 0, -1];
|
|
6587
|
+
const seed = ++counter;
|
|
6588
|
+
let started = 0;
|
|
6589
|
+
for (let shot = 0; shot < Math.max(1, event.rounds ?? 1); shot++) {
|
|
6590
|
+
if (sink.play({ effect: entry.muzzle, point: event.origin, direction, seed: seed * 8 + shot }) !== null) started++;
|
|
6591
|
+
}
|
|
6592
|
+
const side = [direction[2], 0, -direction[0]];
|
|
6593
|
+
const port = [
|
|
6594
|
+
event.origin[0] - direction[0] * PORT_BACK + side[0] * PORT_RIGHT,
|
|
6595
|
+
event.origin[1] - direction[1] * PORT_BACK,
|
|
6596
|
+
event.origin[2] - direction[2] * PORT_BACK + side[2] * PORT_RIGHT
|
|
6597
|
+
];
|
|
6598
|
+
if (sink.play({ effect: entry.casing, point: port, direction, seed: seed * 8 + 7 }) !== null) started++;
|
|
6599
|
+
return started;
|
|
6600
|
+
}
|
|
6601
|
+
};
|
|
6602
|
+
}
|
|
6603
|
+
|
|
6559
6604
|
// src/area.ts
|
|
6560
6605
|
var WEAPON_ITEM_PREFIX = "weapon_";
|
|
6561
6606
|
var COUNTER_ITEM_ID = "counter_weapons";
|
|
@@ -6832,7 +6877,9 @@ function createWeaponsTestModule(options = {}) {
|
|
|
6832
6877
|
} else if (change.kind === "control" && change.id === "sound_distance" && typeof change.value === "number") soundDistance = change.value;
|
|
6833
6878
|
else if (change.kind === "control" && change.id === "fuse_length" && typeof change.value === "number") lent.configureTool?.({ fuse_length: String(change.value) });
|
|
6834
6879
|
});
|
|
6880
|
+
const worldEffects = createWorldEffects({ arsenal });
|
|
6835
6881
|
const offEvents = lent.on((event) => {
|
|
6882
|
+
worldEffects.handle(event, lent.effects);
|
|
6836
6883
|
if (event.type === "explosion") {
|
|
6837
6884
|
const away = Math.hypot(event.point[0] - camera.position.x, event.point[1] - camera.position.y, event.point[2] - camera.position.z);
|
|
6838
6885
|
audio?.play("explosion", Math.min(1, EXPLOSION_VOLUME_BASE + event.radius * EXPLOSION_VOLUME_PER_METRE), away);
|
|
@@ -6872,6 +6919,7 @@ export {
|
|
|
6872
6919
|
MOUNTED_M134_ITEM_ID,
|
|
6873
6920
|
WEAPON_ITEM_PREFIX,
|
|
6874
6921
|
WEAPON_THUMBNAILS,
|
|
6922
|
+
WORLD_EFFECTS,
|
|
6875
6923
|
WORLD_EXPLOSIVE_IDS,
|
|
6876
6924
|
WORLD_EXPLOSIVE_PREFIX,
|
|
6877
6925
|
applyCondition,
|
|
@@ -6887,6 +6935,7 @@ export {
|
|
|
6887
6935
|
createWeaponAudio,
|
|
6888
6936
|
createWeaponFx,
|
|
6889
6937
|
createWeaponsTestModule,
|
|
6938
|
+
createWorldEffects,
|
|
6890
6939
|
deriveFrames,
|
|
6891
6940
|
fitAttachmentModels,
|
|
6892
6941
|
hasWeaponModel,
|