Skip to content

Commit 4e940f0

Browse files
committed
feat(editor): update engine-whole package
web-render pipeline add InitScriptJob, UpdateScriptJob; export handle script component: GLTF add script extension Mesh.userData add script data? import handle script component: _import read Mesh.userData, then add script component pass export data run test; pass publish run test: extract script api: use getEngineSceneService instead of getPackageService
1 parent 873783e commit 4e940f0

File tree

38 files changed

+444
-96
lines changed

38 files changed

+444
-96
lines changed

doc/1.3.0.org

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -682,33 +682,54 @@ run editor
682682
TODO refactor: deferLoad duplicate
683683

684684

685-
*** TODO update engine-whole
685+
*** DONE update engine-whole
686686

687-
# TODO add onInit, update script job
687+
TODO add onInit, update script job
688688

689+
TODO export should handle script component
690+
GLTF add script extension
691+
Mesh.userData add script data?
692+
693+
694+
TODO import should handle script component
695+
_import read Mesh.userData, then add script component
696+
697+
698+
TODO pass export data run test
689699

690700
TODO pass publish run test
701+
extract script api: use getEngineSceneService instead of getPackageService
702+
703+
704+
705+
TODO pass publish to platform run test
691706

692707

693708
TODO publish:
709+
# meta3d-export-scene
694710
# engine-core and p;
695-
# gameview pipeline, extension and p;
711+
# gameview pipeline
696712
# sceneview
697-
webview pipeline, extension and p;
713+
# webview pipeline
698714
# engine-scene
699-
imgui p
700-
ui p
701-
editor whole
715+
# imgui p
716+
# ui p
717+
# editor whole
718+
719+
# meta3d-scenegraph-converter-three
720+
# three
702721

722+
# load-glb
723+
# asset
703724

704725
TODO update:
705726
# engine-core
706727
# gameview
707728
# engine-scene
708-
ui
709-
editor-whole
710-
web
711-
engine-whole
729+
# ui
730+
# editor-whole
731+
# web
732+
# engine-whole
712733

713734

714735

@@ -738,23 +759,23 @@ TODO fix: editor loop will increase
738759

739760

740761

741-
* TODO 3D贪吃蛇
762+
# * TODO 3D贪吃蛇
742763

743-
Snake, Scene use gltf model!
764+
# Snake, Scene use gltf model!
744765

745766

746-
script:
747-
control visiable
748-
bind keyboard event to switch scene
767+
# script:
768+
# control visiable
769+
# bind keyboard event to switch scene
749770

750771

751772

752-
TODO unbind event when stop
773+
# TODO unbind event when stop
753774

754775

755-
** TODO add 2d ui
776+
# ** TODO add 2d ui
756777

757-
** TODO ...
778+
# ** TODO ...
758779

759780

760781
* TODO publish

packages/asset/extensions/meta3d-load-glb/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "meta3d-load-glb",
3-
"version": "1.2.0",
3+
"version": "1.2.1",
44
"publisher": "meta3d",
55
"protocol": {
66
"name": "meta3d-load-glb-protocol"

packages/asset/extensions/meta3d-load-glb/src/Main.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { state as meta3dState } from "meta3d-type"
1212
import type { WebGLRenderer } from "three"
1313
import * as Meta3DCameraActive from "./extensions/active-camera/Meta3DCameraActive"
1414
import * as Meta3DCameraController from "./extensions/cameracontroller/Meta3DCameraController"
15+
import * as Meta3DScript from "./extensions/script/Meta3DScript"
1516

1617
let _createRendererOnlyOnce = (meta3dState: meta3dState, api: api, threeAPIService: threeAPIService) => {
1718
let state = api.getExtensionState<state>(meta3dState, "meta3d-load-glb-protocol")
@@ -59,6 +60,7 @@ export let getExtensionService: getExtensionServiceMeta3D<service> = (api) => {
5960
.setKTX2Loader(ktx2Loader)
6061
.register(Meta3DCameraActive.getExtension)
6162
.register(Meta3DCameraController.getExtension)
63+
.register(Meta3DScript.getExtension)
6264
.parse(
6365
glb,
6466
"",

packages/asset/extensions/meta3d-load-glb/src/extensions/active-camera/Meta3DCameraActive.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { buildKey, buildValue } from "meta3d-gltf-extensions/src/Meta3DCameraActive"
22
import { setValueToObject } from "meta3d-structure-utils/src/ObjectUtils"
33
import { forEach, isNullable, map, getWithDefault, getExn, getEmpty, return_, bind } from "meta3d-commonlib-ts/src/NullableUtils"
4-
import { handleNodeNameToAsGLTFLoader, setCameraUserData } from "../utils/CameraUtils"
4+
import { handleNodeNameToAsGLTFLoader } from "../utils/NodeUtils"
5+
import { setCameraUserData } from "../utils/CameraUtils"
56

67
let _findActivedCameraGameObjectName = (json) => {
78
return bind(cameras => {

packages/asset/extensions/meta3d-load-glb/src/extensions/cameracontroller/Meta3DCameraController.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { allControllerData, buildKey, buildValue, extensionValue } from "meta3d-gltf-extensions/src/Meta3DCameraController"
22
import { setValueToObject } from "meta3d-structure-utils/src/ObjectUtils"
33
import { forEach, isNullable, map, getWithDefault, getExn, getEmpty, return_, bind } from "meta3d-commonlib-ts/src/NullableUtils"
4-
import { handleNodeNameToAsGLTFLoader, setCameraUserData } from "../utils/CameraUtils"
4+
import { handleNodeNameToAsGLTFLoader } from "../utils/NodeUtils"
5+
import { setCameraUserData } from "../utils/CameraUtils"
56

67
let _findAllCameraControllData = (json): allControllerData => {
78
return getWithDefault(
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import { allScriptData, buildKey, buildValue, extensionValue } from "meta3d-gltf-extensions/src/Meta3DScript"
2+
import { setValueToObject } from "meta3d-structure-utils/src/ObjectUtils"
3+
import { forEach, isNullable, map, getWithDefault, getExn, getEmpty, return_, bind } from "meta3d-commonlib-ts/src/NullableUtils"
4+
import { handleNodeNameToAsGLTFLoader } from "../utils/NodeUtils"
5+
import { setScriptUserData } from "../utils/ScriptUtils"
6+
7+
let _findAllScriptData = (json): allScriptData => {
8+
return getWithDefault(
9+
bind(nodes => {
10+
return nodes.reduce((result, node) => {
11+
return getWithDefault(
12+
map(
13+
(extension: extensionValue) => {
14+
result.push([
15+
handleNodeNameToAsGLTFLoader(node.name),
16+
extension
17+
])
18+
19+
return result
20+
},
21+
bind(
22+
extensions => {
23+
return extensions[buildKey()]
24+
}, node.extensions
25+
)
26+
),
27+
result
28+
)
29+
}, [])
30+
}, json.nodes),
31+
[]
32+
)
33+
}
34+
35+
let _setAllScriptData = (gltf, allScriptData: allScriptData) => {
36+
allScriptData.forEach(([
37+
gameObjectName,
38+
extensionValue
39+
]) => {
40+
setScriptUserData((object3D) => {
41+
object3D.userData = setValueToObject(object3D.userData, buildKey(), buildValue(extensionValue))
42+
}, gltf, gameObjectName)
43+
})
44+
}
45+
46+
export let getExtension = (parser) => {
47+
return {
48+
name: buildKey(),
49+
afterRoot(gltf) {
50+
let json = parser.json
51+
52+
if (getWithDefault(
53+
map(extensionsUsed => {
54+
return !extensionsUsed.includes(buildKey())
55+
}, json.extensionsUsed),
56+
false
57+
)) {
58+
return null
59+
}
60+
61+
_setAllScriptData(gltf, _findAllScriptData(json))
62+
63+
return Promise.resolve()
64+
}
65+
}
66+
}

packages/asset/extensions/meta3d-load-glb/src/extensions/utils/CameraUtils.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,3 @@
1-
/*! handle as GLTFLoader.js
2-
*
3-
*/
4-
export let handleNodeNameToAsGLTFLoader = (nodeName: string) => {
5-
return nodeName.replace(/\s/g, "_")
6-
}
7-
81
export let setCameraUserData = (func, gltf, gameObjectName) => {
92
for (let scene of gltf.scenes) {
103
scene.traverse(object => {
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
/*! handle as GLTFLoader.js
2+
*
3+
*/
4+
export let handleNodeNameToAsGLTFLoader = (nodeName: string) => {
5+
return nodeName.replace(/\s/g, "_")
6+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
export let setScriptUserData = (func, gltf, gameObjectName) => {
2+
for (let scene of gltf.scenes) {
3+
scene.traverse(object => {
4+
if (!object.isMesh || object.name != gameObjectName) {
5+
return
6+
}
7+
8+
func(object)
9+
})
10+
}
11+
}

packages/editor-whole/extensions/meta3d-export-scene/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "meta3d-export-scene",
3-
"version": "1.2.0",
3+
"version": "1.2.1",
44
"publisher": "meta3d",
55
"protocol": {
66
"name": "meta3d-export-scene-protocol"

0 commit comments

Comments
 (0)