From 15392071e4e53698251f35064394d659a77b66be Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Tue, 4 Jun 2024 20:53:20 +0800 Subject: [PATCH] add fade in/out arguments to JS export types --- .../interop/dart_filament_js_export_type.dart | 41 ++++++++++++++----- .../dart_filament_js_extension_type.dart | 4 +- .../interop/js_interop_filament_viewer.dart | 29 ++++++++----- 3 files changed, 52 insertions(+), 22 deletions(-) diff --git a/dart_filament/lib/dart_filament/compatibility/web/interop/dart_filament_js_export_type.dart b/dart_filament/lib/dart_filament/compatibility/web/interop/dart_filament_js_export_type.dart index 7d2448de..016b29ab 100644 --- a/dart_filament/lib/dart_filament/compatibility/web/interop/dart_filament_js_export_type.dart +++ b/dart_filament/lib/dart_filament/compatibility/web/interop/dart_filament_js_export_type.dart @@ -74,8 +74,11 @@ class DartFilamentJSExportViewer { viewer.loadIbl(lightingPath, intensity: intensity).toJS; @JSExport() - JSPromise rotateIbl(JSArray rotation) => throw UnimplementedError(); - // viewer.rotateIbl(rotation.toDartMatrix3()).toJS; + JSPromise rotateIbl(JSArray rotation) { + var matrix = + Matrix3.fromList(rotation.toDart.map((v) => v.toDartDouble).toList()); + return viewer.rotateIbl(matrix).toJS; + } @JSExport() JSPromise removeIbl() => viewer.removeIbl().toJS; @@ -261,7 +264,9 @@ class DartFilamentJSExportViewer { JSArray>> frameData, JSNumber frameLengthInMs, JSNumber spaceEnum, - JSNumber skinIndex) { + JSNumber skinIndex, + JSNumber fadeInInSecs, + JSNumber fadeOutInSecs) { var frameDataDart = frameData.toDart .map((frame) => frame.toDart .map((v) { @@ -285,7 +290,10 @@ class DartFilamentJSExportViewer { space: Space.values[spaceEnum.toDartInt]); return viewer - .addBoneAnimation(entity, data, skinIndex: skinIndex.toDartInt) + .addBoneAnimation(entity, data, + skinIndex: skinIndex.toDartInt, + fadeInInSecs: fadeInInSecs.toDartDouble, + fadeOutInSecs: fadeOutInSecs.toDartDouble) .toJS; } @@ -455,18 +463,23 @@ class DartFilamentJSExportViewer { JSPromise moveCameraToAsset(FilamentEntity entity) => throw UnimplementedError(); // viewer.moveCameraToAsset(entity)).toJS; + @JSExport() JSPromise setViewFrustumCulling(JSBoolean enabled) => throw UnimplementedError(); // viewer.setViewFrustumCulling(enabled).toJS; + @JSExport() JSPromise setCameraExposure( double aperture, double shutterSpeed, double sensitivity) => viewer.setCameraExposure(aperture, shutterSpeed, sensitivity).toJS; + @JSExport() - JSPromise setCameraRotation(JSArray quaternion) => - throw UnimplementedError(); -// viewer.setCameraRotation(quaternion.toDartQuaternion()).toJS; + JSPromise setCameraRotation(JSArray quaternion) { + var dartVals = quaternion.toDart; + return viewer.setCameraRotation(v64.Quaternion(dartVals[0].toDartDouble, dartVals[1].toDartDouble, dartVals[2].toDartDouble, dartVals[3].toDartDouble)).toJS; + } + @JSExport() JSPromise setCameraModelMatrix(JSArray matrix) { throw UnimplementedError(); @@ -669,10 +682,16 @@ class DartFilamentJSExportViewer { } @JSExport() - JSPromise setBoneTransform(FilamentEntity entity, - int boneIndex, JSArray transform, int skinIndex) { - return viewer.setBoneTransform(entity, boneIndex, Matrix4.fromList(transform.toDart.map((v) => v.toDartDouble).toList()), - skinIndex: skinIndex).toJS; + JSPromise setBoneTransform(FilamentEntity entity, int boneIndex, + JSArray transform, int skinIndex) { + return viewer + .setBoneTransform( + entity, + boneIndex, + Matrix4.fromList( + transform.toDart.map((v) => v.toDartDouble).toList()), + skinIndex: skinIndex) + .toJS; } @JSExport() diff --git a/dart_filament/lib/dart_filament/compatibility/web/interop/dart_filament_js_extension_type.dart b/dart_filament/lib/dart_filament/compatibility/web/interop/dart_filament_js_extension_type.dart index f1dc0649..1bc0ad22 100644 --- a/dart_filament/lib/dart_filament/compatibility/web/interop/dart_filament_js_extension_type.dart +++ b/dart_filament/lib/dart_filament/compatibility/web/interop/dart_filament_js_extension_type.dart @@ -149,7 +149,9 @@ extension type DartFilamentJSShim(JSObject _) implements JSObject { JSArray>> frameData, JSNumber frameLengthInMs, JSNumber spaceEnum, - JSNumber skinIndex); + JSNumber skinIndex, + JSNumber fadeInInSecs, + JSNumber fadeOutInSecs); @JS('removeEntity') external JSPromise removeEntity(FilamentEntity entity); diff --git a/dart_filament/lib/dart_filament/compatibility/web/interop/js_interop_filament_viewer.dart b/dart_filament/lib/dart_filament/compatibility/web/interop/js_interop_filament_viewer.dart index a30999d3..1a91e004 100644 --- a/dart_filament/lib/dart_filament/compatibility/web/interop/js_interop_filament_viewer.dart +++ b/dart_filament/lib/dart_filament/compatibility/web/interop/js_interop_filament_viewer.dart @@ -92,9 +92,9 @@ class JsInteropFilamentViewer implements AbstractFilamentViewer { @override Future rotateIbl(Matrix3 rotation) async { - throw UnimplementedError(); - // final JSMatrix3 jsRotation = rotation.storage; - // await _jsObject.rotateIbl(jsRotation).toDart; + await _jsObject + .rotateIbl(rotation.storage.map((v) => v.toJS).toList().toJS) + .toDart; } @override @@ -287,7 +287,9 @@ class JsInteropFilamentViewer implements AbstractFilamentViewer { @override Future addBoneAnimation( FilamentEntity entity, BoneAnimationData animation, - {int skinIndex = 0}) async { + {int skinIndex = 0, + double fadeInInSecs = 0.0, + double fadeOutInSecs = 0.0}) async { var boneNames = animation.bones.map((n) => n.toJS).toList().toJS; var frameData = animation.frameData .map((frame) => frame @@ -312,7 +314,9 @@ class JsInteropFilamentViewer implements AbstractFilamentViewer { frameData, animation.frameLengthInMs.toJS, animation.space.index.toJS, - skinIndex.toJS) + skinIndex.toJS, + fadeInInSecs.toJS, + fadeOutInSecs.toJS) .toDart; } @@ -515,9 +519,13 @@ class JsInteropFilamentViewer implements AbstractFilamentViewer { @override Future setCameraRotation(Quaternion quaternion) async { - throw UnimplementedError(); - // final JSQuaternion jsQuaternion = quaternion.toJSQuaternion().toDart; - // await _jsObject.setCameraRotation(jsQuaternion).toDart; + final values = [ + quaternion.x.toJS, + quaternion.y.toJS, + quaternion.z.toJS, + quaternion.w.toJS + ]; + await _jsObject.setCameraRotation(values.toJS).toDart; } @override @@ -781,10 +789,11 @@ class JsInteropFilamentViewer implements AbstractFilamentViewer { @override Future setBoneTransform( - FilamentEntity entity, int boneIndex, Matrix4 transform, { int skinIndex =0}) { + FilamentEntity entity, int boneIndex, Matrix4 transform, + {int skinIndex = 0}) { return _jsObject .setBoneTransform(entity, boneIndex, - transform.storage.map((v) => v.toJS).toList().toJS) + transform.storage.map((v) => v.toJS).toList().toJS, skinIndex) .toDart; }