@vyr/service-scene 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +21 -0
- package/src/SceneMethodProvider.ts +129 -0
- package/src/SceneService.ts +78 -0
- package/src/index.ts +2 -0
- package/src/locale/Language.ts +10 -0
- package/src/locale/LanguageProvider.ts +15 -0
- package/src/locale/index.ts +2 -0
package/package.json
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vyr/service-scene",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "./src/index.ts",
|
|
6
|
+
"author": "",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"axios": "^1.7.4",
|
|
10
|
+
"@vyr/locale": "0.0.1",
|
|
11
|
+
"@vyr/declare": "0.0.1",
|
|
12
|
+
"@vyr/engine": "0.0.1",
|
|
13
|
+
"@vyr/runtime": "0.0.1",
|
|
14
|
+
"@vyr/service": "0.0.1",
|
|
15
|
+
"@vyr/service-rpc": "0.0.1"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"package.json",
|
|
19
|
+
"src/"
|
|
20
|
+
]
|
|
21
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { ArrayUtils, AsyncTask, Category, Descriptor } from "@vyr/engine"
|
|
2
|
+
import { DataService, runtime } from "@vyr/runtime"
|
|
3
|
+
import { Message, RpcService } from '@vyr/service-rpc'
|
|
4
|
+
import { SceneService } from "./SceneService"
|
|
5
|
+
|
|
6
|
+
class SceneMethodProvider {
|
|
7
|
+
readonly ready = new AsyncTask()
|
|
8
|
+
readonly service
|
|
9
|
+
|
|
10
|
+
constructor(service: SceneService) {
|
|
11
|
+
this.service = service
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
listen() {
|
|
15
|
+
const rpcService = runtime.get<RpcService>('rpc')
|
|
16
|
+
rpcService.listen(Message.rpc.connection.Method, this._connection)
|
|
17
|
+
rpcService.listen(Message.rpc.disconnect.Method, this._disconnect)
|
|
18
|
+
rpcService.listen(Message.scene.initialize.Method, this._initialize)
|
|
19
|
+
rpcService.listen(Message.scene.record.Method, this._record)
|
|
20
|
+
rpcService.listen(Message.scene.create.Method, this._create)
|
|
21
|
+
rpcService.listen(Message.scene.delete.Method, this._delete)
|
|
22
|
+
rpcService.listen(Message.scene.switch.Method, this._switch)
|
|
23
|
+
rpcService.listen(Message.scene.add.Method, this._add)
|
|
24
|
+
rpcService.listen(Message.scene.remove.Method, this._remove)
|
|
25
|
+
rpcService.listen(Message.scene.dragdrap.Method, this._dragdrap)
|
|
26
|
+
rpcService.listen(Message.scene.update.Method, this._update)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
_connection = (msg: InstanceType<typeof Message['rpc']['connection']['NoticeMessage']>) => {
|
|
30
|
+
const urlParams = new URLSearchParams(window.location.search)
|
|
31
|
+
let url = 'default.scene.json'
|
|
32
|
+
const defaultScene = urlParams.get('scene')
|
|
33
|
+
if (defaultScene) {
|
|
34
|
+
const result = Category.parseName(defaultScene)
|
|
35
|
+
if (Category.scene === result.category) url = defaultScene
|
|
36
|
+
}
|
|
37
|
+
const rpcService = runtime.get<RpcService>('rpc')
|
|
38
|
+
rpcService.send(new Message.scene.initialize.RequestMessage(url))
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
_disconnect = (msg: InstanceType<typeof Message['rpc']['disconnect']['NoticeMessage']>) => {
|
|
42
|
+
this.service.useRecord.clearUser(msg.params.client)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
_initialize = async (msg: InstanceType<typeof Message['scene']['initialize']['NoticeMessage']>) => {
|
|
46
|
+
const { params } = msg
|
|
47
|
+
const descriptor = Descriptor.create(params.serialization)
|
|
48
|
+
this.service.root.clear()
|
|
49
|
+
this.service.root.add(descriptor)
|
|
50
|
+
this.service.scenes.length = 0
|
|
51
|
+
this.service.scenes.push(...params.scenes)
|
|
52
|
+
this.service.navigator.url = params.url
|
|
53
|
+
this.ready.run()
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
_record = async (msg: InstanceType<typeof Message['scene']['record']['NoticeMessage']>) => {
|
|
57
|
+
this.service.useRecord.copy(msg.params.useRecord)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
_create = (msg: InstanceType<typeof Message['scene']['create']['NoticeMessage']>) => {
|
|
61
|
+
ArrayUtils.insert(this.service.scenes, msg.params.url)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
_delete = (msg: InstanceType<typeof Message['scene']['delete']['NoticeMessage']>) => {
|
|
65
|
+
ArrayUtils.remove(this.service.scenes, msg.params.url)
|
|
66
|
+
this.service.useRecord.clear(msg.params.url)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
_switch = async (msg: InstanceType<typeof Message['scene']['switch']['NoticeMessage']>) => {
|
|
70
|
+
this.service.useRecord.removeUser(msg.params.url.old, msg.params.client)
|
|
71
|
+
this.service.useRecord.addUser(msg.params.url.new, msg.params.client)
|
|
72
|
+
const rpcService = runtime.get<RpcService>('rpc')
|
|
73
|
+
if (msg.params.client !== rpcService.client) return
|
|
74
|
+
|
|
75
|
+
this.service.navigator.url = msg.params.url.new
|
|
76
|
+
this.service.root.clear()
|
|
77
|
+
const descriptor = Descriptor.create(msg.params.serialization)
|
|
78
|
+
this.service.root.add(descriptor)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
_add = (msg: InstanceType<typeof Message['scene']['add']['NoticeMessage']>) => {
|
|
82
|
+
const parent = Descriptor.get<Descriptor>(msg.params.parent)
|
|
83
|
+
if (parent === null) return
|
|
84
|
+
|
|
85
|
+
if (msg.params.next) {
|
|
86
|
+
for (const item of msg.params.node) {
|
|
87
|
+
const node = Descriptor.create(item)
|
|
88
|
+
parent.insertBefore(node.uuid, msg.params.next)
|
|
89
|
+
}
|
|
90
|
+
} else {
|
|
91
|
+
for (const item of msg.params.node) {
|
|
92
|
+
const node = Descriptor.create(item)
|
|
93
|
+
parent.add(node)
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
_remove = (msg: InstanceType<typeof Message['scene']['remove']['NoticeMessage']>) => {
|
|
99
|
+
for (const uuid of msg.params.uuids) {
|
|
100
|
+
const target = Descriptor.get<Descriptor>(uuid)
|
|
101
|
+
if (target === null) continue
|
|
102
|
+
const ancestor = target.traceAncestor(false)
|
|
103
|
+
if (ancestor.parent === null) continue
|
|
104
|
+
ancestor.parent.remove(target)
|
|
105
|
+
|
|
106
|
+
target.traverse(child => {
|
|
107
|
+
ArrayUtils.removeByKey(this.service.navigator.selectAll, 'uuid', child.uuid)
|
|
108
|
+
ArrayUtils.removeByKey(this.service.navigator.status.stickupItems, 'uuid', child.uuid)
|
|
109
|
+
})
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
_update = (msg: InstanceType<typeof Message['scene']['update']['NoticeMessage']>) => {
|
|
114
|
+
const node = Descriptor.get<Descriptor>(msg.params.content.uuid)
|
|
115
|
+
if (node === null) return
|
|
116
|
+
node.syncWith(msg.params.content)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
_dragdrap = (msg: InstanceType<typeof Message['scene']['dragdrap']['NoticeMessage']>) => {
|
|
120
|
+
const method = msg.params.next ? 'insertBefore' : msg.params.type
|
|
121
|
+
const target = msg.params.next || msg.params.targetData.data.uuid
|
|
122
|
+
|
|
123
|
+
for (const uuid of msg.params.dragData.data.uuids) {
|
|
124
|
+
this.service.root[method](uuid, target)
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export { SceneMethodProvider }
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import axios from 'axios'
|
|
2
|
+
import { Service } from '@vyr/service'
|
|
3
|
+
import { DraggableData, DraggableEndType, } from '@vyr/declare'
|
|
4
|
+
import { Descriptor, DeserializationObject } from '@vyr/engine'
|
|
5
|
+
import { runtime, SidebarNavigator } from '@vyr/runtime'
|
|
6
|
+
import { Message, RpcService, UseRecord } from '@vyr/service-rpc'
|
|
7
|
+
import { SceneMethodProvider } from './SceneMethodProvider'
|
|
8
|
+
|
|
9
|
+
class SceneService extends Service {
|
|
10
|
+
private _provider = new SceneMethodProvider(this)
|
|
11
|
+
readonly root
|
|
12
|
+
readonly useRecord
|
|
13
|
+
readonly navigator
|
|
14
|
+
readonly scenes: string[] = []
|
|
15
|
+
|
|
16
|
+
constructor(name: string, useRecord: UseRecord, root: Descriptor, navigator: SidebarNavigator) {
|
|
17
|
+
super(name)
|
|
18
|
+
this.root = root
|
|
19
|
+
this.useRecord = useRecord
|
|
20
|
+
this.navigator = navigator
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
async ready() {
|
|
24
|
+
this._provider.listen()
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async start() {
|
|
28
|
+
await this._provider.ready.done()
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
create(url: string) {
|
|
32
|
+
const rpcService = runtime.get<RpcService>('rpc')
|
|
33
|
+
rpcService.send(new Message.scene.create.RequestMessage(url))
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
delete(url: string) {
|
|
37
|
+
const rpcService = runtime.get<RpcService>('rpc')
|
|
38
|
+
rpcService.send(new Message.scene.delete.RequestMessage(url))
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
switch(url: string) {
|
|
42
|
+
const rpcService = runtime.get<RpcService>('rpc')
|
|
43
|
+
rpcService.send(new Message.scene.switch.RequestMessage(url))
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
add(node: DeserializationObject<Descriptor>[], parent: string) {
|
|
47
|
+
const rpcService = runtime.get<RpcService>('rpc')
|
|
48
|
+
rpcService.send(new Message.scene.add.RequestMessage(node, parent))
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
remove(uuids: string[]) {
|
|
52
|
+
const rpcService = runtime.get<RpcService>('rpc')
|
|
53
|
+
rpcService.send(new Message.scene.remove.RequestMessage(uuids))
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
dragdrap(type: DraggableEndType, dragData: DraggableData<{ uuids: string[] }>, targetData: DraggableData<{ uuid: string }>) {
|
|
57
|
+
const rpcService = runtime.get<RpcService>('rpc')
|
|
58
|
+
rpcService.send(new Message.scene.dragdrap.RequestMessage(type, dragData, targetData))
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
update(content: DeserializationObject<Descriptor>) {
|
|
62
|
+
const rpcService = runtime.get<RpcService>('rpc')
|
|
63
|
+
rpcService.send(new Message.scene.update.RequestMessage(content))
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
async download(scene?: string) {
|
|
67
|
+
const res = await axios.get(Message.scene.download.Method, { params: new Message.scene.download.RequestMessage(scene), responseType: 'blob' })
|
|
68
|
+
|
|
69
|
+
const url = URL.createObjectURL(res.data)
|
|
70
|
+
const download = document.createElement('a')
|
|
71
|
+
download.href = url
|
|
72
|
+
download.download = 'project.zip'
|
|
73
|
+
download.click()
|
|
74
|
+
URL.revokeObjectURL(url)
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export { SceneService }
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Locale } from "@vyr/locale";
|
|
2
|
+
import { zhCnLanguageProvider, ZhCNLanguageProvider } from "./LanguageProvider";
|
|
3
|
+
|
|
4
|
+
Locale.register(zhCnLanguageProvider)
|
|
5
|
+
|
|
6
|
+
const language = Locale.getLanguage<ZhCNLanguageProvider>(zhCnLanguageProvider.name)
|
|
7
|
+
|
|
8
|
+
export {
|
|
9
|
+
language
|
|
10
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { LanguageProvider } from '@vyr/locale'
|
|
2
|
+
|
|
3
|
+
interface ZhCNLanguageProvider extends LanguageProvider {
|
|
4
|
+
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
const zhCnLanguageProvider: ZhCNLanguageProvider = {
|
|
8
|
+
id: 'zh_CN',
|
|
9
|
+
name: '@vyr/service-scene',
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export {
|
|
13
|
+
ZhCNLanguageProvider,
|
|
14
|
+
zhCnLanguageProvider,
|
|
15
|
+
}
|