From bef41b9f0ef6508ecd56735cd5e2d6fb205e114a Mon Sep 17 00:00:00 2001 From: "Arun S. Negi" Date: Tue, 25 Jul 2023 01:32:01 +0530 Subject: [PATCH] feat: add preliminary camera-controls abstraction --- package.json | 2 + playground/src/pages/CameraControlsDemo.vue | 58 +++ playground/src/router.ts | 5 + pnpm-lock.yaml | 26 +- src/core/controls/CameraControls.vue | 427 ++++++++++++++++++++ src/core/controls/index.ts | 11 +- 6 files changed, 524 insertions(+), 5 deletions(-) create mode 100644 playground/src/pages/CameraControlsDemo.vue create mode 100644 src/core/controls/CameraControls.vue diff --git a/package.json b/package.json index 32c30f96..29a4ddde 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "devDependencies": { "@alvarosabu/prettier-config": "^1.3.0", "@release-it/conventional-changelog": "^6.0.0", + "@tweakpane/core": "^1.1.9", "@tweakpane/plugin-essentials": "^0.1.8", "@types/node": "^20.4.1", "@types/three": "^0.153.0", @@ -80,6 +81,7 @@ }, "dependencies": { "@vueuse/core": "^10.2.1", + "camera-controls": "^2.7.0", "three-stdlib": "^2.23.13" } } diff --git a/playground/src/pages/CameraControlsDemo.vue b/playground/src/pages/CameraControlsDemo.vue new file mode 100644 index 00000000..025abe78 --- /dev/null +++ b/playground/src/pages/CameraControlsDemo.vue @@ -0,0 +1,58 @@ + + + + diff --git a/playground/src/router.ts b/playground/src/router.ts index 7a653414..9f81a2f2 100644 --- a/playground/src/router.ts +++ b/playground/src/router.ts @@ -11,6 +11,11 @@ const routes = [ name: 'OrbitControls', component: () => import('./pages/OrbitControlsDemo.vue'), }, + { + path: '/controls/camera-controls', + name: 'CameraControls', + component: () => import('./pages/CameraControlsDemo.vue'), + }, { path: '/controls/transform-controls', name: 'TransformControls', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e0cace0b..17456a22 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,9 +1,5 @@ lockfileVersion: '6.0' -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - importers: .: @@ -14,6 +10,9 @@ importers: '@vueuse/core': specifier: ^10.2.1 version: 10.2.1(vue@3.3.4) + camera-controls: + specifier: ^2.7.0 + version: 2.7.0(three@0.154.0) three-stdlib: specifier: ^2.23.13 version: 2.23.13(three@0.154.0) @@ -27,6 +26,9 @@ importers: '@release-it/conventional-changelog': specifier: ^6.0.0 version: 6.0.0(release-it@16.0.0) + '@tweakpane/core': + specifier: ^1.1.9 + version: 1.1.9 '@tweakpane/plugin-essentials': specifier: ^0.1.8 version: 0.1.8(tweakpane@3.1.10) @@ -1077,6 +1079,10 @@ packages: engines: {node: '>=10.13.0'} dev: true + /@tweakpane/core@1.1.9: + resolution: {integrity: sha512-9tq+KAhaqPiOgsFyLPAz1IMXkVfhRqxGzAgy1ps3As6o3W7XjnU7sev6OlD/Z+Pzw8uZVMukkSHf2e0uCU6u0A==} + dev: true + /@tweakpane/plugin-essentials@0.1.8(tweakpane@3.1.10): resolution: {integrity: sha512-tWBXzWafcjiq+/XvZnOgSz0B+YikwZj0NnqiZPba+AwTiDqNk/6PU3so0Bs0qyxLIJKT/+AUPRL8jBmtERYzwA==} peerDependencies: @@ -2054,6 +2060,14 @@ packages: engines: {node: '>=14.16'} dev: true + /camera-controls@2.7.0(three@0.154.0): + resolution: {integrity: sha512-HONMoMYHieOCQOoweS639bdWHP/P/fvVGR08imnECGVUp04mqGfsX/zp1ZufLeiAA5hA6i1JhP6SrnOwh01C0w==} + peerDependencies: + three: '>=0.126.1' + dependencies: + three: 0.154.0 + dev: false + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -6428,3 +6442,7 @@ packages: /zstddec@0.0.2: resolution: {integrity: sha512-DCo0oxvcvOTGP/f5FA6tz2Z6wF+FIcEApSTu0zV5sQgn9hoT5lZ9YRAKUraxt9oP7l4e8TnNdi8IZTCX6WCkwA==} dev: false + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false diff --git a/src/core/controls/CameraControls.vue b/src/core/controls/CameraControls.vue new file mode 100644 index 00000000..74110690 --- /dev/null +++ b/src/core/controls/CameraControls.vue @@ -0,0 +1,427 @@ + + + diff --git a/src/core/controls/index.ts b/src/core/controls/index.ts index 52dd9ec7..7a499e8a 100644 --- a/src/core/controls/index.ts +++ b/src/core/controls/index.ts @@ -4,5 +4,14 @@ import TransformControls from './TransformControls.vue' import PointerLockControls from './PointerLockControls.vue' import MapControls from './MapControls.vue' import ScrollControls from './ScrollControls.vue' +import CameraControls from './CameraControls.vue' -export { OrbitControls, TransformControls, PointerLockControls, MapControls, KeyboardControls, ScrollControls } +export { + OrbitControls, + TransformControls, + PointerLockControls, + MapControls, + KeyboardControls, + ScrollControls, + CameraControls, +}