@tomorrowevening/hermes 0.0.2 → 0.0.3

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.
Files changed (130) hide show
  1. package/README.md +7 -0
  2. package/dist/hermes.js +2530 -718
  3. package/dist/hermes.umd.cjs +88 -11
  4. package/dist/images/android-chrome-192x192.png +0 -0
  5. package/dist/images/android-chrome-512x512.png +0 -0
  6. package/dist/images/apple-touch-icon.png +0 -0
  7. package/dist/images/favicon-16x16.png +0 -0
  8. package/dist/images/favicon-32x32.png +0 -0
  9. package/dist/images/favicon.ico +0 -0
  10. package/dist/images/milkyWay/dark-s_nx.jpg +0 -0
  11. package/dist/images/milkyWay/dark-s_ny.jpg +0 -0
  12. package/dist/images/milkyWay/dark-s_nz.jpg +0 -0
  13. package/dist/images/milkyWay/dark-s_px.jpg +0 -0
  14. package/dist/images/milkyWay/dark-s_py.jpg +0 -0
  15. package/dist/images/milkyWay/dark-s_pz.jpg +0 -0
  16. package/dist/images/site.webmanifest +1 -0
  17. package/dist/images/uv_grid_opengl.jpg +0 -0
  18. package/dist/index-0a798fe4.js +6862 -0
  19. package/dist/index-7bad599d.css +1 -0
  20. package/dist/index.html +18 -0
  21. package/dist/models/Flair.fbx +0 -0
  22. package/dist/models/Thriller2.fbx +0 -0
  23. package/dist/models/Thriller4.fbx +0 -0
  24. package/dist/style.css +1 -1
  25. package/package.json +8 -3
  26. package/src/core/Application.ts +28 -36
  27. package/src/core/RemoteController.ts +148 -98
  28. package/src/core/remote/BaseRemote.ts +3 -3
  29. package/src/core/remote/RemoteComponents.ts +5 -8
  30. package/src/core/remote/RemoteTheatre.ts +56 -54
  31. package/src/core/remote/RemoteThree.ts +77 -0
  32. package/src/core/remote/RemoteTweakpane.ts +71 -78
  33. package/src/core/types.ts +14 -4
  34. package/src/editor/Editor.tsx +8 -6
  35. package/src/editor/components/Draggable.tsx +20 -20
  36. package/src/editor/components/DraggableItem.tsx +6 -6
  37. package/src/editor/components/Dropdown.tsx +22 -14
  38. package/src/editor/components/DropdownItem.tsx +19 -19
  39. package/src/editor/components/NavButton.tsx +1 -1
  40. package/src/editor/components/content.ts +2 -0
  41. package/src/editor/components/icons/CloseIcon.tsx +1 -1
  42. package/src/editor/components/icons/DragIcon.tsx +1 -1
  43. package/src/editor/global.ts +9 -4
  44. package/src/editor/sceneHierarchy/Accordion.tsx +40 -0
  45. package/src/editor/sceneHierarchy/ChildObject.tsx +17 -17
  46. package/src/editor/sceneHierarchy/ContainerObject.tsx +7 -8
  47. package/src/editor/sceneHierarchy/SceneHierarchy.tsx +52 -49
  48. package/src/editor/sceneHierarchy/ToggleBtn.tsx +26 -0
  49. package/src/editor/sceneHierarchy/inspector/Inspector.tsx +82 -0
  50. package/src/editor/sceneHierarchy/inspector/InspectorField.tsx +178 -0
  51. package/src/editor/sceneHierarchy/inspector/InspectorGroup.tsx +55 -0
  52. package/src/editor/sceneHierarchy/inspector/MultiView/CameraWindow.tsx +61 -0
  53. package/src/editor/sceneHierarchy/inspector/MultiView/InfiniteGridHelper.ts +24 -0
  54. package/src/editor/sceneHierarchy/inspector/MultiView/InfiniteGridMaterial.ts +127 -0
  55. package/src/editor/sceneHierarchy/inspector/MultiView/MultiView.scss +93 -0
  56. package/src/editor/sceneHierarchy/inspector/MultiView/MultiView.tsx +450 -0
  57. package/src/editor/sceneHierarchy/inspector/SceneInspector.tsx +72 -0
  58. package/src/editor/sceneHierarchy/inspector/inspector.scss +150 -0
  59. package/src/editor/sceneHierarchy/inspector/utils/InspectCamera.tsx +75 -0
  60. package/src/editor/sceneHierarchy/inspector/utils/InspectLight.tsx +62 -0
  61. package/src/editor/sceneHierarchy/inspector/utils/InspectMaterial.tsx +340 -0
  62. package/src/editor/sceneHierarchy/inspector/utils/InspectTransform.tsx +124 -0
  63. package/src/editor/sceneHierarchy/types.ts +116 -5
  64. package/src/editor/sceneHierarchy/utils.ts +207 -11
  65. package/src/editor/scss/_debug.scss +9 -19
  66. package/src/editor/scss/_dropdown.scss +1 -0
  67. package/src/editor/scss/_sceneHierarchy.scss +148 -48
  68. package/src/editor/scss/index.scss +13 -6
  69. package/src/editor/utils.ts +42 -5
  70. package/src/example/CustomEditor.tsx +40 -0
  71. package/src/example/components/App.tsx +164 -0
  72. package/src/example/constants.ts +40 -9
  73. package/src/example/main.tsx +5 -45
  74. package/src/example/three/CustomMaterial.ts +58 -0
  75. package/src/example/three/ExampleScene.ts +176 -0
  76. package/src/example/three/FBXAnimation.ts +39 -0
  77. package/src/index.ts +20 -14
  78. package/types/core/Application.d.ts +7 -13
  79. package/types/core/remote/RemoteComponents.d.ts +0 -2
  80. package/types/core/remote/RemoteThree.d.ts +12 -0
  81. package/types/core/remote/RemoteTweakpane.d.ts +3 -3
  82. package/types/core/types.d.ts +4 -3
  83. package/types/editor/Editor.d.ts +2 -1
  84. package/types/editor/components/content.d.ts +2 -0
  85. package/types/editor/global.d.ts +7 -2
  86. package/types/editor/sceneHierarchy/Accordion.d.ts +10 -0
  87. package/types/editor/sceneHierarchy/SceneHierarchy.d.ts +5 -5
  88. package/types/editor/sceneHierarchy/ToggleBtn.d.ts +7 -0
  89. package/types/editor/sceneHierarchy/inspector/Inspector.d.ts +3 -0
  90. package/types/editor/sceneHierarchy/inspector/InspectorField.d.ts +13 -0
  91. package/types/editor/sceneHierarchy/inspector/InspectorGroup.d.ts +7 -0
  92. package/types/editor/sceneHierarchy/inspector/MultiView/CameraWindow.d.ts +16 -0
  93. package/types/editor/sceneHierarchy/inspector/MultiView/InfiniteGridHelper.d.ts +7 -0
  94. package/types/editor/sceneHierarchy/inspector/MultiView/InfiniteGridMaterial.d.ts +13 -0
  95. package/types/editor/sceneHierarchy/inspector/MultiView/MultiView.d.ts +11 -0
  96. package/types/editor/sceneHierarchy/inspector/SceneInspector.d.ts +7 -0
  97. package/types/editor/sceneHierarchy/inspector/utils/InspectCamera.d.ts +3 -0
  98. package/types/editor/sceneHierarchy/inspector/utils/InspectLight.d.ts +3 -0
  99. package/types/editor/sceneHierarchy/inspector/utils/InspectMaterial.d.ts +8 -0
  100. package/types/editor/sceneHierarchy/inspector/utils/InspectTransform.d.ts +3 -0
  101. package/types/editor/sceneHierarchy/types.d.ts +98 -7
  102. package/types/editor/sceneHierarchy/utils.d.ts +7 -1
  103. package/types/editor/utils.d.ts +3 -0
  104. package/types/example/CustomEditor.d.ts +1 -0
  105. package/types/example/constants.d.ts +15 -3
  106. package/types/example/three/CustomMaterial.d.ts +5 -0
  107. package/types/example/three/ExampleScene.d.ts +18 -0
  108. package/types/example/three/FBXAnimation.d.ts +6 -0
  109. package/types/index.d.ts +5 -0
  110. package/src/example/App.tsx +0 -88
  111. package/types/core/remote/RemoteDebug.d.ts +0 -23
  112. package/types/debug/Editor.d.ts +0 -8
  113. package/types/debug/components/Draggable.d.ts +0 -2
  114. package/types/debug/components/DraggableItem.d.ts +0 -2
  115. package/types/debug/components/Dropdown.d.ts +0 -2
  116. package/types/debug/components/DropdownItem.d.ts +0 -2
  117. package/types/debug/components/NavButton.d.ts +0 -5
  118. package/types/debug/components/icons/CloseIcon.d.ts +0 -2
  119. package/types/debug/components/icons/DragIcon.d.ts +0 -2
  120. package/types/debug/components/types.d.ts +0 -31
  121. package/types/debug/global.d.ts +0 -9
  122. package/types/debug/sceneHierarchy/ChildObject.d.ts +0 -2
  123. package/types/debug/sceneHierarchy/ContainerObject.d.ts +0 -2
  124. package/types/debug/sceneHierarchy/SceneHierarchy.d.ts +0 -13
  125. package/types/debug/sceneHierarchy/types.d.ts +0 -8
  126. package/types/debug/sceneHierarchy/utils.d.ts +0 -2
  127. package/types/debug/utils.d.ts +0 -4
  128. package/types/library.d.ts +0 -14
  129. /package/src/example/{App.css → components/App.css} +0 -0
  130. /package/types/example/{App.d.ts → components/App.d.ts} +0 -0
@@ -1,135 +1,185 @@
1
1
  // Libs
2
- import type { ISheet } from '@theatre/core'
3
- import studio from '@theatre/studio'
2
+ import type { ISheet } from '@theatre/core';
3
+ import studio from '@theatre/studio';
4
4
  // Core
5
- import Application from './Application'
6
- import { ToolEvents, debugDispatcher } from '../editor/global'
7
- import type { BroadcastData, EditorEvent } from './types'
5
+ import Application from './Application';
6
+ import { ToolEvents, debugDispatcher } from '@/editor/global';
7
+ import type { BroadcastData, EditorEvent } from './types';
8
8
 
9
9
  export default function RemoteController(app: Application) {
10
- let activeSheet: ISheet | undefined = undefined
11
-
12
- // Application
13
- const showApp = () => {
14
- studio.ui.hide()
15
-
16
- app.listen((msg: BroadcastData) => {
17
- let value = undefined
18
- switch (msg.event) {
19
- // Components
20
- case 'draggableListUpdate':
21
- debugDispatcher.dispatchEvent({ type: ToolEvents.DRAG_UPDATE, value: msg.data })
22
- break
23
- case 'selectComponent':
24
- debugDispatcher.dispatchEvent({ type: ToolEvents.SELECT_DROPDOWN, value: msg.data })
25
- break
26
-
27
- // GUI Events
28
- case 'addFolder':
29
- app.debug?.addFolder(msg.data.name, msg.data.params, msg.data.parent)
30
- break
31
- case 'bindObject':
32
- app.debug?.bind(msg.data.name, msg.data.params, msg.data.parent)
33
- break
34
- case 'updateBind':
35
- app.debug?.triggerBind(msg.data.id, msg.data.value)
36
- break
37
- case 'addButton':
38
- app.debug?.button(msg.data.name, msg.data.callback, msg.data.parent)
39
- break
40
- case 'clickButton':
41
- app.debug?.triggerButton(msg.data.id)
42
- break
43
-
44
- // Theatre Events
45
- case 'setSheet':
46
- value = app.theatre?.sheets.get(msg.data.sheet)
47
- if (value !== undefined) {
48
- activeSheet = value
49
- studio.setSelection([value])
50
- }
51
- break
52
- case 'setSheetObject':
53
- value = app.theatre?.sheetObjects.get(`${msg.data.sheet}_${msg.data.key}`)
54
- if (value !== undefined) {
55
- studio.setSelection([value])
56
- }
57
- break
58
- case 'updateSheetObject':
59
- value = app.theatre?.sheetObjectCBs.get(msg.data.sheetObject)
60
- if (value !== undefined) value(msg.data.values)
61
- break
62
- case 'updateTimeline':
63
- activeSheet = app.theatre?.sheets.get(msg.data.sheet)
64
- if (activeSheet !== undefined) {
65
- activeSheet.sequence.position = msg.data.position
66
- }
67
- break
68
- }
69
- })
10
+ let activeSheet: ISheet | undefined = undefined;
11
+ const mode = app.editor ? 'editor' : 'app';
12
+
13
+ // Handlers
14
+
15
+ function handleAppBroadcast(msg: BroadcastData) {
16
+ let value = undefined;
17
+
18
+ switch (msg.event) {
19
+ case 'custom':
20
+ debugDispatcher.dispatchEvent({ type: ToolEvents.CUSTOM, value: msg.data });
21
+ break;
22
+
23
+ // Components
24
+ case 'selectComponent':
25
+ debugDispatcher.dispatchEvent({ type: ToolEvents.SELECT_DROPDOWN, value: msg.data });
26
+ break;
27
+ case 'draggableListUpdate':
28
+ debugDispatcher.dispatchEvent({ type: ToolEvents.DRAG_UPDATE, value: msg.data });
29
+ break;
30
+
31
+ // GUI
32
+ case 'addFolder':
33
+ app.components.get('debug')?.addFolder(msg.data.name, msg.data.params, msg.data.parent);
34
+ break;
35
+ case 'bindObject':
36
+ app.components.get('debug')?.bind(msg.data.name, msg.data.params, msg.data.parent);
37
+ break;
38
+ case 'updateBind':
39
+ app.components.get('debug')?.triggerBind(msg.data.id, msg.data.value);
40
+ break;
41
+ case 'addButton':
42
+ app.components.get('debug')?.button(msg.data.name, msg.data.callback, msg.data.parent);
43
+ break;
44
+ case 'clickButton':
45
+ app.components.get('debug')?.triggerButton(msg.data.id);
46
+ break;
47
+
48
+ // Theatre
49
+ case 'setSheet':
50
+ value = app.components.get('theatre')?.sheets.get(msg.data.sheet);
51
+ if (value !== undefined) {
52
+ activeSheet = value;
53
+ studio.setSelection([value]);
54
+ }
55
+ break;
56
+ case 'setSheetObject':
57
+ value = app.components.get('theatre')?.sheetObjects.get(`${msg.data.sheet}_${msg.data.key}`);
58
+ if (value !== undefined) {
59
+ studio.setSelection([value]);
60
+ }
61
+ break;
62
+ case 'updateSheetObject':
63
+ value = app.components.get('theatre')?.sheetObjectCBs.get(msg.data.sheetObject);
64
+ // @ts-ignore
65
+ if (value !== undefined) value(msg.data.values);
66
+ break;
67
+ case 'updateTimeline':
68
+ activeSheet = app.components.get('theatre')?.sheets.get(msg.data.sheet);
69
+ if (activeSheet !== undefined) {
70
+ activeSheet.sequence.position = msg.data.position;
71
+ }
72
+ break;
73
+
74
+ // Three
75
+ case 'getScene':
76
+ debugDispatcher.dispatchEvent({ type: ToolEvents.GET_SCENE });
77
+ break;
78
+ case 'getObject':
79
+ debugDispatcher.dispatchEvent({ type: ToolEvents.GET_OBJECT, value: msg.data });
80
+ break;
81
+ case 'updateObject':
82
+ debugDispatcher.dispatchEvent({ type: ToolEvents.UPDATE_OBJECT, value: msg.data });
83
+ break;
84
+ case 'createTexture':
85
+ debugDispatcher.dispatchEvent({ type: ToolEvents.CREATE_TEXTURE, value: msg.data });
86
+ break;
87
+ case 'requestMethod':
88
+ debugDispatcher.dispatchEvent({ type: ToolEvents.REQUEST_METHOD, value: msg.data });
89
+ break;
90
+ }
70
91
  }
71
92
 
72
- // Editor
73
- const showEditor = () => {
74
- studio.ui.restore()
93
+ function handleEditorBroadcast(msg: BroadcastData) {
94
+ switch (msg.event) {
95
+ case 'custom':
96
+ debugDispatcher.dispatchEvent({ type: ToolEvents.CUSTOM, value: msg.data });
97
+ break;
75
98
 
76
- studio.onSelectionChange((value: any[]) => {
77
- if (value.length < 1) return
99
+ // Three
100
+ case 'setObject':
101
+ debugDispatcher.dispatchEvent({ type: ToolEvents.SET_OBJECT, value: msg.data });
102
+ break;
103
+ case 'setScene':
104
+ debugDispatcher.dispatchEvent({ type: ToolEvents.SET_SCENE, value: msg.data });
105
+ break;
106
+ }
107
+ }
78
108
 
109
+ // App type
110
+
111
+ function AppControl() {
112
+ studio.ui.hide();
113
+ }
114
+
115
+ function EditorControl() {
116
+ studio.ui.restore();
117
+ studio.onSelectionChange((value: any[]) => {
118
+ if (value.length < 1) return;
119
+
79
120
  value.forEach((obj: any) => {
80
- let id = obj.address.sheetId
81
- let type: EditorEvent = 'setSheet'
82
- let data = {}
121
+ let id = obj.address.sheetId;
122
+ let type: EditorEvent = 'setSheet';
123
+ let data = {};
83
124
  switch (obj.type) {
84
125
  case 'Theatre_Sheet_PublicAPI':
85
- type = 'setSheet'
126
+ type = 'setSheet';
86
127
  data = {
87
128
  sheet: obj.address.sheetId,
88
- }
89
- activeSheet = app.theatre?.sheets.get(obj.address.sheetId)
90
- break
91
-
129
+ };
130
+ activeSheet = app.components.get('theatre')?.sheets.get(obj.address.sheetId);
131
+ break;
132
+
92
133
  case 'Theatre_SheetObject_PublicAPI':
93
- type = 'setSheetObject'
94
- id += `_${obj.address.objectKey}`
134
+ type = 'setSheetObject';
135
+ id += `_${obj.address.objectKey}`;
95
136
  data = {
96
137
  id: id,
97
138
  sheet: obj.address.sheetId,
98
139
  key: obj.address.objectKey,
99
- }
100
- break
140
+ };
141
+ break;
101
142
  }
102
- app.send({ event: type, data: data })
103
- })
104
- })
105
-
143
+ app.send({ event: type, target: 'app', data: data });
144
+ });
145
+ });
146
+
106
147
  // Timeline
107
- let position = 0
148
+ let position = 0;
108
149
  const onRafUpdate = () => {
109
150
  if (
110
151
  activeSheet !== undefined &&
111
152
  position !== activeSheet.sequence.position
112
153
  ) {
113
- position = activeSheet.sequence.position
114
- const t = activeSheet as ISheet
154
+ position = activeSheet.sequence.position;
155
+ const t = activeSheet as ISheet;
115
156
  app.send({
116
157
  event: 'updateTimeline',
158
+ target: 'app',
117
159
  data: {
118
160
  position: position,
119
161
  sheet: t.address.sheetId,
120
162
  },
121
- })
163
+ });
122
164
  }
123
- }
165
+ };
124
166
  const onRaf = () => {
125
- onRafUpdate()
126
- requestAnimationFrame(onRaf)
127
- }
128
- onRafUpdate() // Initial position
129
- onRaf()
167
+ onRafUpdate();
168
+ requestAnimationFrame(onRaf);
169
+ };
170
+ onRafUpdate(); // Initial position
171
+ onRaf();
172
+ }
130
173
 
174
+ // Begin app
131
175
 
132
- }
176
+ app.listen((msg: BroadcastData) => {
177
+ if (mode === 'app') {
178
+ handleAppBroadcast(msg);
179
+ } else {
180
+ handleEditorBroadcast(msg);
181
+ }
182
+ });
133
183
 
134
- app.editor ? showEditor() : showApp()
184
+ app.editor ? EditorControl() : AppControl();
135
185
  }
@@ -1,13 +1,13 @@
1
- import Application from '../Application'
1
+ import Application from '../Application';
2
2
 
3
3
  /**
4
4
  * Base class for remote-related extensions
5
5
  */
6
6
  export default class BaseRemote {
7
- protected app: Application
7
+ protected app: Application;
8
8
 
9
9
  constructor(app: Application) {
10
- this.app = app
10
+ this.app = app;
11
11
  }
12
12
 
13
13
  dispose() {
@@ -1,32 +1,29 @@
1
1
  // Core
2
- import Application from '../Application'
3
- import BaseRemote from './BaseRemote'
2
+ import BaseRemote from './BaseRemote';
4
3
 
5
4
  /**
6
5
  * Communicates between custom React Components
7
6
  */
8
7
  export default class RemoteComponents extends BaseRemote {
9
- constructor(app: Application) {
10
- super(app)
11
- }
12
-
13
8
  selectDropdown(dropdown: string, value: any) {
14
9
  this.app.send({
15
10
  event: 'selectComponent',
11
+ target: 'app',
16
12
  data: {
17
13
  dropdown,
18
14
  value
19
15
  }
20
- })
16
+ });
21
17
  }
22
18
 
23
19
  updateDropdown(dropdown: string, list: string[]) {
24
20
  this.app.send({
25
21
  event: 'draggableListUpdate',
22
+ target: 'app',
26
23
  data: {
27
24
  dropdown,
28
25
  value: list
29
26
  }
30
- })
27
+ });
31
28
  }
32
29
  }
@@ -1,49 +1,50 @@
1
1
  // Libs
2
- import { getProject } from '@theatre/core'
3
- import type { IProject, IProjectConfig, ISheet, ISheetObject } from '@theatre/core'
2
+ import { getProject } from '@theatre/core';
3
+ import type { IProject, IProjectConfig, ISheet, ISheetObject } from '@theatre/core';
4
+ import {} from '@theatre/studio';
4
5
  // Core
5
- import Application from '../Application'
6
- import BaseRemote from './BaseRemote'
7
- import { isColor } from '../../editor/utils'
8
- import { noop } from '../types'
9
- import type { DataUpdateCallback, VoidCallback } from '../types'
6
+ import Application from '../Application';
7
+ import BaseRemote from './BaseRemote';
8
+ import { isColor } from '@/editor/utils';
9
+ import { noop } from '../types';
10
+ import type { DataUpdateCallback, VoidCallback } from '../types';
10
11
 
11
12
  export default class RemoteTheatre extends BaseRemote {
12
- project: IProject | undefined
13
- sheets: Map<string, ISheet>
14
- sheetObjects: Map<string, ISheetObject>
15
- sheetObjectCBs: Map<string, DataUpdateCallback>
16
- sheetObjectUnsubscribe: Map<string, VoidCallback>
13
+ project: IProject | undefined;
14
+ sheets: Map<string, ISheet>;
15
+ sheetObjects: Map<string, ISheetObject>;
16
+ sheetObjectCBs: Map<string, DataUpdateCallback>;
17
+ sheetObjectUnsubscribe: Map<string, VoidCallback>;
17
18
 
18
19
  constructor(app: Application, projectName: string, projectConfig?: IProjectConfig | undefined) {
19
- super(app)
20
- this.project = getProject(projectName, projectConfig)
21
- this.sheets = new Map()
22
- this.sheetObjects = new Map()
23
- this.sheetObjectCBs = new Map()
24
- this.sheetObjectUnsubscribe = new Map()
20
+ super(app);
21
+ this.project = getProject(projectName, projectConfig);
22
+ this.sheets = new Map();
23
+ this.sheetObjects = new Map();
24
+ this.sheetObjectCBs = new Map();
25
+ this.sheetObjectUnsubscribe = new Map();
25
26
  }
26
27
 
27
28
  override dispose(): void {
28
- this.project = undefined
29
- this.sheets = new Map()
30
- this.sheetObjects = new Map()
31
- this.sheetObjectCBs = new Map()
32
- this.sheetObjectUnsubscribe = new Map()
29
+ this.project = undefined;
30
+ this.sheets = new Map();
31
+ this.sheetObjects = new Map();
32
+ this.sheetObjectCBs = new Map();
33
+ this.sheetObjectUnsubscribe = new Map();
33
34
  }
34
35
 
35
36
  sheet(name: string): ISheet | undefined {
36
37
  if (this.project === undefined) {
37
- console.error('Theatre Project hasn\'t been created yet.')
38
- return undefined
38
+ console.error('Theatre Project hasn\'t been created yet.');
39
+ return undefined;
39
40
  }
40
41
 
41
- let sheet = this.sheets.get(name)
42
- if (sheet !== undefined) return sheet
42
+ let sheet = this.sheets.get(name);
43
+ if (sheet !== undefined) return sheet;
43
44
 
44
- sheet = this.project?.sheet(name)
45
- this.sheets.set(name, sheet)
46
- return sheet
45
+ sheet = this.project?.sheet(name);
46
+ this.sheets.set(name, sheet);
47
+ return sheet;
47
48
  }
48
49
 
49
50
  sheetObject(
@@ -53,27 +54,27 @@ export default class RemoteTheatre extends BaseRemote {
53
54
  onUpdate?: DataUpdateCallback,
54
55
  ): ISheetObject | undefined {
55
56
  if (this.project === undefined) {
56
- console.error('Theatre Project hasn\'t been created yet.')
57
- return undefined
57
+ console.error('Theatre Project hasn\'t been created yet.');
58
+ return undefined;
58
59
  }
59
- const sheet = this.sheets.get(sheetName)
60
- if (sheet === undefined) return undefined
60
+ const sheet = this.sheets.get(sheetName);
61
+ if (sheet === undefined) return undefined;
61
62
 
62
- const objName = `${sheetName}_${key}`
63
- let obj = this.sheetObjects.get(objName)
63
+ const objName = `${sheetName}_${key}`;
64
+ let obj = this.sheetObjects.get(objName);
64
65
  if (obj !== undefined) {
65
- obj = sheet.object(key, {...props, ...obj.value}, {reconfigure: true})
66
- return obj
66
+ obj = sheet.object(key, {...props, ...obj.value}, {reconfigure: true});
67
+ return obj;
67
68
  }
68
69
 
69
- obj = sheet.object(key, props)
70
- this.sheetObjects.set(objName, obj)
71
- this.sheetObjectCBs.set(objName, onUpdate !== undefined ? onUpdate : noop)
70
+ obj = sheet.object(key, props);
71
+ this.sheetObjects.set(objName, obj);
72
+ this.sheetObjectCBs.set(objName, onUpdate !== undefined ? onUpdate : noop);
72
73
 
73
74
  const unsubscribe = obj.onValuesChange((values: any) => {
74
75
  if (this.app.editor) {
75
76
  for (const i in values) {
76
- const value = values[i]
77
+ const value = values[i];
77
78
  if (typeof value === 'object') {
78
79
  if (isColor(value)) {
79
80
  values[i] = {
@@ -81,37 +82,38 @@ export default class RemoteTheatre extends BaseRemote {
81
82
  g: value.g,
82
83
  b: value.b,
83
84
  a: value.a,
84
- }
85
+ };
85
86
  }
86
87
  }
87
88
  }
88
89
  this.app.send({
89
90
  event: 'updateSheetObject',
91
+ target: 'app',
90
92
  data: {
91
93
  sheetObject: objName,
92
94
  values: values,
93
95
  },
94
- })
96
+ });
95
97
  } else {
96
- const callback = this.sheetObjectCBs.get(objName)
97
- if (callback !== undefined) callback(values)
98
+ const callback = this.sheetObjectCBs.get(objName);
99
+ if (callback !== undefined) callback(values);
98
100
  }
99
- })
100
- this.sheetObjectUnsubscribe.set(objName, unsubscribe)
101
+ });
102
+ this.sheetObjectUnsubscribe.set(objName, unsubscribe);
101
103
 
102
- return obj
104
+ return obj;
103
105
  }
104
106
 
105
107
  unsubscribe(sheet: ISheetObject) {
106
108
  if (this.project === undefined) {
107
- console.error('Theatre Project hasn\'t been created yet.')
108
- return undefined
109
+ console.error('Theatre Project hasn\'t been created yet.');
110
+ return undefined;
109
111
  }
110
112
 
111
- const id = `${sheet.address.sheetId}_${sheet.address.objectKey}`
112
- const unsubscribe = this.sheetObjectUnsubscribe.get(id)
113
+ const id = `${sheet.address.sheetId}_${sheet.address.objectKey}`;
114
+ const unsubscribe = this.sheetObjectUnsubscribe.get(id);
113
115
  if (unsubscribe !== undefined) {
114
- unsubscribe()
116
+ unsubscribe();
115
117
  }
116
118
  }
117
119
  }
@@ -0,0 +1,77 @@
1
+ import { Scene } from 'three';
2
+ import BaseRemote from './BaseRemote';
3
+ import { stripObject, stripScene } from '@/editor/sceneHierarchy/utils';
4
+
5
+ export default class RemoteThree extends BaseRemote {
6
+ scene?: Scene = undefined;
7
+
8
+ getObject(uuid: string) {
9
+ this.app.send({
10
+ event: 'getObject',
11
+ target: 'app',
12
+ data: uuid,
13
+ });
14
+ }
15
+
16
+ setObject(value: any) {
17
+ const stripped = stripObject(value);
18
+ this.app.send({
19
+ event: 'setObject',
20
+ target: 'editor',
21
+ data: stripped,
22
+ });
23
+ }
24
+
25
+ requestMethod(uuid: string, key: string, value?: any) {
26
+ this.app.send({
27
+ event: 'requestMethod',
28
+ target: 'app',
29
+ data: {
30
+ uuid,
31
+ key,
32
+ value
33
+ },
34
+ });
35
+ }
36
+
37
+ updateObject(uuid: string, key: string, value: any) {
38
+ this.app.send({
39
+ event: 'updateObject',
40
+ target: 'app',
41
+ data: {
42
+ uuid,
43
+ key,
44
+ value
45
+ },
46
+ });
47
+ }
48
+
49
+ createTexture(uuid: string, key: string, value: any) {
50
+ this.app.send({
51
+ event: 'createTexture',
52
+ target: 'app',
53
+ data: {
54
+ uuid,
55
+ key,
56
+ value
57
+ },
58
+ });
59
+ }
60
+
61
+ getScene() {
62
+ this.app.send({
63
+ event: 'getScene',
64
+ target: 'app',
65
+ });
66
+ }
67
+
68
+ setScene(value: Scene) {
69
+ this.scene = value;
70
+ const stripped = stripScene(value);
71
+ this.app.send({
72
+ event: 'setScene',
73
+ target: 'editor',
74
+ data: stripped,
75
+ });
76
+ }
77
+ }