@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 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,2 @@
1
+ export * from './locale'
2
+ export { SceneService } from './SceneService'
@@ -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
+ }
@@ -0,0 +1,2 @@
1
+ export * from './LanguageProvider'
2
+ export * from './Language'