@aura3d/physics 1.0.6
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/README.md +26 -0
- package/dist/CharacterController.d.ts +52 -0
- package/dist/CharacterController.d.ts.map +1 -0
- package/dist/CharacterController.js +146 -0
- package/dist/CharacterController.js.map +1 -0
- package/dist/ClothFixtures.d.ts +87 -0
- package/dist/ClothFixtures.d.ts.map +1 -0
- package/dist/ClothFixtures.js +264 -0
- package/dist/ClothFixtures.js.map +1 -0
- package/dist/Collider.d.ts +27 -0
- package/dist/Collider.d.ts.map +1 -0
- package/dist/Collider.js +45 -0
- package/dist/Collider.js.map +1 -0
- package/dist/CollisionEvents.d.ts +26 -0
- package/dist/CollisionEvents.d.ts.map +1 -0
- package/dist/CollisionEvents.js +46 -0
- package/dist/CollisionEvents.js.map +1 -0
- package/dist/CollisionVolumes.d.ts +57 -0
- package/dist/CollisionVolumes.d.ts.map +1 -0
- package/dist/CollisionVolumes.js +159 -0
- package/dist/CollisionVolumes.js.map +1 -0
- package/dist/Constraint.d.ts +31 -0
- package/dist/Constraint.d.ts.map +1 -0
- package/dist/Constraint.js +103 -0
- package/dist/Constraint.js.map +1 -0
- package/dist/Constraints.d.ts +2 -0
- package/dist/Constraints.d.ts.map +1 -0
- package/dist/Constraints.js +2 -0
- package/dist/Constraints.js.map +1 -0
- package/dist/Crowd.d.ts +64 -0
- package/dist/Crowd.d.ts.map +1 -0
- package/dist/Crowd.js +209 -0
- package/dist/Crowd.js.map +1 -0
- package/dist/ECSPhysicsBridge.d.ts +17 -0
- package/dist/ECSPhysicsBridge.d.ts.map +1 -0
- package/dist/ECSPhysicsBridge.js +37 -0
- package/dist/ECSPhysicsBridge.js.map +1 -0
- package/dist/FireSmokeFixtures.d.ts +103 -0
- package/dist/FireSmokeFixtures.d.ts.map +1 -0
- package/dist/FireSmokeFixtures.js +271 -0
- package/dist/FireSmokeFixtures.js.map +1 -0
- package/dist/FluidFixtures.d.ts +75 -0
- package/dist/FluidFixtures.d.ts.map +1 -0
- package/dist/FluidFixtures.js +219 -0
- package/dist/FluidFixtures.js.map +1 -0
- package/dist/FractureFixtures.d.ts +68 -0
- package/dist/FractureFixtures.d.ts.map +1 -0
- package/dist/FractureFixtures.js +199 -0
- package/dist/FractureFixtures.js.map +1 -0
- package/dist/HitboxWorld.d.ts +250 -0
- package/dist/HitboxWorld.d.ts.map +1 -0
- package/dist/HitboxWorld.js +771 -0
- package/dist/HitboxWorld.js.map +1 -0
- package/dist/KinematicBody.d.ts +157 -0
- package/dist/KinematicBody.d.ts.map +1 -0
- package/dist/KinematicBody.js +405 -0
- package/dist/KinematicBody.js.map +1 -0
- package/dist/KinematicWorld.d.ts +58 -0
- package/dist/KinematicWorld.d.ts.map +1 -0
- package/dist/KinematicWorld.js +246 -0
- package/dist/KinematicWorld.js.map +1 -0
- package/dist/Navigation.d.ts +67 -0
- package/dist/Navigation.d.ts.map +1 -0
- package/dist/Navigation.js +261 -0
- package/dist/Navigation.js.map +1 -0
- package/dist/PhysicsDebugDraw.d.ts +11 -0
- package/dist/PhysicsDebugDraw.d.ts.map +1 -0
- package/dist/PhysicsDebugDraw.js +64 -0
- package/dist/PhysicsDebugDraw.js.map +1 -0
- package/dist/PhysicsSandboxFixtures.d.ts +53 -0
- package/dist/PhysicsSandboxFixtures.d.ts.map +1 -0
- package/dist/PhysicsSandboxFixtures.js +280 -0
- package/dist/PhysicsSandboxFixtures.js.map +1 -0
- package/dist/PhysicsStepper.d.ts +15 -0
- package/dist/PhysicsStepper.d.ts.map +1 -0
- package/dist/PhysicsStepper.js +37 -0
- package/dist/PhysicsStepper.js.map +1 -0
- package/dist/PhysicsWorld.d.ts +101 -0
- package/dist/PhysicsWorld.d.ts.map +1 -0
- package/dist/PhysicsWorld.js +868 -0
- package/dist/PhysicsWorld.js.map +1 -0
- package/dist/PlatformerFixtures.d.ts +70 -0
- package/dist/PlatformerFixtures.d.ts.map +1 -0
- package/dist/PlatformerFixtures.js +120 -0
- package/dist/PlatformerFixtures.js.map +1 -0
- package/dist/Raycast.d.ts +23 -0
- package/dist/Raycast.d.ts.map +1 -0
- package/dist/Raycast.js +271 -0
- package/dist/Raycast.js.map +1 -0
- package/dist/RigidBody.d.ts +69 -0
- package/dist/RigidBody.d.ts.map +1 -0
- package/dist/RigidBody.js +255 -0
- package/dist/RigidBody.js.map +1 -0
- package/dist/ScenePhysicsBridge.d.ts +42 -0
- package/dist/ScenePhysicsBridge.d.ts.map +1 -0
- package/dist/ScenePhysicsBridge.js +168 -0
- package/dist/ScenePhysicsBridge.js.map +1 -0
- package/dist/Shape.d.ts +50 -0
- package/dist/Shape.d.ts.map +1 -0
- package/dist/Shape.js +128 -0
- package/dist/Shape.js.map +1 -0
- package/dist/SoftBodyFixtures.d.ts +70 -0
- package/dist/SoftBodyFixtures.d.ts.map +1 -0
- package/dist/SoftBodyFixtures.js +272 -0
- package/dist/SoftBodyFixtures.js.map +1 -0
- package/dist/Steering.d.ts +161 -0
- package/dist/Steering.d.ts.map +1 -0
- package/dist/Steering.js +347 -0
- package/dist/Steering.js.map +1 -0
- package/dist/VehicleDynamics.d.ts +152 -0
- package/dist/VehicleDynamics.d.ts.map +1 -0
- package/dist/VehicleDynamics.js +335 -0
- package/dist/VehicleDynamics.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/package.json +17 -0
- package/src/CharacterController.ts +184 -0
- package/src/ClothFixtures.ts +359 -0
- package/src/Collider.ts +67 -0
- package/src/CollisionEvents.ts +70 -0
- package/src/CollisionVolumes.ts +218 -0
- package/src/Constraint.ts +120 -0
- package/src/Constraints.ts +1 -0
- package/src/Crowd.ts +283 -0
- package/src/ECSPhysicsBridge.ts +53 -0
- package/src/FireSmokeFixtures.ts +382 -0
- package/src/FluidFixtures.ts +301 -0
- package/src/FractureFixtures.ts +277 -0
- package/src/HitboxWorld.ts +1179 -0
- package/src/KinematicBody.ts +553 -0
- package/src/KinematicWorld.ts +310 -0
- package/src/Navigation.ts +321 -0
- package/src/PhysicsDebugDraw.ts +71 -0
- package/src/PhysicsSandboxFixtures.ts +394 -0
- package/src/PhysicsStepper.ts +47 -0
- package/src/PhysicsWorld.ts +986 -0
- package/src/PlatformerFixtures.ts +205 -0
- package/src/Raycast.ts +315 -0
- package/src/RigidBody.ts +311 -0
- package/src/ScenePhysicsBridge.ts +207 -0
- package/src/Shape.ts +182 -0
- package/src/SoftBodyFixtures.ts +363 -0
- package/src/Steering.ts +531 -0
- package/src/VehicleDynamics.ts +524 -0
- package/src/index.ts +28 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export interface FractureFixtureOptions {
|
|
2
|
+
readonly seed?: number;
|
|
3
|
+
readonly fragmentCount?: number;
|
|
4
|
+
readonly impactStrength?: number;
|
|
5
|
+
}
|
|
6
|
+
export interface FractureFragmentSample {
|
|
7
|
+
readonly id: number;
|
|
8
|
+
readonly site: readonly [number, number, number];
|
|
9
|
+
readonly centerOfMass: readonly [number, number, number];
|
|
10
|
+
readonly mass: number;
|
|
11
|
+
readonly volume: number;
|
|
12
|
+
readonly velocity: readonly [number, number, number];
|
|
13
|
+
readonly angularVelocity: readonly [number, number, number];
|
|
14
|
+
readonly neighborCount: number;
|
|
15
|
+
}
|
|
16
|
+
export interface FractureFixture {
|
|
17
|
+
readonly id: "external-parity-old-branch-fracture-fixture";
|
|
18
|
+
readonly source: "origin-master-voronoi-hierarchical-fracture-adapted";
|
|
19
|
+
readonly sourceFiles: readonly [
|
|
20
|
+
"origin/master:src/simulation/fracture/VoronoiFractureSystem.ts",
|
|
21
|
+
"origin/master:src/simulation/fracture/HierarchicalFractureSystem.ts",
|
|
22
|
+
"origin/master:src/simulation/fracture/GeometryClipper.ts",
|
|
23
|
+
"origin/master:src/simulation/fracture/VoronoiMath.ts"
|
|
24
|
+
];
|
|
25
|
+
readonly config: {
|
|
26
|
+
readonly bounds: {
|
|
27
|
+
readonly min: readonly [number, number, number];
|
|
28
|
+
readonly max: readonly [number, number, number];
|
|
29
|
+
};
|
|
30
|
+
readonly requestedFragments: number;
|
|
31
|
+
readonly density: number;
|
|
32
|
+
readonly impactPoint: readonly [number, number, number];
|
|
33
|
+
readonly impulseStrength: number;
|
|
34
|
+
readonly interiorFaces: boolean;
|
|
35
|
+
readonly progressiveDamage: boolean;
|
|
36
|
+
};
|
|
37
|
+
readonly voronoi: {
|
|
38
|
+
readonly siteCount: number;
|
|
39
|
+
readonly radialSiteCount: number;
|
|
40
|
+
readonly averageSiteDistance: number;
|
|
41
|
+
readonly maxSiteDistance: number;
|
|
42
|
+
readonly neighborPairs: number;
|
|
43
|
+
readonly crackGraphEdges: number;
|
|
44
|
+
};
|
|
45
|
+
readonly fragments: {
|
|
46
|
+
readonly fragmentCount: number;
|
|
47
|
+
readonly totalMass: number;
|
|
48
|
+
readonly minMass: number;
|
|
49
|
+
readonly maxMass: number;
|
|
50
|
+
readonly totalVolume: number;
|
|
51
|
+
readonly interiorFaceEstimate: number;
|
|
52
|
+
readonly activeAfterImpact: number;
|
|
53
|
+
readonly samples: readonly FractureFragmentSample[];
|
|
54
|
+
};
|
|
55
|
+
readonly hierarchy: {
|
|
56
|
+
readonly maxDepth: number;
|
|
57
|
+
readonly nodeCount: number;
|
|
58
|
+
readonly rootDamage: number;
|
|
59
|
+
readonly childDamageThreshold: number;
|
|
60
|
+
readonly activatedChildren: number;
|
|
61
|
+
readonly residualInactiveChildren: number;
|
|
62
|
+
};
|
|
63
|
+
readonly blockedClaims: readonly string[];
|
|
64
|
+
readonly hash: string;
|
|
65
|
+
readonly claimBoundary: string;
|
|
66
|
+
}
|
|
67
|
+
export declare function sampleFractureFixture(options?: FractureFixtureOptions): FractureFixture;
|
|
68
|
+
//# sourceMappingURL=FractureFixtures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FractureFixtures.d.ts","sourceRoot":"","sources":["../../../../packages/physics/src/FractureFixtures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
const sourceFiles = [
|
|
2
|
+
"origin/master:src/simulation/fracture/VoronoiFractureSystem.ts",
|
|
3
|
+
"origin/master:src/simulation/fracture/HierarchicalFractureSystem.ts",
|
|
4
|
+
"origin/master:src/simulation/fracture/GeometryClipper.ts",
|
|
5
|
+
"origin/master:src/simulation/fracture/VoronoiMath.ts"
|
|
6
|
+
];
|
|
7
|
+
const blockedClaims = [
|
|
8
|
+
"runtime convex mesh clipping",
|
|
9
|
+
"interior geometry generation parity",
|
|
10
|
+
"hierarchical runtime remeshing",
|
|
11
|
+
"rigid-body fragment simulation parity",
|
|
12
|
+
"destructible asset authoring workflow",
|
|
13
|
+
"Unity destruction workflow parity",
|
|
14
|
+
"Unreal Chaos destruction parity"
|
|
15
|
+
];
|
|
16
|
+
export function sampleFractureFixture(options = {}) {
|
|
17
|
+
const seed = integer(options.seed ?? 0xf24c7, "seed");
|
|
18
|
+
const fragmentCount = integerInRange(options.fragmentCount ?? 18, "fragmentCount", 4, 96);
|
|
19
|
+
const impactStrength = finitePositive(options.impactStrength ?? 82, "impactStrength");
|
|
20
|
+
const boundsMin = [-0.6, -0.42, -0.36];
|
|
21
|
+
const boundsMax = [0.6, 0.42, 0.36];
|
|
22
|
+
const impactPoint = [-0.18, 0.06, 0.08];
|
|
23
|
+
const density = 2350;
|
|
24
|
+
const boundsVolume = (boundsMax[0] - boundsMin[0]) * (boundsMax[1] - boundsMin[1]) * (boundsMax[2] - boundsMin[2]);
|
|
25
|
+
const sites = generateRadialSites(seed, fragmentCount, impactPoint, 0.68);
|
|
26
|
+
const weights = sites.map((site, index) => 0.75 + hash01(seed, index + 41) * 0.7 + Math.max(0, 0.6 - distance(site, impactPoint)) * 0.4);
|
|
27
|
+
const weightSum = weights.reduce((sum, weight) => sum + weight, 0);
|
|
28
|
+
const fragments = [];
|
|
29
|
+
let totalVolume = 0;
|
|
30
|
+
let totalMass = 0;
|
|
31
|
+
let minMass = Number.POSITIVE_INFINITY;
|
|
32
|
+
let maxMass = 0;
|
|
33
|
+
let neighborPairs = 0;
|
|
34
|
+
let siteDistanceTotal = 0;
|
|
35
|
+
let maxSiteDistance = 0;
|
|
36
|
+
let activeAfterImpact = 0;
|
|
37
|
+
for (let index = 0; index < sites.length; index += 1) {
|
|
38
|
+
const site = sites[index];
|
|
39
|
+
const siteDistance = distance(site, impactPoint);
|
|
40
|
+
siteDistanceTotal += siteDistance;
|
|
41
|
+
maxSiteDistance = Math.max(maxSiteDistance, siteDistance);
|
|
42
|
+
const volume = boundsVolume * (weights[index] / weightSum);
|
|
43
|
+
const mass = volume * density;
|
|
44
|
+
totalVolume += volume;
|
|
45
|
+
totalMass += mass;
|
|
46
|
+
minMass = Math.min(minMass, mass);
|
|
47
|
+
maxMass = Math.max(maxMass, mass);
|
|
48
|
+
const direction = normalized([site[0] - impactPoint[0], site[1] - impactPoint[1], site[2] - impactPoint[2]]);
|
|
49
|
+
const attenuation = 1 / (1 + siteDistance * 2.2);
|
|
50
|
+
const velocityMagnitude = impactStrength * attenuation / Math.max(1, mass);
|
|
51
|
+
const neighborCount = sites.filter((other, otherIndex) => otherIndex !== index && distance(other, site) < 0.58).length;
|
|
52
|
+
neighborPairs += neighborCount;
|
|
53
|
+
if (impactStrength * attenuation > 24)
|
|
54
|
+
activeAfterImpact += 1;
|
|
55
|
+
if (index < 6) {
|
|
56
|
+
fragments.push({
|
|
57
|
+
id: index,
|
|
58
|
+
site: roundVec3(site),
|
|
59
|
+
centerOfMass: roundVec3([
|
|
60
|
+
site[0] * 0.86 + impactPoint[0] * 0.14,
|
|
61
|
+
site[1] * 0.86 + impactPoint[1] * 0.14,
|
|
62
|
+
site[2] * 0.86 + impactPoint[2] * 0.14
|
|
63
|
+
]),
|
|
64
|
+
mass: round4(mass),
|
|
65
|
+
volume: round4(volume),
|
|
66
|
+
velocity: roundVec3([direction[0] * velocityMagnitude, direction[1] * velocityMagnitude, direction[2] * velocityMagnitude]),
|
|
67
|
+
angularVelocity: roundVec3([
|
|
68
|
+
(site[1] - impactPoint[1]) * velocityMagnitude * 1.9,
|
|
69
|
+
(site[2] - impactPoint[2]) * velocityMagnitude * 1.6,
|
|
70
|
+
(site[0] - impactPoint[0]) * velocityMagnitude * 1.7
|
|
71
|
+
]),
|
|
72
|
+
neighborCount
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
neighborPairs = Math.floor(neighborPairs / 2);
|
|
77
|
+
const maxDepth = 3;
|
|
78
|
+
const activatedChildren = Math.max(1, Math.min(fragmentCount, Math.round(activeAfterImpact * 0.72)));
|
|
79
|
+
const nodeCount = 1 + fragmentCount + activatedChildren * 2;
|
|
80
|
+
return {
|
|
81
|
+
id: "external-parity-old-branch-fracture-fixture",
|
|
82
|
+
source: "origin-master-voronoi-hierarchical-fracture-adapted",
|
|
83
|
+
sourceFiles,
|
|
84
|
+
config: {
|
|
85
|
+
bounds: { min: boundsMin, max: boundsMax },
|
|
86
|
+
requestedFragments: fragmentCount,
|
|
87
|
+
density,
|
|
88
|
+
impactPoint,
|
|
89
|
+
impulseStrength: impactStrength,
|
|
90
|
+
interiorFaces: true,
|
|
91
|
+
progressiveDamage: true
|
|
92
|
+
},
|
|
93
|
+
voronoi: {
|
|
94
|
+
siteCount: sites.length,
|
|
95
|
+
radialSiteCount: sites.length,
|
|
96
|
+
averageSiteDistance: round4(siteDistanceTotal / sites.length),
|
|
97
|
+
maxSiteDistance: round4(maxSiteDistance),
|
|
98
|
+
neighborPairs,
|
|
99
|
+
crackGraphEdges: neighborPairs + Math.max(0, fragmentCount - 1)
|
|
100
|
+
},
|
|
101
|
+
fragments: {
|
|
102
|
+
fragmentCount: sites.length,
|
|
103
|
+
totalMass: round4(totalMass),
|
|
104
|
+
minMass: round4(minMass),
|
|
105
|
+
maxMass: round4(maxMass),
|
|
106
|
+
totalVolume: round4(totalVolume),
|
|
107
|
+
interiorFaceEstimate: fragmentCount * 6 + neighborPairs,
|
|
108
|
+
activeAfterImpact,
|
|
109
|
+
samples: fragments
|
|
110
|
+
},
|
|
111
|
+
hierarchy: {
|
|
112
|
+
maxDepth,
|
|
113
|
+
nodeCount,
|
|
114
|
+
rootDamage: round4(Math.min(1, impactStrength / 100)),
|
|
115
|
+
childDamageThreshold: 0.34,
|
|
116
|
+
activatedChildren,
|
|
117
|
+
residualInactiveChildren: Math.max(0, fragmentCount - activatedChildren)
|
|
118
|
+
},
|
|
119
|
+
blockedClaims,
|
|
120
|
+
hash: hashNumbers([
|
|
121
|
+
seed,
|
|
122
|
+
fragmentCount,
|
|
123
|
+
impactStrength,
|
|
124
|
+
totalMass,
|
|
125
|
+
totalVolume,
|
|
126
|
+
minMass,
|
|
127
|
+
maxMass,
|
|
128
|
+
neighborPairs,
|
|
129
|
+
activeAfterImpact,
|
|
130
|
+
nodeCount
|
|
131
|
+
]),
|
|
132
|
+
claimBoundary: "Deterministic bounded fracture telemetry adapted from old Voronoi, geometry clipping, and hierarchical fracture concepts. It proves radial site generation, fragment mass/velocity estimates, crack graph metrics, and progressive damage activation; it does not claim runtime convex mesh clipping, generated interior geometry, rigid-body fragment simulation, destructible authoring workflow, Unity destruction parity, or Unreal Chaos destruction parity."
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
function generateRadialSites(seed, count, center, radius) {
|
|
136
|
+
const sites = [];
|
|
137
|
+
for (let index = 0; index < count; index += 1) {
|
|
138
|
+
const u = hash01(seed, index * 3 + 1);
|
|
139
|
+
const v = hash01(seed, index * 3 + 2);
|
|
140
|
+
const w = hash01(seed, index * 3 + 3);
|
|
141
|
+
const theta = u * Math.PI * 2;
|
|
142
|
+
const phi = Math.acos(2 * v - 1);
|
|
143
|
+
const localRadius = radius * Math.pow(w, 0.72);
|
|
144
|
+
sites.push([
|
|
145
|
+
center[0] + Math.sin(phi) * Math.cos(theta) * localRadius,
|
|
146
|
+
center[1] + Math.cos(phi) * localRadius,
|
|
147
|
+
center[2] + Math.sin(phi) * Math.sin(theta) * localRadius
|
|
148
|
+
]);
|
|
149
|
+
}
|
|
150
|
+
return sites;
|
|
151
|
+
}
|
|
152
|
+
function normalized(value) {
|
|
153
|
+
const length = Math.max(0.0001, Math.hypot(value[0], value[1], value[2]));
|
|
154
|
+
return [value[0] / length, value[1] / length, value[2] / length];
|
|
155
|
+
}
|
|
156
|
+
function distance(left, right) {
|
|
157
|
+
return Math.hypot(left[0] - right[0], left[1] - right[1], left[2] - right[2]);
|
|
158
|
+
}
|
|
159
|
+
function roundVec3(value) {
|
|
160
|
+
return [round4(value[0]), round4(value[1]), round4(value[2])];
|
|
161
|
+
}
|
|
162
|
+
function hash01(seed, salt) {
|
|
163
|
+
let value = Math.imul(seed + salt * 1013904223, 1664525) + 1013904223;
|
|
164
|
+
value = Math.imul(value ^ (value >>> 13), 1274126177);
|
|
165
|
+
return ((value ^ (value >>> 16)) >>> 0) / 4294967296;
|
|
166
|
+
}
|
|
167
|
+
function hashNumbers(values) {
|
|
168
|
+
let hash = 0x811c9dc5;
|
|
169
|
+
for (const value of values) {
|
|
170
|
+
const scaled = Math.round(value * 10_000);
|
|
171
|
+
hash ^= scaled & 0xff;
|
|
172
|
+
hash = Math.imul(hash, 0x01000193) >>> 0;
|
|
173
|
+
hash ^= (scaled >>> 8) & 0xff;
|
|
174
|
+
hash = Math.imul(hash, 0x01000193) >>> 0;
|
|
175
|
+
hash ^= (scaled >>> 16) & 0xff;
|
|
176
|
+
hash = Math.imul(hash, 0x01000193) >>> 0;
|
|
177
|
+
}
|
|
178
|
+
return hash.toString(16).padStart(8, "0");
|
|
179
|
+
}
|
|
180
|
+
function round4(value) {
|
|
181
|
+
return Number(value.toFixed(4));
|
|
182
|
+
}
|
|
183
|
+
function finitePositive(value, label) {
|
|
184
|
+
if (!Number.isFinite(value) || value <= 0)
|
|
185
|
+
throw new RangeError(`Fracture fixture ${label} must be finite and positive.`);
|
|
186
|
+
return value;
|
|
187
|
+
}
|
|
188
|
+
function integer(value, label) {
|
|
189
|
+
if (!Number.isInteger(value))
|
|
190
|
+
throw new RangeError(`Fracture fixture ${label} must be an integer.`);
|
|
191
|
+
return value;
|
|
192
|
+
}
|
|
193
|
+
function integerInRange(value, label, min, max) {
|
|
194
|
+
const parsed = integer(value, label);
|
|
195
|
+
if (parsed < min || parsed > max)
|
|
196
|
+
throw new RangeError(`Fracture fixture ${label} must be in the [${min}, ${max}] range.`);
|
|
197
|
+
return parsed;
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=FractureFixtures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FractureFixtures.js","sourceRoot":"","sources":["../../../../packages/physics/src/FractureFixtures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { type CombatFacing, type CollisionOwnerId, type CollisionVolume } from "./CollisionVolumes.js";
|
|
2
|
+
import { type Vec3 } from "./Shape.js";
|
|
3
|
+
export type CombatantId = CollisionOwnerId;
|
|
4
|
+
export type CombatTeam = string | number;
|
|
5
|
+
export type CombatantDescriptor = {
|
|
6
|
+
readonly id: CombatantId;
|
|
7
|
+
readonly team?: CombatTeam;
|
|
8
|
+
readonly position?: Vec3;
|
|
9
|
+
readonly facing?: CombatFacing;
|
|
10
|
+
readonly hurtboxes?: readonly CollisionVolume[];
|
|
11
|
+
readonly guardBoxes?: readonly CollisionVolume[];
|
|
12
|
+
readonly pushbox?: CollisionVolume | null;
|
|
13
|
+
readonly health?: number;
|
|
14
|
+
readonly maxHealth?: number;
|
|
15
|
+
readonly guard?: number;
|
|
16
|
+
readonly maxGuard?: number;
|
|
17
|
+
readonly meter?: number;
|
|
18
|
+
readonly blocking?: boolean;
|
|
19
|
+
readonly invulnerableFrames?: number;
|
|
20
|
+
readonly knockedOut?: boolean;
|
|
21
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
22
|
+
};
|
|
23
|
+
export type CombatantPose = {
|
|
24
|
+
readonly position?: Vec3;
|
|
25
|
+
readonly facing?: CombatFacing;
|
|
26
|
+
};
|
|
27
|
+
export type ActiveFrameWindow = {
|
|
28
|
+
readonly start: number;
|
|
29
|
+
readonly end: number;
|
|
30
|
+
};
|
|
31
|
+
export type HitboxDescriptor = {
|
|
32
|
+
readonly id?: string;
|
|
33
|
+
readonly ownerId: CombatantId;
|
|
34
|
+
readonly team?: CombatTeam;
|
|
35
|
+
readonly moveId: string;
|
|
36
|
+
readonly boxes: readonly CollisionVolume[];
|
|
37
|
+
readonly activeFrames?: ActiveFrameWindow;
|
|
38
|
+
readonly recoveryFrames?: number;
|
|
39
|
+
readonly damage?: number;
|
|
40
|
+
readonly guardDamage?: number;
|
|
41
|
+
readonly hitstunFrames?: number;
|
|
42
|
+
readonly blockstunFrames?: number;
|
|
43
|
+
readonly hitStopFrames?: number;
|
|
44
|
+
readonly selfHitStopFrames?: number;
|
|
45
|
+
readonly knockback?: Vec3;
|
|
46
|
+
readonly blockKnockback?: Vec3;
|
|
47
|
+
readonly priority?: number;
|
|
48
|
+
readonly canHitOwner?: boolean;
|
|
49
|
+
readonly canHitSameTeam?: boolean;
|
|
50
|
+
readonly hitOnce?: boolean;
|
|
51
|
+
readonly maxHits?: number;
|
|
52
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
53
|
+
};
|
|
54
|
+
export type ActiveHitboxSnapshot = {
|
|
55
|
+
readonly id: string;
|
|
56
|
+
readonly ownerId: CombatantId;
|
|
57
|
+
readonly moveId: string;
|
|
58
|
+
readonly ageFrames: number;
|
|
59
|
+
readonly activeFrames: ActiveFrameWindow;
|
|
60
|
+
readonly recoveryFrames: number;
|
|
61
|
+
readonly hitCount: number;
|
|
62
|
+
readonly expired: boolean;
|
|
63
|
+
};
|
|
64
|
+
export type CombatantSnapshot = {
|
|
65
|
+
readonly id: CombatantId;
|
|
66
|
+
readonly team?: CombatTeam;
|
|
67
|
+
readonly position: Vec3;
|
|
68
|
+
readonly facing: CombatFacing;
|
|
69
|
+
readonly health: number;
|
|
70
|
+
readonly maxHealth: number;
|
|
71
|
+
readonly guard: number;
|
|
72
|
+
readonly maxGuard: number;
|
|
73
|
+
readonly meter: number;
|
|
74
|
+
readonly blocking: boolean;
|
|
75
|
+
readonly invulnerableFrames: number;
|
|
76
|
+
readonly hitStopFrames: number;
|
|
77
|
+
readonly hitstunFrames: number;
|
|
78
|
+
readonly blockstunFrames: number;
|
|
79
|
+
readonly recoveryFrames: number;
|
|
80
|
+
readonly knockedOut: boolean;
|
|
81
|
+
};
|
|
82
|
+
export type HitboxWorldSnapshot = {
|
|
83
|
+
readonly frame: number;
|
|
84
|
+
readonly roundLocked: boolean;
|
|
85
|
+
readonly combatants: readonly CombatantSnapshot[];
|
|
86
|
+
readonly hitboxes: readonly ActiveHitboxSnapshot[];
|
|
87
|
+
readonly events: readonly CombatEvent[];
|
|
88
|
+
};
|
|
89
|
+
export type CombatHitEvent = {
|
|
90
|
+
readonly type: "hit";
|
|
91
|
+
readonly frame: number;
|
|
92
|
+
readonly attackerId: CombatantId;
|
|
93
|
+
readonly defenderId: CombatantId;
|
|
94
|
+
readonly hitboxId: string;
|
|
95
|
+
readonly moveId: string;
|
|
96
|
+
readonly hitboxVolumeId: string;
|
|
97
|
+
readonly hurtboxId: string;
|
|
98
|
+
readonly damage: number;
|
|
99
|
+
readonly defenderHealth: number;
|
|
100
|
+
readonly hitstunFrames: number;
|
|
101
|
+
readonly hitStopFrames: number;
|
|
102
|
+
readonly knockback: Vec3;
|
|
103
|
+
readonly point: Vec3;
|
|
104
|
+
readonly normal: Vec3;
|
|
105
|
+
};
|
|
106
|
+
export type CombatBlockEvent = {
|
|
107
|
+
readonly type: "blocked";
|
|
108
|
+
readonly frame: number;
|
|
109
|
+
readonly attackerId: CombatantId;
|
|
110
|
+
readonly defenderId: CombatantId;
|
|
111
|
+
readonly hitboxId: string;
|
|
112
|
+
readonly moveId: string;
|
|
113
|
+
readonly hitboxVolumeId: string;
|
|
114
|
+
readonly guardboxId: string;
|
|
115
|
+
readonly guardDamage: number;
|
|
116
|
+
readonly defenderGuard: number;
|
|
117
|
+
readonly blockstunFrames: number;
|
|
118
|
+
readonly hitStopFrames: number;
|
|
119
|
+
readonly knockback: Vec3;
|
|
120
|
+
readonly point: Vec3;
|
|
121
|
+
readonly normal: Vec3;
|
|
122
|
+
};
|
|
123
|
+
export type CombatHitboxLifecycleEvent = {
|
|
124
|
+
readonly type: "hitbox-spawned";
|
|
125
|
+
readonly frame: number;
|
|
126
|
+
readonly hitboxId: string;
|
|
127
|
+
readonly ownerId: CombatantId;
|
|
128
|
+
readonly moveId: string;
|
|
129
|
+
readonly activeFrames: ActiveFrameWindow;
|
|
130
|
+
} | {
|
|
131
|
+
readonly type: "hitbox-expired";
|
|
132
|
+
readonly frame: number;
|
|
133
|
+
readonly hitboxId: string;
|
|
134
|
+
readonly ownerId: CombatantId;
|
|
135
|
+
readonly moveId: string;
|
|
136
|
+
readonly hitCount: number;
|
|
137
|
+
} | {
|
|
138
|
+
readonly type: "whiff";
|
|
139
|
+
readonly frame: number;
|
|
140
|
+
readonly hitboxId: string;
|
|
141
|
+
readonly ownerId: CombatantId;
|
|
142
|
+
readonly moveId: string;
|
|
143
|
+
};
|
|
144
|
+
export type CombatTimerEvent = {
|
|
145
|
+
readonly type: "hitstop-start";
|
|
146
|
+
readonly frame: number;
|
|
147
|
+
readonly combatantId: CombatantId;
|
|
148
|
+
readonly frames: number;
|
|
149
|
+
} | {
|
|
150
|
+
readonly type: "hitstop-end";
|
|
151
|
+
readonly frame: number;
|
|
152
|
+
readonly combatantId: CombatantId;
|
|
153
|
+
} | {
|
|
154
|
+
readonly type: "hitstun-start";
|
|
155
|
+
readonly frame: number;
|
|
156
|
+
readonly combatantId: CombatantId;
|
|
157
|
+
readonly frames: number;
|
|
158
|
+
} | {
|
|
159
|
+
readonly type: "hitstun-end";
|
|
160
|
+
readonly frame: number;
|
|
161
|
+
readonly combatantId: CombatantId;
|
|
162
|
+
} | {
|
|
163
|
+
readonly type: "blockstun-start";
|
|
164
|
+
readonly frame: number;
|
|
165
|
+
readonly combatantId: CombatantId;
|
|
166
|
+
readonly frames: number;
|
|
167
|
+
} | {
|
|
168
|
+
readonly type: "blockstun-end";
|
|
169
|
+
readonly frame: number;
|
|
170
|
+
readonly combatantId: CombatantId;
|
|
171
|
+
} | {
|
|
172
|
+
readonly type: "recovery-start";
|
|
173
|
+
readonly frame: number;
|
|
174
|
+
readonly combatantId: CombatantId;
|
|
175
|
+
readonly frames: number;
|
|
176
|
+
} | {
|
|
177
|
+
readonly type: "recovery-end";
|
|
178
|
+
readonly frame: number;
|
|
179
|
+
readonly combatantId: CombatantId;
|
|
180
|
+
};
|
|
181
|
+
export type CombatKnockoutEvent = {
|
|
182
|
+
readonly type: "knockout";
|
|
183
|
+
readonly frame: number;
|
|
184
|
+
readonly combatantId: CombatantId;
|
|
185
|
+
readonly attackerId?: CombatantId;
|
|
186
|
+
readonly moveId?: string;
|
|
187
|
+
};
|
|
188
|
+
export type CombatRoundResetEvent = {
|
|
189
|
+
readonly type: "round-reset";
|
|
190
|
+
readonly frame: number;
|
|
191
|
+
readonly combatants: readonly CombatantId[];
|
|
192
|
+
};
|
|
193
|
+
export type CombatPushboxEvent = {
|
|
194
|
+
readonly type: "pushbox-overlap";
|
|
195
|
+
readonly frame: number;
|
|
196
|
+
readonly combatantA: CombatantId;
|
|
197
|
+
readonly combatantB: CombatantId;
|
|
198
|
+
readonly normal: Vec3;
|
|
199
|
+
readonly penetration: number;
|
|
200
|
+
};
|
|
201
|
+
export type CombatEvent = CombatHitEvent | CombatBlockEvent | CombatHitboxLifecycleEvent | CombatTimerEvent | CombatPushboxEvent | CombatKnockoutEvent | CombatRoundResetEvent;
|
|
202
|
+
export type HitboxWorldDescriptor = {
|
|
203
|
+
readonly detectPushboxOverlaps?: boolean;
|
|
204
|
+
readonly lockOnKnockout?: boolean;
|
|
205
|
+
};
|
|
206
|
+
export declare class HitboxWorld {
|
|
207
|
+
readonly detectPushboxOverlaps: boolean;
|
|
208
|
+
readonly lockOnKnockout: boolean;
|
|
209
|
+
private readonly combatantsById;
|
|
210
|
+
private readonly hitboxesById;
|
|
211
|
+
private nextHitboxId;
|
|
212
|
+
private frame;
|
|
213
|
+
private roundLocked;
|
|
214
|
+
private lastEvents;
|
|
215
|
+
private readonly pendingEvents;
|
|
216
|
+
constructor(descriptor?: HitboxWorldDescriptor);
|
|
217
|
+
registerCombatant(descriptor: CombatantDescriptor): CombatantSnapshot;
|
|
218
|
+
upsertCombatant(descriptor: CombatantDescriptor): CombatantSnapshot;
|
|
219
|
+
removeCombatant(id: CombatantId): void;
|
|
220
|
+
getCombatant(id: CombatantId): CombatantSnapshot | undefined;
|
|
221
|
+
setPose(id: CombatantId, pose: CombatantPose): void;
|
|
222
|
+
setGuarding(id: CombatantId, blocking: boolean): void;
|
|
223
|
+
setHurtboxes(id: CombatantId, volumes: readonly CollisionVolume[]): void;
|
|
224
|
+
setGuardBoxes(id: CombatantId, volumes: readonly CollisionVolume[]): void;
|
|
225
|
+
setPushbox(id: CombatantId, volume: CollisionVolume | null): void;
|
|
226
|
+
spawnHitbox(descriptor: HitboxDescriptor): ActiveHitboxSnapshot;
|
|
227
|
+
clearHitboxes(ownerId?: CombatantId): void;
|
|
228
|
+
reset(combatants?: readonly CombatantDescriptor[]): HitboxWorldSnapshot;
|
|
229
|
+
step(frames?: number): readonly CombatEvent[];
|
|
230
|
+
drainEvents(): readonly CombatEvent[];
|
|
231
|
+
snapshot(): HitboxWorldSnapshot;
|
|
232
|
+
combatants(): readonly CombatantSnapshot[];
|
|
233
|
+
hitboxes(): readonly ActiveHitboxSnapshot[];
|
|
234
|
+
private stepOneFrame;
|
|
235
|
+
private resolveHitbox;
|
|
236
|
+
private tryResolveBlock;
|
|
237
|
+
private tryResolveHit;
|
|
238
|
+
private knockOutCombatant;
|
|
239
|
+
private applyHitTimers;
|
|
240
|
+
private applyBlockTimers;
|
|
241
|
+
private tickTimers;
|
|
242
|
+
private collectPushboxEvents;
|
|
243
|
+
private expireHitbox;
|
|
244
|
+
private expireAllHitboxes;
|
|
245
|
+
private requireCombatant;
|
|
246
|
+
private sortedCombatantRecords;
|
|
247
|
+
private sortedHitboxRecords;
|
|
248
|
+
private drainPendingEvents;
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=HitboxWorld.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HitboxWorld.d.ts","sourceRoot":"","sources":["../../../../packages/physics/src/HitboxWorld.ts"],"names":[],"mappings":"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"}
|