浏览代码

feat(core): provide inject worked again

alvarosabu 2 年之前
父节点
当前提交
2390ec1a75

+ 1 - 1
package.json

@@ -52,7 +52,7 @@
     "@changesets/cli": "^2.25.2",
     "@changesets/cli": "^2.25.2",
     "@stackblitz/sdk": "^1.8.1",
     "@stackblitz/sdk": "^1.8.1",
     "@tresjs/cientos": "workspace:^1.8.0",
     "@tresjs/cientos": "workspace:^1.8.0",
-    "@tresjs/core": "workspace:^1.8.1",
+    "@tresjs/core": "workspace:^2.0.0",
     "@typescript-eslint/eslint-plugin": "^5.42.0",
     "@typescript-eslint/eslint-plugin": "^5.42.0",
     "@typescript-eslint/parser": "^5.42.0",
     "@typescript-eslint/parser": "^5.42.0",
     "conventional-changelog-cli": "^2.2.2",
     "conventional-changelog-cli": "^2.2.2",

+ 2 - 2
packages/cientos/package.json

@@ -37,7 +37,7 @@
     "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s"
     "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s"
   },
   },
   "peerDependencies": {
   "peerDependencies": {
-    "@tresjs/core": "workspace:^1.8.1",
+    "@tresjs/core": "workspace:^2.0.0",
     "three": "latest",
     "three": "latest",
     "vue": "^3.2.47"
     "vue": "^3.2.47"
   },
   },
@@ -55,7 +55,7 @@
     "vite-plugin-dts": "2.0.0-beta.1"
     "vite-plugin-dts": "2.0.0-beta.1"
   },
   },
   "dependencies": {
   "dependencies": {
-    "@tresjs/core": "workspace:^1.8.1",
+    "@tresjs/core": "workspace:^2.0.0",
     "three-stdlib": "^2.21.8"
     "three-stdlib": "^2.21.8"
   }
   }
 }
 }

+ 0 - 1
packages/cientos/src/core/OrbitControls.vue

@@ -74,6 +74,5 @@ watch(controls, value => {
     v-if="state.camera && state.renderer"
     v-if="state.camera && state.renderer"
     ref="controls"
     ref="controls"
     :args="[unref(state.camera) || camera, state.renderer?.domElement || domElement]"
     :args="[unref(state.camera) || camera, state.renderer?.domElement || domElement]"
-    :enabling-dampling="enableDamping"
   />
   />
 </template>
 </template>

+ 9 - 3
packages/cientos/src/core/useCientos.ts

@@ -1,5 +1,5 @@
-import { useTres } from '@tresjs/core'
-import { inject } from 'vue'
+import { useTres, extend } from '@tresjs/core'
+import { inject, watch } from 'vue'
 
 
 /**
 /**
  * Allows to use and extend the state of the core package.
  * Allows to use and extend the state of the core package.
@@ -8,13 +8,19 @@ import { inject } from 'vue'
  * @return {*}
  * @return {*}
  */
  */
 export function useCientos() {
 export function useCientos() {
+  const { state, setState } = inject('useTres', useTres())
   const extend =
   const extend =
     inject<(objects: any) => void>('extend') ||
     inject<(objects: any) => void>('extend') ||
     (() => {
     (() => {
       console.warn('No extend function provided')
       console.warn('No extend function provided')
     })
     })
 
 
-  const { state, setState } = inject('useTres', useTres())
+  watch(
+    () => state,
+    () => {
+      console.log('cientos state changed', state)
+    },
+  )
   return {
   return {
     state,
     state,
     setState,
     setState,

+ 1 - 1
packages/tres/package.json

@@ -1,7 +1,7 @@
 {
 {
   "name": "@tresjs/core",
   "name": "@tresjs/core",
   "description": "Declarative ThreeJS using Vue Components",
   "description": "Declarative ThreeJS using Vue Components",
-  "version": "1.8.1",
+  "version": "2.0.0",
   "type": "module",
   "type": "module",
   "author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",
   "author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",
   "files": [
   "files": [

+ 8 - 6
packages/tres/src/App.vue

@@ -1,9 +1,9 @@
 <script setup lang="ts">
 <script setup lang="ts">
-import { ref, watchEffect } from 'vue'
-import { OrbitControls } from 'three/addons/controls/OrbitControls.js'
+import { provide, ref, watchEffect } from 'vue'
+import { OrbitControls } from '../../cientos/src/'
 import TresCanvas from './components/TresCanvas'
 import TresCanvas from './components/TresCanvas'
 import { useRenderLoop, useTres } from '/@/composables'
 import { useRenderLoop, useTres } from '/@/composables'
-import { extend } from './core/catalogue'
+import AkuAku from './demos/AkuAku.vue'
 // import TheEvents from '/@/components/TheEvents.vue'
 // import TheEvents from '/@/components/TheEvents.vue'
 const gl = {
 const gl = {
   antialias: true,
   antialias: true,
@@ -14,8 +14,6 @@ const gl = {
 
 
 const { state } = useTres()
 const { state } = useTres()
 
 
-extend({ OrbitControls })
-
 const { onLoop } = useRenderLoop()
 const { onLoop } = useRenderLoop()
 
 
 watchEffect(() => {
 watchEffect(() => {
@@ -48,8 +46,9 @@ function enter(e) {
 
 
 <template>
 <template>
   <TresCanvas v-bind="gl">
   <TresCanvas v-bind="gl">
+    <OrbitControls />
     <TresPerspectiveCamera :args="[75, 1, 0.1, 1000]" :position="[0, 2, 7]"></TresPerspectiveCamera>
     <TresPerspectiveCamera :args="[75, 1, 0.1, 1000]" :position="[0, 2, 7]"></TresPerspectiveCamera>
-    <TresOrbitControls v-if="state.camera" :args="[state.camera, state.renderer.domElement]" />
+    <!--  <TresOrbitControls v-if="state.camera" :args="[state.camera, state.renderer.domElement]" /> -->
     <TresAmbientLight :color="0xffffff" :intensity="0.75" />
     <TresAmbientLight :color="0xffffff" :intensity="0.75" />
     <TresDirectionalLight :color="0xffffff" :intensity="2" :position="[-2, 2, 0]" cast-shadow />
     <TresDirectionalLight :color="0xffffff" :intensity="2" :position="[-2, 2, 0]" cast-shadow />
     <TresMesh :position="[0, 3, 0]" @click="click" @pointer-enter="enter" cast-shadow>
     <TresMesh :position="[0, 3, 0]" @click="click" @pointer-enter="enter" cast-shadow>
@@ -60,6 +59,9 @@ function enter(e) {
       <TresPlaneGeometry :args="[12, 12, 100, 100]"></TresPlaneGeometry>
       <TresPlaneGeometry :args="[12, 12, 100, 100]"></TresPlaneGeometry>
       <TresMeshToonMaterial color="gray"></TresMeshToonMaterial>
       <TresMeshToonMaterial color="gray"></TresMeshToonMaterial>
     </TresMesh>
     </TresMesh>
+    <Suspense>
+      <AkuAku />
+    </Suspense>
     <TresGridHelper :args="[4, 4]"></TresGridHelper>
     <TresGridHelper :args="[4, 4]"></TresGridHelper>
   </TresCanvas>
   </TresCanvas>
 </template>
 </template>

+ 11 - 10
packages/tres/src/components/TresCanvas.ts

@@ -2,8 +2,9 @@ import { defineComponent, h, PropType, ref, watch } from 'vue'
 import * as THREE from 'three'
 import * as THREE from 'three'
 import { ShadowMapType, TextureEncoding, ToneMapping } from 'three'
 import { ShadowMapType, TextureEncoding, ToneMapping } from 'three'
 import { createTres } from '/@/core/renderer'
 import { createTres } from '/@/core/renderer'
-import { useCamera, useRenderer, useRenderLoop, useRaycaster } from '/@/composables'
+import { useCamera, useRenderer, useRenderLoop, useRaycaster, useTres } from '/@/composables'
 import { TresObject } from '../types'
 import { TresObject } from '../types'
+import { extend } from '../core/catalogue'
 
 
 export const TresCanvas = defineComponent({
 export const TresCanvas = defineComponent({
   name: 'TresCanvas',
   name: 'TresCanvas',
@@ -33,13 +34,12 @@ export const TresCanvas = defineComponent({
   setup(props, { slots, expose }) {
   setup(props, { slots, expose }) {
     const container = ref<HTMLElement>()
     const container = ref<HTMLElement>()
     const canvas = ref<HTMLCanvasElement>()
     const canvas = ref<HTMLCanvasElement>()
+    const scene = new THREE.Scene()
 
 
     watch(canvas, () => {
     watch(canvas, () => {
       const { renderer } = useRenderer(canvas, container, props)
       const { renderer } = useRenderer(canvas, container, props)
       const { activeCamera } = useCamera()
       const { activeCamera } = useCamera()
 
 
-      const scene = new THREE.Scene()
-
       const { onLoop } = useRenderLoop()
       const { onLoop } = useRenderLoop()
 
 
       const { raycaster, pointer } = useRaycaster()
       const { raycaster, pointer } = useRaycaster()
@@ -50,14 +50,15 @@ export const TresCanvas = defineComponent({
         raycaster.value.setFromCamera(pointer.value, activeCamera.value)
         raycaster.value.setFromCamera(pointer.value, activeCamera.value)
         renderer.value?.render(scene, activeCamera.value)
         renderer.value?.render(scene, activeCamera.value)
       })
       })
+    })
 
 
-      const app = createTres(slots)
-      app.mount(scene as unknown as TresObject)
-
-      console.log({ scene, renderer })
-      expose({
-        scene,
-      })
+    const app = createTres(slots)
+    app.provide('awiwi', 'uwu')
+    app.provide('useTres', useTres())
+    app.provide('extend', extend)
+    app.mount(scene as unknown as TresObject)
+    expose({
+      scene,
     })
     })
 
 
     return () => {
     return () => {

+ 7 - 2
packages/tres/src/core/catalogue.ts

@@ -1,4 +1,9 @@
-export const catalogue: Record<string, any> = {}
-export const extend = (objects: any) => void Object.assign(catalogue, objects)
+import { MathUtils } from 'three'
+import { Ref, ref } from 'vue'
+import { TresCatalogue } from '../types'
+
+export const catalogue: Ref<TresCatalogue> = ref({ uuid: MathUtils.generateUUID() })
+
+export const extend = (objects: any) => void Object.assign(catalogue.value, objects)
 
 
 export default { catalogue, extend }
 export default { catalogue, extend }

+ 2 - 2
packages/tres/src/core/nodeOps.ts

@@ -32,9 +32,9 @@ export const nodeOps: RendererOptions<TresObject, TresObject> = {
     if (props === null) props = {}
     if (props === null) props = {}
 
 
     if (props?.args) {
     if (props?.args) {
-      instance = new catalogue[tag.replace('Tres', '')](...props.args)
+      instance = new catalogue.value[tag.replace('Tres', '')](...props.args)
     } else {
     } else {
-      instance = new catalogue[tag.replace('Tres', '')]()
+      instance = new catalogue.value[tag.replace('Tres', '')]()
     }
     }
 
 
     if (instance.isCamera) {
     if (instance.isCamera) {

+ 5 - 4
packages/tres/src/demos/AkuAku.vue

@@ -1,6 +1,6 @@
 <script setup lang="ts">
 <script setup lang="ts">
 import { useTweakPane, useGLTF } from '@tresjs/cientos'
 import { useTweakPane, useGLTF } from '@tresjs/cientos'
-import { ref, watch } from 'vue'
+import { inject, ref, watch, watchEffect } from 'vue'
 
 
 useTweakPane()
 useTweakPane()
 
 
@@ -18,10 +18,11 @@ const akuAkuRef = ref(null)
 watch(akuAkuRef, value => {
 watch(akuAkuRef, value => {
   console.log('akuAkuRef', value)
   console.log('akuAkuRef', value)
 })
 })
+
+const awiwi = inject('awiwi')
+console.log('awiwi', awiwi)
 </script>
 </script>
 
 
 <template>
 <template>
-  <Suspense>
-    <TresMesh ref="akuAkuRef" v-bind="model" />
-  </Suspense>
+  <TresMesh ref="akuAkuRef" v-bind="model" />
 </template>
 </template>

+ 2 - 1
packages/tres/src/index.ts

@@ -1,6 +1,7 @@
-import { App } from 'vue'
+import { App, ref } from 'vue'
 import { TresCanvas } from '/@/components/TresCanvas'
 import { TresCanvas } from '/@/components/TresCanvas'
 export * from '/@/composables'
 export * from '/@/composables'
+export * from '/@/core/catalogue'
 export * from './keys'
 export * from './keys'
 export * from './types'
 export * from './types'
 
 

+ 0 - 1
packages/tres/vite.config.ts

@@ -25,7 +25,6 @@ export default defineConfig({
   resolve: {
   resolve: {
     alias: {
     alias: {
       '/@': resolve(__dirname, './src'),
       '/@': resolve(__dirname, './src'),
-      vue: 'vue/dist/vue.esm-bundler.js',
     },
     },
     dedupe: ['@tresjs/cientos'],
     dedupe: ['@tresjs/cientos'],
   },
   },

+ 2 - 2
pnpm-lock.yaml

@@ -9,7 +9,7 @@ importers:
       '@changesets/cli': ^2.25.2
       '@changesets/cli': ^2.25.2
       '@stackblitz/sdk': ^1.8.1
       '@stackblitz/sdk': ^1.8.1
       '@tresjs/cientos': workspace:^1.8.0
       '@tresjs/cientos': workspace:^1.8.0
-      '@tresjs/core': workspace:^1.8.1
+      '@tresjs/core': workspace:^2.0.0
       '@typescript-eslint/eslint-plugin': ^5.42.0
       '@typescript-eslint/eslint-plugin': ^5.42.0
       '@typescript-eslint/parser': ^5.42.0
       '@typescript-eslint/parser': ^5.42.0
       conventional-changelog-cli: ^2.2.2
       conventional-changelog-cli: ^2.2.2
@@ -47,7 +47,7 @@ importers:
 
 
   packages/cientos:
   packages/cientos:
     specifiers:
     specifiers:
-      '@tresjs/core': workspace:^1.8.1
+      '@tresjs/core': workspace:^2.0.0
       '@tweakpane/plugin-essentials': ^0.1.8
       '@tweakpane/plugin-essentials': ^0.1.8
       '@vitejs/plugin-vue': ^4.0.0
       '@vitejs/plugin-vue': ^4.0.0
       kolorist: ^1.7.0
       kolorist: ^1.7.0