Skip to content

Commit 25f8ac3

Browse files
committed
refactor(rapier): update rapier with new renderer
1 parent bfb3dbb commit 25f8ac3

File tree

10 files changed

+143
-133
lines changed

10 files changed

+143
-133
lines changed

libs/rapier/src/lib/colliders.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Directive, effect, inject, input } from '@angular/core';
22
import { NgtrAnyCollider } from './rigid-body';
3-
import {
3+
import type {
44
NgtrBallArgs,
55
NgtrCapsuleArgs,
66
NgtrConeArgs,

libs/rapier/src/lib/debug.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
} from '@angular/core';
99
import { World } from '@dimforge/rapier3d-compat';
1010
import { extend, injectBeforeRender } from 'angular-three';
11+
import * as THREE from 'three';
1112
import { BufferAttribute, Group, LineBasicMaterial, LineSegments } from 'three';
1213

1314
@Component({
@@ -26,7 +27,7 @@ import { BufferAttribute, Group, LineBasicMaterial, LineSegments } from 'three';
2627
export class NgtrDebug {
2728
world = input.required<World | undefined>();
2829

29-
private lineSegmentsRef = viewChild.required<ElementRef<LineSegments>>('lineSegments');
30+
private lineSegmentsRef = viewChild.required<ElementRef<THREE.LineSegments>>('lineSegments');
3031

3132
constructor() {
3233
extend({ Group, LineSegments, LineBasicMaterial, BufferAttribute });

libs/rapier/src/lib/instanced-rigid-bodies.ts

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,17 @@ import {
1414
import {
1515
applyProps,
1616
extend,
17-
getLocalState,
17+
getInstanceState,
18+
is,
1819
NgtEuler,
19-
NgtObject3D,
2020
NgtQuaternion,
21+
NgtThreeElements,
2122
NgtVector3,
2223
pick,
2324
} from 'angular-three';
2425
import { mergeInputs } from 'ngxtension/inject-inputs';
25-
import { DynamicDrawUsage, InstancedMesh, Object3D } from 'three';
26+
import * as THREE from 'three';
27+
import { Object3D } from 'three';
2628
import { NgtrPhysics } from './physics';
2729
import { NgtrAnyCollider, NgtrRigidBody, rigidBodyDefaultOptions } from './rigid-body';
2830
import { NgtrRigidBodyOptions, NgtrRigidBodyState, NgtrRigidBodyType } from './types';
@@ -35,7 +37,7 @@ export interface NgtrInstancedRigidBodyOptions {
3537
rotation?: NgtEuler;
3638
scale?: NgtVector3;
3739
quaternion?: NgtQuaternion;
38-
userData?: NgtObject3D['userData'];
40+
userData?: NgtThreeElements['ngt-object3D']['userData'];
3941
options?: NgtrRigidBodyOptions;
4042
}
4143

@@ -85,7 +87,7 @@ export class NgtrInstancedRigidBodies {
8587
rotation = input<NgtEuler | undefined>([0, 0, 0]);
8688
scale = input<NgtVector3 | undefined>([1, 1, 1]);
8789
quaternion = input<NgtQuaternion | undefined>([0, 0, 0, 1]);
88-
userData = input<NgtObject3D['userData'] | undefined>({});
90+
userData = input<NgtThreeElements['ngt-object3D']['userData'] | undefined>({});
8991
instances = input([], {
9092
alias: 'ngtrInstancedRigidBodies',
9193
transform: (value: Array<NgtrInstancedRigidBodyOptions> | '') => {
@@ -105,27 +107,27 @@ export class NgtrInstancedRigidBodies {
105107
};
106108
});
107109

108-
private instanceWrapperRef = viewChild.required<ElementRef<Object3D>>('instanceWrapper');
110+
private instanceWrapperRef = viewChild.required<ElementRef<THREE.Object3D>>('instanceWrapper');
109111
rigidBodyRefs = viewChildren(NgtrRigidBody);
110112

111113
private physics = inject(NgtrPhysics);
112-
objectRef = inject<ElementRef<Object3D>>(ElementRef);
114+
objectRef = inject<ElementRef<THREE.Object3D>>(ElementRef);
113115

114116
private colliders = pick(this.options, 'colliders');
115117

116118
private instancedMesh = computed(() => {
117119
const instanceWrapper = this.instanceWrapperRef().nativeElement;
118120
if (!instanceWrapper) return null;
119121

120-
const localState = getLocalState(instanceWrapper);
121-
if (!localState) return null;
122+
const instanceState = getInstanceState(instanceWrapper);
123+
if (!instanceState) return null;
122124

123125
// track object's children
124-
localState.objects();
126+
instanceState.objects();
125127
const firstChild = instanceWrapper.children[0];
126-
if (!firstChild || !(firstChild as InstancedMesh).isInstancedMesh) return null;
128+
if (!firstChild || !(firstChild as THREE.InstancedMesh).isInstancedMesh) return null;
127129

128-
return firstChild as InstancedMesh;
130+
return firstChild as THREE.InstancedMesh;
129131
});
130132

131133
protected instancesOptions = computed(() => {
@@ -171,12 +173,12 @@ export class NgtrInstancedRigidBodies {
171173
// if colliders on object is not set, use physics colliders
172174
if (!options.colliders) options.colliders = physicsColliders;
173175

174-
const objectLocalState = getLocalState(this.objectRef.nativeElement);
175-
if (!objectLocalState) return [];
176+
const objectInstanceState = getInstanceState(this.objectRef.nativeElement);
177+
if (!objectInstanceState) return [];
176178

177179
// track object's parent and non-object children
178-
const [parent] = [objectLocalState.parent(), objectLocalState.nonObjects()];
179-
if (!parent || !(parent as Object3D).isObject3D) return [];
180+
const [parent] = [objectInstanceState.parent(), objectInstanceState.nonObjects()];
181+
if (!parent || !is.three<THREE.Object3D>(parent, 'isObject3D')) return [];
180182

181183
return createColliderOptions(this.objectRef.nativeElement, options);
182184
});
@@ -192,7 +194,7 @@ export class NgtrInstancedRigidBodies {
192194
effect(() => {
193195
const instancedMesh = this.instancedMesh();
194196
if (!instancedMesh) return;
195-
instancedMesh.instanceMatrix.setUsage(DynamicDrawUsage);
197+
instancedMesh.instanceMatrix.setUsage(THREE.DynamicDrawUsage);
196198
});
197199
}
198200
}

libs/rapier/src/lib/joints.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
import { resolveRef } from 'angular-three';
1414
import { assertInjector } from 'ngxtension/assert-injector';
1515
import { NgtrPhysics } from './physics';
16-
import {
16+
import type {
1717
NgtrFixedJointParams,
1818
NgtrPrismaticJointParams,
1919
NgtrRevoluteJointParams,

libs/rapier/src/lib/mesh-collider.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@ import {
77
inject,
88
input,
99
} from '@angular/core';
10-
import { extend, getLocalState } from 'angular-three';
10+
import { extend, getInstanceState } from 'angular-three';
11+
import * as THREE from 'three';
1112
import { Object3D } from 'three';
1213
import { NgtrAnyCollider, NgtrRigidBody } from './rigid-body';
13-
import { NgtrRigidBodyAutoCollider } from './types';
14+
import type { NgtrRigidBodyAutoCollider } from './types';
1415
import { createColliderOptions } from './utils';
1516

1617
@Component({
@@ -36,19 +37,19 @@ import { createColliderOptions } from './utils';
3637
export class NgtrMeshCollider {
3738
colliders = input.required<NgtrRigidBodyAutoCollider>({ alias: 'ngtrMeshCollider' });
3839

39-
objectRef = inject<ElementRef<Object3D>>(ElementRef);
40+
objectRef = inject<ElementRef<THREE.Object3D>>(ElementRef);
4041
private rigidBody = inject(NgtrRigidBody);
4142

4243
protected childColliderOptions = computed(() => {
4344
const rigidBodyOptions = this.rigidBody.options();
4445
rigidBodyOptions.colliders = this.colliders();
4546

46-
const objectLocalState = getLocalState(this.objectRef.nativeElement);
47-
if (!objectLocalState) return [];
47+
const objectInstaceState = getInstanceState(this.objectRef.nativeElement);
48+
if (!objectInstaceState) return [];
4849

4950
// track object's children
50-
objectLocalState.nonObjects();
51-
objectLocalState.objects();
51+
objectInstaceState.nonObjects();
52+
objectInstaceState.objects();
5253

5354
return createColliderOptions(this.objectRef.nativeElement, rigidBodyOptions, false);
5455
});

libs/rapier/src/lib/physics.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
import RAPIER, { ColliderHandle, EventQueue, Rotation, Vector, World } from '@dimforge/rapier3d-compat';
1717
import { injectStore, pick, vector3 } from 'angular-three';
1818
import { mergeInputs } from 'ngxtension/inject-inputs';
19-
import { MathUtils, Quaternion, Vector3 } from 'three';
19+
import * as THREE from 'three';
2020
import { NgtrDebug } from './debug';
2121
import { NgtrFrameStepper } from './frame-stepper';
2222
import { _matrix4, _position, _rotation, _scale } from './shared';
@@ -86,8 +86,8 @@ export class NgtrPhysicsFallback {
8686
export class NgtrPhysics {
8787
options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
8888

89-
content = contentChild.required(TemplateRef);
90-
fallbackContent = contentChild(NgtrPhysicsFallback, { read: TemplateRef });
89+
protected content = contentChild.required(TemplateRef);
90+
protected fallbackContent = contentChild(NgtrPhysicsFallback, { read: TemplateRef });
9191

9292
protected updatePriority = pick(this.options, 'updatePriority');
9393
protected updateLoop = pick(this.options, 'updateLoop');
@@ -104,8 +104,8 @@ export class NgtrPhysics {
104104
private timeStep = pick(this.options, 'timeStep');
105105
private interpolate = pick(this.options, 'interpolate');
106106

107-
paused = pick(this.options, 'paused');
108-
debug = pick(this.options, 'debug');
107+
private paused = pick(this.options, 'paused');
108+
protected debug = pick(this.options, 'debug');
109109
colliders = pick(this.options, 'colliders');
110110

111111
private vGravity = vector3(this.options, 'gravity');
@@ -116,7 +116,7 @@ export class NgtrPhysics {
116116
protected rapierError = signal<string | null>(null);
117117
rapier = this.rapierConstruct.asReadonly();
118118

119-
ready = computed(() => !!this.rapier());
119+
protected ready = computed(() => !!this.rapier());
120120
worldSingleton = computed(() => {
121121
const rapier = this.rapier();
122122
if (!rapier) return null;
@@ -203,7 +203,7 @@ export class NgtrPhysics {
203203
* Fixed timeStep simulation progression.
204204
* @see https://gafferongames.com/post/fix_your_timestep/
205205
*/
206-
const clampedDelta = MathUtils.clamp(delta, 0, 0.5);
206+
const clampedDelta = THREE.MathUtils.clamp(delta, 0, 0.5);
207207

208208
const stepWorld = (innerDelta: number) => {
209209
// Trigger beforeStep callbacks
@@ -264,15 +264,19 @@ export class NgtrPhysics {
264264
}
265265

266266
// New states
267-
let t = rigidBody.translation() as Vector3;
268-
let r = rigidBody.rotation() as Quaternion;
267+
let t = rigidBody.translation() as THREE.Vector3;
268+
let r = rigidBody.rotation() as THREE.Quaternion;
269269

270270
let previousState = this.steppingState.previousState[handle];
271271

272272
if (previousState) {
273273
// Get previous simulated world position
274274
_matrix4
275-
.compose(previousState.position as Vector3, rapierQuaternionToQuaternion(previousState.rotation), state.scale)
275+
.compose(
276+
previousState.position as THREE.Vector3,
277+
rapierQuaternionToQuaternion(previousState.rotation),
278+
state.scale,
279+
)
276280
.premultiply(state.invertedWorldMatrix)
277281
.decompose(_position, _rotation, _scale);
278282

0 commit comments

Comments
 (0)