diff --git a/thermion_dart/lib/src/viewer/src/ffi/src/ffi_camera.dart b/thermion_dart/lib/src/viewer/src/ffi/src/ffi_camera.dart index faa55623..077fffc7 100644 --- a/thermion_dart/lib/src/viewer/src/ffi/src/ffi_camera.dart +++ b/thermion_dart/lib/src/viewer/src/ffi/src/ffi_camera.dart @@ -148,7 +148,7 @@ class FFICamera extends Camera { } Future destroy() async { - throw UnimplementedError(); + Engine_destroyCamera(app.engine, camera); } Future setCameraExposure( @@ -157,13 +157,14 @@ class FFICamera extends Camera { } Future getFocusDistance() async => Camera_getFocusDistance(camera); - Future setFocusDistance(double focusDistance) async => Camera_setFocusDistance(camera, focusDistance); - + Future setFocusDistance(double focusDistance) async => + Camera_setFocusDistance(camera, focusDistance); + @override Future getHorizontalFieldOfView() async { return Camera_getFov(camera, true); } - + @override Future getVerticalFieldOfView() async { return Camera_getFov(camera, false); diff --git a/thermion_dart/native/include/c_api/TEngine.h b/thermion_dart/native/include/c_api/TEngine.h index bce95b21..452ccbd8 100644 --- a/thermion_dart/native/include/c_api/TEngine.h +++ b/thermion_dart/native/include/c_api/TEngine.h @@ -37,6 +37,7 @@ EMSCRIPTEN_KEEPALIVE void Engine_destroyScene(TEngine *tEngine, TScene *tScene); EMSCRIPTEN_KEEPALIVE void Engine_destroyColorGrading(TEngine *tEngine, TColorGrading *tColorGrading); EMSCRIPTEN_KEEPALIVE TCamera *Engine_createCamera(TEngine* tEngine); +EMSCRIPTEN_KEEPALIVE void Engine_destroyCamera(TEngine *tEngine, TCamera *tCamera); EMSCRIPTEN_KEEPALIVE TView *Engine_createView(TEngine *tEngine); EMSCRIPTEN_KEEPALIVE TCamera *Engine_getCameraComponent(TEngine* tEngine, EntityId entityId); EMSCRIPTEN_KEEPALIVE TTransformManager *Engine_getTransformManager(TEngine *engine); diff --git a/thermion_dart/native/src/c_api/TEngine.cpp b/thermion_dart/native/src/c_api/TEngine.cpp index 2b530c9d..b5453b16 100644 --- a/thermion_dart/native/src/c_api/TEngine.cpp +++ b/thermion_dart/native/src/c_api/TEngine.cpp @@ -1,5 +1,6 @@ #include "c_api/TEngine.h" +#include #include #include #include @@ -179,6 +180,13 @@ namespace thermion return reinterpret_cast(camera); } + EMSCRIPTEN_KEEPALIVE void Engine_destroyCamera(TEngine *tEngine, TCamera *tCamera) { + auto *engine = reinterpret_cast(tEngine); + auto *camera = reinterpret_cast(tCamera); + engine->destroyCameraComponent(camera->getEntity()); + utils::EntityManager::get().destroy(camera->getEntity()); + } + EMSCRIPTEN_KEEPALIVE TCamera *Engine_getCameraComponent(TEngine *tEngine, EntityId entityId) { auto *engine = reinterpret_cast(tEngine);