@adatechnology/game-vehicles-three 0.3.0 → 0.3.2
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/dist/index.global.js +103 -71
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
package/dist/index.global.js
CHANGED
|
@@ -41,6 +41,84 @@ var GameVehiclesThree = (() => {
|
|
|
41
41
|
loadVehiclesTestModule: () => loadVehiclesTestModule
|
|
42
42
|
});
|
|
43
43
|
|
|
44
|
+
// ../game-contracts/dist/index.js
|
|
45
|
+
var DEFAULT_IGNITION_RULES = {
|
|
46
|
+
fillCurve: [
|
|
47
|
+
[0, 0.6],
|
|
48
|
+
[0.1, 1],
|
|
49
|
+
[0.35, 0.6],
|
|
50
|
+
[0.65, 0.3],
|
|
51
|
+
[0.9, 0.15],
|
|
52
|
+
[1, 0.12]
|
|
53
|
+
],
|
|
54
|
+
flameFillInfluence: 0.5,
|
|
55
|
+
flameDefaults: { incendiary: 0.7, tracer: 0.2 },
|
|
56
|
+
sparkTarget: { steel: 1, iron: 1, aluminium: 0.25 },
|
|
57
|
+
sparkMetalDefault: 0.5,
|
|
58
|
+
sparkFluid: { diesel: 0.15 },
|
|
59
|
+
fireNear: { radius: 1.5, chancePerSecond: 0.5 }
|
|
60
|
+
};
|
|
61
|
+
var resolveIgnitionRules = (rules) => ({
|
|
62
|
+
...DEFAULT_IGNITION_RULES,
|
|
63
|
+
...rules,
|
|
64
|
+
flameDefaults: { ...DEFAULT_IGNITION_RULES.flameDefaults, ...rules?.flameDefaults },
|
|
65
|
+
sparkTarget: { ...DEFAULT_IGNITION_RULES.sparkTarget, ...rules?.sparkTarget },
|
|
66
|
+
sparkFluid: { ...DEFAULT_IGNITION_RULES.sparkFluid, ...rules?.sparkFluid },
|
|
67
|
+
fireNear: { ...DEFAULT_IGNITION_RULES.fireNear, ...rules?.fireNear }
|
|
68
|
+
});
|
|
69
|
+
var fillFactor = (fill2, curve = DEFAULT_IGNITION_RULES.fillCurve) => {
|
|
70
|
+
if (curve.length === 0) return 1;
|
|
71
|
+
const f = Math.min(1, Math.max(0, fill2));
|
|
72
|
+
if (f <= curve[0][0]) return curve[0][1];
|
|
73
|
+
for (let i = 1; i < curve.length; i++) {
|
|
74
|
+
const [x1, y1] = curve[i];
|
|
75
|
+
const [x0, y0] = curve[i - 1];
|
|
76
|
+
if (f <= x1) return x1 === x0 ? y1 : y0 + (y1 - y0) * (f - x0) / (x1 - x0);
|
|
77
|
+
}
|
|
78
|
+
return curve[curve.length - 1][1];
|
|
79
|
+
};
|
|
80
|
+
var sparkTargetFactor = (materialId, metal, rules = DEFAULT_IGNITION_RULES) => !metal ? 0 : rules.sparkTarget[materialId] ?? rules.sparkMetalDefault;
|
|
81
|
+
var ignitionChance = (hit, target, rules = DEFAULT_IGNITION_RULES) => {
|
|
82
|
+
const k = fillFactor(target.fill, rules.fillCurve);
|
|
83
|
+
const spark = (hit.ignition?.spark ?? 0) * target.sparkTarget * (target.fluid === void 0 ? 1 : rules.sparkFluid[target.fluid] ?? 1) * k;
|
|
84
|
+
const flameBase = hit.ignition?.flame ?? Math.max(hit.incendiary ? rules.flameDefaults.incendiary : 0, hit.tracer ? rules.flameDefaults.tracer : 0);
|
|
85
|
+
const flame = flameBase * (1 - rules.flameFillInfluence * (1 - k));
|
|
86
|
+
return 1 - (1 - Math.min(1, Math.max(0, spark))) * (1 - Math.min(1, Math.max(0, flame)));
|
|
87
|
+
};
|
|
88
|
+
var UNSAFE_KEYS = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
|
|
89
|
+
var isPlainObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value) && Object.getPrototypeOf(value) === Object.prototype;
|
|
90
|
+
var deepMerge = (base, patch) => {
|
|
91
|
+
if (!patch) return base;
|
|
92
|
+
const result = { ...base };
|
|
93
|
+
for (const [key, value] of Object.entries(patch)) {
|
|
94
|
+
if (value === void 0 || UNSAFE_KEYS.has(key)) continue;
|
|
95
|
+
const current = result[key];
|
|
96
|
+
result[key] = isPlainObject(current) && isPlainObject(value) ? deepMerge(current, value) : value;
|
|
97
|
+
}
|
|
98
|
+
return result;
|
|
99
|
+
};
|
|
100
|
+
var mergeById = (shipped, extra) => {
|
|
101
|
+
const entries = /* @__PURE__ */ new Map();
|
|
102
|
+
for (const entry of [...shipped, ...extra ?? []]) entries.set(entry.id, entry);
|
|
103
|
+
return entries;
|
|
104
|
+
};
|
|
105
|
+
var applyPatches = (entries, patches) => {
|
|
106
|
+
for (const [id, patch] of Object.entries(patches ?? {})) {
|
|
107
|
+
const entry = entries.get(id);
|
|
108
|
+
if (entry) entries.set(id, deepMerge(entry, patch));
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
var removeIds = (entries, ids) => {
|
|
112
|
+
for (const id of ids ?? []) entries.delete(id);
|
|
113
|
+
};
|
|
114
|
+
var KIT_ORIGIN_KEY = "kitOrigin";
|
|
115
|
+
function markKitOrigin(object2, origin) {
|
|
116
|
+
const node = object2;
|
|
117
|
+
node.userData = node.userData ?? {};
|
|
118
|
+
node.userData[KIT_ORIGIN_KEY] = { ...origin };
|
|
119
|
+
return object2;
|
|
120
|
+
}
|
|
121
|
+
|
|
44
122
|
// ../game-vehicles-fleet/dist/index.js
|
|
45
123
|
var military = [
|
|
46
124
|
"light_4x4",
|
|
@@ -27826,6 +27904,7 @@ var GameVehiclesThree = (() => {
|
|
|
27826
27904
|
const pivotMatrix = new THREE.Matrix4().makeTranslation(-cx, -bounds.min.y, -cz).multiply(rotation);
|
|
27827
27905
|
const group = new THREE.Group();
|
|
27828
27906
|
group.name = `vehicle:${key}`;
|
|
27907
|
+
markKitOrigin(group, { owner: "game-vehicles-three", kind: "vehicle", id: key });
|
|
27829
27908
|
const damageables = kit.damageables(c, pivotMatrix);
|
|
27830
27909
|
let pruned = 0;
|
|
27831
27910
|
if (quality === "high") {
|
|
@@ -29413,77 +29492,6 @@ var GameVehiclesThree = (() => {
|
|
|
29413
29492
|
return result;
|
|
29414
29493
|
}
|
|
29415
29494
|
|
|
29416
|
-
// ../game-contracts/dist/index.js
|
|
29417
|
-
var DEFAULT_IGNITION_RULES = {
|
|
29418
|
-
fillCurve: [
|
|
29419
|
-
[0, 0.6],
|
|
29420
|
-
[0.1, 1],
|
|
29421
|
-
[0.35, 0.6],
|
|
29422
|
-
[0.65, 0.3],
|
|
29423
|
-
[0.9, 0.15],
|
|
29424
|
-
[1, 0.12]
|
|
29425
|
-
],
|
|
29426
|
-
flameFillInfluence: 0.5,
|
|
29427
|
-
flameDefaults: { incendiary: 0.7, tracer: 0.2 },
|
|
29428
|
-
sparkTarget: { steel: 1, iron: 1, aluminium: 0.25 },
|
|
29429
|
-
sparkMetalDefault: 0.5,
|
|
29430
|
-
sparkFluid: { diesel: 0.15 },
|
|
29431
|
-
fireNear: { radius: 1.5, chancePerSecond: 0.5 }
|
|
29432
|
-
};
|
|
29433
|
-
var resolveIgnitionRules = (rules) => ({
|
|
29434
|
-
...DEFAULT_IGNITION_RULES,
|
|
29435
|
-
...rules,
|
|
29436
|
-
flameDefaults: { ...DEFAULT_IGNITION_RULES.flameDefaults, ...rules?.flameDefaults },
|
|
29437
|
-
sparkTarget: { ...DEFAULT_IGNITION_RULES.sparkTarget, ...rules?.sparkTarget },
|
|
29438
|
-
sparkFluid: { ...DEFAULT_IGNITION_RULES.sparkFluid, ...rules?.sparkFluid },
|
|
29439
|
-
fireNear: { ...DEFAULT_IGNITION_RULES.fireNear, ...rules?.fireNear }
|
|
29440
|
-
});
|
|
29441
|
-
var fillFactor = (fill2, curve = DEFAULT_IGNITION_RULES.fillCurve) => {
|
|
29442
|
-
if (curve.length === 0) return 1;
|
|
29443
|
-
const f = Math.min(1, Math.max(0, fill2));
|
|
29444
|
-
if (f <= curve[0][0]) return curve[0][1];
|
|
29445
|
-
for (let i = 1; i < curve.length; i++) {
|
|
29446
|
-
const [x1, y1] = curve[i];
|
|
29447
|
-
const [x0, y0] = curve[i - 1];
|
|
29448
|
-
if (f <= x1) return x1 === x0 ? y1 : y0 + (y1 - y0) * (f - x0) / (x1 - x0);
|
|
29449
|
-
}
|
|
29450
|
-
return curve[curve.length - 1][1];
|
|
29451
|
-
};
|
|
29452
|
-
var sparkTargetFactor = (materialId, metal, rules = DEFAULT_IGNITION_RULES) => !metal ? 0 : rules.sparkTarget[materialId] ?? rules.sparkMetalDefault;
|
|
29453
|
-
var ignitionChance = (hit, target, rules = DEFAULT_IGNITION_RULES) => {
|
|
29454
|
-
const k = fillFactor(target.fill, rules.fillCurve);
|
|
29455
|
-
const spark = (hit.ignition?.spark ?? 0) * target.sparkTarget * (target.fluid === void 0 ? 1 : rules.sparkFluid[target.fluid] ?? 1) * k;
|
|
29456
|
-
const flameBase = hit.ignition?.flame ?? Math.max(hit.incendiary ? rules.flameDefaults.incendiary : 0, hit.tracer ? rules.flameDefaults.tracer : 0);
|
|
29457
|
-
const flame = flameBase * (1 - rules.flameFillInfluence * (1 - k));
|
|
29458
|
-
return 1 - (1 - Math.min(1, Math.max(0, spark))) * (1 - Math.min(1, Math.max(0, flame)));
|
|
29459
|
-
};
|
|
29460
|
-
var UNSAFE_KEYS = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
|
|
29461
|
-
var isPlainObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value) && Object.getPrototypeOf(value) === Object.prototype;
|
|
29462
|
-
var deepMerge = (base, patch) => {
|
|
29463
|
-
if (!patch) return base;
|
|
29464
|
-
const result = { ...base };
|
|
29465
|
-
for (const [key, value] of Object.entries(patch)) {
|
|
29466
|
-
if (value === void 0 || UNSAFE_KEYS.has(key)) continue;
|
|
29467
|
-
const current = result[key];
|
|
29468
|
-
result[key] = isPlainObject(current) && isPlainObject(value) ? deepMerge(current, value) : value;
|
|
29469
|
-
}
|
|
29470
|
-
return result;
|
|
29471
|
-
};
|
|
29472
|
-
var mergeById = (shipped, extra) => {
|
|
29473
|
-
const entries = /* @__PURE__ */ new Map();
|
|
29474
|
-
for (const entry of [...shipped, ...extra ?? []]) entries.set(entry.id, entry);
|
|
29475
|
-
return entries;
|
|
29476
|
-
};
|
|
29477
|
-
var applyPatches = (entries, patches) => {
|
|
29478
|
-
for (const [id, patch] of Object.entries(patches ?? {})) {
|
|
29479
|
-
const entry = entries.get(id);
|
|
29480
|
-
if (entry) entries.set(id, deepMerge(entry, patch));
|
|
29481
|
-
}
|
|
29482
|
-
};
|
|
29483
|
-
var removeIds = (entries, ids) => {
|
|
29484
|
-
for (const id of ids ?? []) entries.delete(id);
|
|
29485
|
-
};
|
|
29486
|
-
|
|
29487
29495
|
// ../game-vehicles/dist/index.js
|
|
29488
29496
|
var __defProp2 = Object.defineProperty;
|
|
29489
29497
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
@@ -30879,6 +30887,7 @@ var GameVehiclesThree = (() => {
|
|
|
30879
30887
|
this.effects = new THREE.Group();
|
|
30880
30888
|
this.root.add(this.vehicle);
|
|
30881
30889
|
this.root.add(this.effects);
|
|
30890
|
+
markKitOrigin(this.root, { owner: "game-vehicles", kind: "vehicle" });
|
|
30882
30891
|
this.state = state;
|
|
30883
30892
|
this.glass = [];
|
|
30884
30893
|
this.quads = [];
|
|
@@ -42829,6 +42838,7 @@ var GameVehiclesThree = (() => {
|
|
|
42829
42838
|
var LANE = { z: 11, from: -12, wall: 13 };
|
|
42830
42839
|
var MATERIAL_COLOURS = { metal: 13421772, glass: 4500223, rubber: 16750848, fuel: 16724736 };
|
|
42831
42840
|
var ZONE_COLOURS = { door: 5627221, hood: 14540083, lid: 14522675, bumper: 14505437, glass: 4500223, light: 16777215, wheel: 16742195 };
|
|
42841
|
+
var BODY_HEIGHT = 1.7;
|
|
42832
42842
|
function createVehiclesTestModule(options = {}) {
|
|
42833
42843
|
const locale = options.locale ?? "pt-BR";
|
|
42834
42844
|
const text = TEXT[locale] ?? TEXT["pt-BR"];
|
|
@@ -42960,6 +42970,7 @@ var GameVehiclesThree = (() => {
|
|
|
42960
42970
|
entry.root.updateMatrixWorld(true);
|
|
42961
42971
|
const inverse = new three.Matrix4().copy(entry.root.matrixWorld).invert();
|
|
42962
42972
|
const bounds = new three.Box3();
|
|
42973
|
+
const low = new three.Box3();
|
|
42963
42974
|
const piece = new three.Box3();
|
|
42964
42975
|
const matrix = new three.Matrix4();
|
|
42965
42976
|
entry.root.traverse((mesh2) => {
|
|
@@ -42969,9 +42980,11 @@ var GameVehiclesThree = (() => {
|
|
|
42969
42980
|
mesh2.geometry.computeBoundingBox();
|
|
42970
42981
|
piece.copy(mesh2.geometry.boundingBox).applyMatrix4(matrix.multiplyMatrices(inverse, mesh2.matrixWorld));
|
|
42971
42982
|
bounds.union(piece);
|
|
42983
|
+
if (piece.min.y < BODY_HEIGHT) low.union(piece);
|
|
42972
42984
|
});
|
|
42973
42985
|
const size = bounds.getSize(new three.Vector3());
|
|
42974
42986
|
entry.size = { length: size.z, width: size.x, height: size.y };
|
|
42987
|
+
if (!low.isEmpty()) entry.footprint = { minX: low.min.x, maxX: low.max.x, minZ: low.min.z, maxZ: low.max.z };
|
|
42975
42988
|
return entry.size;
|
|
42976
42989
|
};
|
|
42977
42990
|
const clearHelpers = () => {
|
|
@@ -43021,6 +43034,23 @@ var GameVehiclesThree = (() => {
|
|
|
43021
43034
|
}
|
|
43022
43035
|
helpersShown = boxKey();
|
|
43023
43036
|
};
|
|
43037
|
+
const local = { m: null, v: null };
|
|
43038
|
+
const inside = (root, fp, x, z, radius) => {
|
|
43039
|
+
if (!three) return false;
|
|
43040
|
+
local.m ?? (local.m = new three.Matrix4());
|
|
43041
|
+
local.v ?? (local.v = new three.Vector3());
|
|
43042
|
+
root.updateWorldMatrix(true, false);
|
|
43043
|
+
const p = local.v.set(x, 0, z).applyMatrix4(local.m.copy(root.matrixWorld).invert());
|
|
43044
|
+
return p.x > fp.minX - radius && p.x < fp.maxX + radius && p.z > fp.minZ - radius && p.z < fp.maxZ + radius;
|
|
43045
|
+
};
|
|
43046
|
+
const blocked = (x, z, radius) => {
|
|
43047
|
+
for (const entry of placed.values()) if (entry.root.parent && entry.footprint && inside(entry.root, entry.footprint, x, z, radius)) return true;
|
|
43048
|
+
if (lane) {
|
|
43049
|
+
const half = { l: lane.car.length / 2, w: lane.car.width / 2 };
|
|
43050
|
+
if (inside(lane.group, { minX: -half.w, maxX: half.w, minZ: -half.l, maxZ: half.l }, x, z, radius)) return true;
|
|
43051
|
+
}
|
|
43052
|
+
return false;
|
|
43053
|
+
};
|
|
43024
43054
|
const clearLane = () => {
|
|
43025
43055
|
stopEngine();
|
|
43026
43056
|
if (!lane) return;
|
|
@@ -43241,10 +43271,12 @@ var GameVehiclesThree = (() => {
|
|
|
43241
43271
|
three = lent.THREE;
|
|
43242
43272
|
const stopChange = lent.bench?.onChange(onChange);
|
|
43243
43273
|
const stopFrame = lent.onFrame(frame);
|
|
43274
|
+
const stopBlocker = lent.addBlocker?.(blocked);
|
|
43244
43275
|
lent.audio?.register?.(LIBRARY_BANK);
|
|
43245
43276
|
return () => {
|
|
43246
43277
|
stopChange?.();
|
|
43247
43278
|
stopFrame();
|
|
43279
|
+
stopBlocker?.();
|
|
43248
43280
|
clearHelpers();
|
|
43249
43281
|
clearLane();
|
|
43250
43282
|
host = null;
|