spoint 0.1.0 → 0.1.11

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 (204) hide show
  1. package/README.md +134 -209
  2. package/SKILL.md +95 -0
  3. package/apps/environment/index.js +200 -1
  4. package/apps/environment/models/decorative/.gitkeep +0 -0
  5. package/apps/environment/models/hazards/.gitkeep +0 -0
  6. package/apps/environment/models/interactive/.gitkeep +0 -0
  7. package/apps/environment/models/structures/.gitkeep +0 -0
  8. package/apps/environment/smartObjects.js +114 -0
  9. package/apps/interactable/index.js +155 -0
  10. package/apps/physics-crate/index.js +15 -9
  11. package/apps/power-crate/index.js +18 -12
  12. package/apps/tps-game/$GDUPI.vrm +0 -0
  13. package/apps/tps-game/Cleetus.vrm +0 -0
  14. package/apps/tps-game/index.js +185 -27
  15. package/apps/world/index.js +68 -22
  16. package/bin/create-app.js +337 -0
  17. package/client/ARControls.js +301 -0
  18. package/client/LoadingManager.js +117 -0
  19. package/client/MobileControls.js +1122 -0
  20. package/client/anim-lib.glb +0 -0
  21. package/client/animation.js +306 -0
  22. package/client/app.js +1341 -65
  23. package/client/camera.js +191 -33
  24. package/client/createLoadingScreen.js +69 -0
  25. package/client/editor/bridge.js +113 -0
  26. package/client/editor/css/main.css +794 -0
  27. package/client/editor/images/rotate.svg +4 -0
  28. package/client/editor/images/scale.svg +4 -0
  29. package/client/editor/images/translate.svg +4 -0
  30. package/client/editor/index.html +103 -0
  31. package/client/editor/js/Command.js +41 -0
  32. package/client/editor/js/Config.js +81 -0
  33. package/client/editor/js/Editor.js +785 -0
  34. package/client/editor/js/EditorControls.js +438 -0
  35. package/client/editor/js/History.js +321 -0
  36. package/client/editor/js/Loader.js +987 -0
  37. package/client/editor/js/LoaderUtils.js +90 -0
  38. package/client/editor/js/Menubar.Add.js +510 -0
  39. package/client/editor/js/Menubar.Edit.js +145 -0
  40. package/client/editor/js/Menubar.File.js +466 -0
  41. package/client/editor/js/Menubar.Help.js +73 -0
  42. package/client/editor/js/Menubar.Status.js +51 -0
  43. package/client/editor/js/Menubar.View.js +183 -0
  44. package/client/editor/js/Menubar.js +27 -0
  45. package/client/editor/js/Player.js +53 -0
  46. package/client/editor/js/Resizer.js +58 -0
  47. package/client/editor/js/Script.js +503 -0
  48. package/client/editor/js/Selector.js +102 -0
  49. package/client/editor/js/Sidebar.Geometry.BoxGeometry.js +121 -0
  50. package/client/editor/js/Sidebar.Geometry.BufferGeometry.js +115 -0
  51. package/client/editor/js/Sidebar.Geometry.CapsuleGeometry.js +97 -0
  52. package/client/editor/js/Sidebar.Geometry.CircleGeometry.js +97 -0
  53. package/client/editor/js/Sidebar.Geometry.CylinderGeometry.js +121 -0
  54. package/client/editor/js/Sidebar.Geometry.DodecahedronGeometry.js +73 -0
  55. package/client/editor/js/Sidebar.Geometry.ExtrudeGeometry.js +196 -0
  56. package/client/editor/js/Sidebar.Geometry.IcosahedronGeometry.js +73 -0
  57. package/client/editor/js/Sidebar.Geometry.LatheGeometry.js +98 -0
  58. package/client/editor/js/Sidebar.Geometry.Modifiers.js +73 -0
  59. package/client/editor/js/Sidebar.Geometry.OctahedronGeometry.js +74 -0
  60. package/client/editor/js/Sidebar.Geometry.PlaneGeometry.js +97 -0
  61. package/client/editor/js/Sidebar.Geometry.RingGeometry.js +121 -0
  62. package/client/editor/js/Sidebar.Geometry.ShapeGeometry.js +76 -0
  63. package/client/editor/js/Sidebar.Geometry.SphereGeometry.js +133 -0
  64. package/client/editor/js/Sidebar.Geometry.TetrahedronGeometry.js +74 -0
  65. package/client/editor/js/Sidebar.Geometry.TorusGeometry.js +109 -0
  66. package/client/editor/js/Sidebar.Geometry.TorusKnotGeometry.js +121 -0
  67. package/client/editor/js/Sidebar.Geometry.TubeGeometry.js +135 -0
  68. package/client/editor/js/Sidebar.Geometry.js +332 -0
  69. package/client/editor/js/Sidebar.Material.BooleanProperty.js +60 -0
  70. package/client/editor/js/Sidebar.Material.ColorProperty.js +87 -0
  71. package/client/editor/js/Sidebar.Material.ConstantProperty.js +62 -0
  72. package/client/editor/js/Sidebar.Material.MapProperty.js +249 -0
  73. package/client/editor/js/Sidebar.Material.NumberProperty.js +60 -0
  74. package/client/editor/js/Sidebar.Material.Program.js +73 -0
  75. package/client/editor/js/Sidebar.Material.RangeValueProperty.js +63 -0
  76. package/client/editor/js/Sidebar.Material.js +751 -0
  77. package/client/editor/js/Sidebar.Object.Animation.js +102 -0
  78. package/client/editor/js/Sidebar.Object.js +898 -0
  79. package/client/editor/js/Sidebar.Project.App.js +165 -0
  80. package/client/editor/js/Sidebar.Project.Image.js +225 -0
  81. package/client/editor/js/Sidebar.Project.Materials.js +82 -0
  82. package/client/editor/js/Sidebar.Project.Renderer.js +144 -0
  83. package/client/editor/js/Sidebar.Project.Video.js +242 -0
  84. package/client/editor/js/Sidebar.Project.js +31 -0
  85. package/client/editor/js/Sidebar.Properties.js +73 -0
  86. package/client/editor/js/Sidebar.Scene.js +585 -0
  87. package/client/editor/js/Sidebar.Script.js +129 -0
  88. package/client/editor/js/Sidebar.Settings.History.js +146 -0
  89. package/client/editor/js/Sidebar.Settings.Shortcuts.js +175 -0
  90. package/client/editor/js/Sidebar.Settings.js +60 -0
  91. package/client/editor/js/Sidebar.js +41 -0
  92. package/client/editor/js/Storage.js +98 -0
  93. package/client/editor/js/Strings.js +2028 -0
  94. package/client/editor/js/Toolbar.js +84 -0
  95. package/client/editor/js/Viewport.Controls.js +92 -0
  96. package/client/editor/js/Viewport.Info.js +136 -0
  97. package/client/editor/js/Viewport.Pathtracer.js +91 -0
  98. package/client/editor/js/Viewport.ViewHelper.js +39 -0
  99. package/client/editor/js/Viewport.XR.js +222 -0
  100. package/client/editor/js/Viewport.js +900 -0
  101. package/client/editor/js/commands/AddObjectCommand.js +68 -0
  102. package/client/editor/js/commands/AddScriptCommand.js +75 -0
  103. package/client/editor/js/commands/Commands.js +23 -0
  104. package/client/editor/js/commands/MoveObjectCommand.js +111 -0
  105. package/client/editor/js/commands/MultiCmdsCommand.js +85 -0
  106. package/client/editor/js/commands/RemoveObjectCommand.js +88 -0
  107. package/client/editor/js/commands/RemoveScriptCommand.js +81 -0
  108. package/client/editor/js/commands/SetColorCommand.js +73 -0
  109. package/client/editor/js/commands/SetGeometryCommand.js +87 -0
  110. package/client/editor/js/commands/SetGeometryValueCommand.js +70 -0
  111. package/client/editor/js/commands/SetMaterialColorCommand.js +86 -0
  112. package/client/editor/js/commands/SetMaterialCommand.js +79 -0
  113. package/client/editor/js/commands/SetMaterialMapCommand.js +143 -0
  114. package/client/editor/js/commands/SetMaterialRangeCommand.js +91 -0
  115. package/client/editor/js/commands/SetMaterialValueCommand.js +90 -0
  116. package/client/editor/js/commands/SetMaterialVectorCommand.js +79 -0
  117. package/client/editor/js/commands/SetPositionCommand.js +84 -0
  118. package/client/editor/js/commands/SetRotationCommand.js +84 -0
  119. package/client/editor/js/commands/SetScaleCommand.js +84 -0
  120. package/client/editor/js/commands/SetSceneCommand.js +103 -0
  121. package/client/editor/js/commands/SetScriptValueCommand.js +80 -0
  122. package/client/editor/js/commands/SetShadowValueCommand.js +73 -0
  123. package/client/editor/js/commands/SetUuidCommand.js +70 -0
  124. package/client/editor/js/commands/SetValueCommand.js +75 -0
  125. package/client/editor/js/libs/acorn/acorn.js +3236 -0
  126. package/client/editor/js/libs/acorn/acorn_loose.js +1299 -0
  127. package/client/editor/js/libs/acorn/walk.js +344 -0
  128. package/client/editor/js/libs/app/index.html +57 -0
  129. package/client/editor/js/libs/app.js +251 -0
  130. package/client/editor/js/libs/codemirror/addon/dialog.css +32 -0
  131. package/client/editor/js/libs/codemirror/addon/dialog.js +163 -0
  132. package/client/editor/js/libs/codemirror/addon/show-hint.css +36 -0
  133. package/client/editor/js/libs/codemirror/addon/show-hint.js +529 -0
  134. package/client/editor/js/libs/codemirror/addon/tern.css +87 -0
  135. package/client/editor/js/libs/codemirror/addon/tern.js +750 -0
  136. package/client/editor/js/libs/codemirror/codemirror.css +344 -0
  137. package/client/editor/js/libs/codemirror/codemirror.js +9849 -0
  138. package/client/editor/js/libs/codemirror/mode/glsl.js +233 -0
  139. package/client/editor/js/libs/codemirror/mode/javascript.js +959 -0
  140. package/client/editor/js/libs/codemirror/theme/monokai.css +41 -0
  141. package/client/editor/js/libs/esprima.js +6401 -0
  142. package/client/editor/js/libs/jsonlint.js +453 -0
  143. package/client/editor/js/libs/signals.min.js +14 -0
  144. package/client/editor/js/libs/tern-threejs/threejs.js +5031 -0
  145. package/client/editor/js/libs/ternjs/comment.js +87 -0
  146. package/client/editor/js/libs/ternjs/def.js +588 -0
  147. package/client/editor/js/libs/ternjs/doc_comment.js +401 -0
  148. package/client/editor/js/libs/ternjs/infer.js +1635 -0
  149. package/client/editor/js/libs/ternjs/polyfill.js +80 -0
  150. package/client/editor/js/libs/ternjs/signal.js +26 -0
  151. package/client/editor/js/libs/ternjs/tern.js +993 -0
  152. package/client/editor/js/libs/ui.js +1346 -0
  153. package/client/editor/js/libs/ui.three.js +855 -0
  154. package/client/facial-animation.js +455 -0
  155. package/client/index.html +7 -4
  156. package/client/loading.css +147 -0
  157. package/client/loading.html +25 -0
  158. package/client/style.css +251 -0
  159. package/package.json +7 -3
  160. package/server.js +9 -1
  161. package/src/apps/AppContext.js +1 -1
  162. package/src/apps/AppLoader.js +50 -37
  163. package/src/apps/AppRuntime.js +32 -8
  164. package/src/client/InputHandler.js +233 -0
  165. package/src/client/JitterBuffer.js +207 -0
  166. package/src/client/KalmanFilter.js +125 -0
  167. package/src/client/MessageHandler.js +101 -0
  168. package/src/client/PhysicsNetworkClient.js +141 -68
  169. package/src/client/ReconnectManager.js +62 -0
  170. package/src/client/SmoothInterpolation.js +127 -0
  171. package/src/client/SnapshotProcessor.js +144 -0
  172. package/src/connection/ConnectionManager.js +21 -3
  173. package/src/connection/SessionStore.js +13 -3
  174. package/src/index.client.js +4 -6
  175. package/src/netcode/EventLog.js +29 -15
  176. package/src/netcode/LagCompensator.js +25 -26
  177. package/src/netcode/NetworkState.js +4 -1
  178. package/src/netcode/PhysicsIntegration.js +20 -6
  179. package/src/netcode/PlayerManager.js +10 -2
  180. package/src/netcode/SnapshotEncoder.js +66 -19
  181. package/src/netcode/TickSystem.js +13 -4
  182. package/src/physics/World.js +66 -13
  183. package/src/protocol/msgpack.js +90 -63
  184. package/src/sdk/ReloadHandlers.js +12 -2
  185. package/src/sdk/ReloadManager.js +5 -0
  186. package/src/sdk/ServerHandlers.js +50 -11
  187. package/src/sdk/StaticHandler.js +22 -6
  188. package/src/sdk/TickHandler.js +101 -34
  189. package/src/sdk/scaffold.js +31 -0
  190. package/src/sdk/server.js +59 -33
  191. package/src/shared/movement.js +2 -1
  192. package/src/spatial/Octree.js +5 -0
  193. package/apps/interactive-door/index.js +0 -33
  194. package/apps/patrol-npc/index.js +0 -37
  195. package/src/connection/QualityMonitor.js +0 -46
  196. package/src/debug/StateInspector.js +0 -42
  197. package/src/index.js +0 -1
  198. package/src/index.server.js +0 -27
  199. package/src/protocol/Codec.js +0 -60
  200. package/src/protocol/SequenceTracker.js +0 -71
  201. package/src/sdk/ClientMessageHandler.js +0 -80
  202. package/src/sdk/client.js +0 -122
  203. package/world/kaira.glb +0 -0
  204. package/world/schwust.glb +0 -0
@@ -0,0 +1,133 @@
1
+ import * as THREE from 'three';
2
+
3
+ import { UIDiv, UIRow, UIText, UIInteger, UINumber } from './libs/ui.js';
4
+
5
+ import { SetGeometryCommand } from './commands/SetGeometryCommand.js';
6
+
7
+ function GeometryParametersPanel( editor, object ) {
8
+
9
+ const strings = editor.strings;
10
+ const signals = editor.signals;
11
+
12
+ const container = new UIDiv();
13
+
14
+ const geometry = object.geometry;
15
+ const parameters = geometry.parameters;
16
+
17
+ // radius
18
+
19
+ const radiusRow = new UIRow();
20
+ const radius = new UINumber( parameters.radius ).onChange( update );
21
+
22
+ radiusRow.add( new UIText( strings.getKey( 'sidebar/geometry/sphere_geometry/radius' ) ).setClass( 'Label' ) );
23
+ radiusRow.add( radius );
24
+
25
+ container.add( radiusRow );
26
+
27
+ // widthSegments
28
+
29
+ const widthSegmentsRow = new UIRow();
30
+ const widthSegments = new UIInteger( parameters.widthSegments ).setRange( 1, Infinity ).onChange( update );
31
+
32
+ widthSegmentsRow.add( new UIText( strings.getKey( 'sidebar/geometry/sphere_geometry/widthsegments' ) ).setClass( 'Label' ) );
33
+ widthSegmentsRow.add( widthSegments );
34
+
35
+ container.add( widthSegmentsRow );
36
+
37
+ // heightSegments
38
+
39
+ const heightSegmentsRow = new UIRow();
40
+ const heightSegments = new UIInteger( parameters.heightSegments ).setRange( 1, Infinity ).onChange( update );
41
+
42
+ heightSegmentsRow.add( new UIText( strings.getKey( 'sidebar/geometry/sphere_geometry/heightsegments' ) ).setClass( 'Label' ) );
43
+ heightSegmentsRow.add( heightSegments );
44
+
45
+ container.add( heightSegmentsRow );
46
+
47
+ // phiStart
48
+
49
+ const phiStartRow = new UIRow();
50
+ const phiStart = new UINumber( parameters.phiStart * THREE.MathUtils.RAD2DEG ).setUnit( '°' ).setStep( 10 ).onChange( update );
51
+
52
+ phiStartRow.add( new UIText( strings.getKey( 'sidebar/geometry/sphere_geometry/phistart' ) ).setClass( 'Label' ) );
53
+ phiStartRow.add( phiStart );
54
+
55
+ container.add( phiStartRow );
56
+
57
+ // phiLength
58
+
59
+ const phiLengthRow = new UIRow();
60
+ const phiLength = new UINumber( parameters.phiLength * THREE.MathUtils.RAD2DEG ).setUnit( '°' ).setStep( 10 ).onChange( update );
61
+
62
+ phiLengthRow.add( new UIText( strings.getKey( 'sidebar/geometry/sphere_geometry/philength' ) ).setClass( 'Label' ) );
63
+ phiLengthRow.add( phiLength );
64
+
65
+ container.add( phiLengthRow );
66
+
67
+ // thetaStart
68
+
69
+ const thetaStartRow = new UIRow();
70
+ const thetaStart = new UINumber( parameters.thetaStart * THREE.MathUtils.RAD2DEG ).setUnit( '°' ).setStep( 10 ).onChange( update );
71
+
72
+ thetaStartRow.add( new UIText( strings.getKey( 'sidebar/geometry/sphere_geometry/thetastart' ) ).setClass( 'Label' ) );
73
+ thetaStartRow.add( thetaStart );
74
+
75
+ container.add( thetaStartRow );
76
+
77
+ // thetaLength
78
+
79
+ const thetaLengthRow = new UIRow();
80
+ const thetaLength = new UINumber( parameters.thetaLength * THREE.MathUtils.RAD2DEG ).setUnit( '°' ).setStep( 10 ).onChange( update );
81
+
82
+ thetaLengthRow.add( new UIText( strings.getKey( 'sidebar/geometry/sphere_geometry/thetalength' ) ).setClass( 'Label' ) );
83
+ thetaLengthRow.add( thetaLength );
84
+
85
+ container.add( thetaLengthRow );
86
+
87
+ //
88
+
89
+ function refreshUI() {
90
+
91
+ const parameters = object.geometry.parameters;
92
+
93
+ radius.setValue( parameters.radius );
94
+ widthSegments.setValue( parameters.widthSegments );
95
+ heightSegments.setValue( parameters.heightSegments );
96
+ phiStart.setValue( parameters.phiStart * THREE.MathUtils.RAD2DEG );
97
+ phiLength.setValue( parameters.phiLength * THREE.MathUtils.RAD2DEG );
98
+ thetaStart.setValue( parameters.thetaStart * THREE.MathUtils.RAD2DEG );
99
+ thetaLength.setValue( parameters.thetaLength * THREE.MathUtils.RAD2DEG );
100
+
101
+ }
102
+
103
+ signals.geometryChanged.add( function ( mesh ) {
104
+
105
+ if ( mesh === object ) {
106
+
107
+ refreshUI();
108
+
109
+ }
110
+
111
+ } );
112
+
113
+ //
114
+
115
+ function update() {
116
+
117
+ editor.execute( new SetGeometryCommand( editor, object, new THREE.SphereGeometry(
118
+ radius.getValue(),
119
+ widthSegments.getValue(),
120
+ heightSegments.getValue(),
121
+ phiStart.getValue() * THREE.MathUtils.DEG2RAD,
122
+ phiLength.getValue() * THREE.MathUtils.DEG2RAD,
123
+ thetaStart.getValue() * THREE.MathUtils.DEG2RAD,
124
+ thetaLength.getValue() * THREE.MathUtils.DEG2RAD
125
+ ) ) );
126
+
127
+ }
128
+
129
+ return container;
130
+
131
+ }
132
+
133
+ export { GeometryParametersPanel };
@@ -0,0 +1,74 @@
1
+ import * as THREE from 'three';
2
+
3
+ import { UIDiv, UIRow, UIText, UIInteger, UINumber } from './libs/ui.js';
4
+
5
+ import { SetGeometryCommand } from './commands/SetGeometryCommand.js';
6
+
7
+ function GeometryParametersPanel( editor, object ) {
8
+
9
+ const strings = editor.strings;
10
+
11
+ const signals = editor.signals;
12
+
13
+ const container = new UIDiv();
14
+
15
+ const geometry = object.geometry;
16
+ const parameters = geometry.parameters;
17
+
18
+ // radius
19
+
20
+ const radiusRow = new UIRow();
21
+ const radius = new UINumber( parameters.radius ).onChange( update );
22
+
23
+ radiusRow.add( new UIText( strings.getKey( 'sidebar/geometry/tetrahedron_geometry/radius' ) ).setClass( 'Label' ) );
24
+ radiusRow.add( radius );
25
+
26
+ container.add( radiusRow );
27
+
28
+ // detail
29
+
30
+ const detailRow = new UIRow();
31
+ const detail = new UIInteger( parameters.detail ).setRange( 0, Infinity ).onChange( update );
32
+
33
+ detailRow.add( new UIText( strings.getKey( 'sidebar/geometry/tetrahedron_geometry/detail' ) ).setClass( 'Label' ) );
34
+ detailRow.add( detail );
35
+
36
+ container.add( detailRow );
37
+
38
+ //
39
+
40
+ function refreshUI() {
41
+
42
+ const parameters = object.geometry.parameters;
43
+
44
+ radius.setValue( parameters.radius );
45
+ detail.setValue( parameters.detail );
46
+
47
+ }
48
+
49
+ signals.geometryChanged.add( function ( mesh ) {
50
+
51
+ if ( mesh === object ) {
52
+
53
+ refreshUI();
54
+
55
+ }
56
+
57
+ } );
58
+
59
+ //
60
+
61
+ function update() {
62
+
63
+ editor.execute( new SetGeometryCommand( editor, object, new THREE.TetrahedronGeometry(
64
+ radius.getValue(),
65
+ detail.getValue()
66
+ ) ) );
67
+
68
+ }
69
+
70
+ return container;
71
+
72
+ }
73
+
74
+ export { GeometryParametersPanel };
@@ -0,0 +1,109 @@
1
+ import * as THREE from 'three';
2
+
3
+ import { UIDiv, UIRow, UIText, UIInteger, UINumber } from './libs/ui.js';
4
+
5
+ import { SetGeometryCommand } from './commands/SetGeometryCommand.js';
6
+
7
+ function GeometryParametersPanel( editor, object ) {
8
+
9
+ const strings = editor.strings;
10
+ const signals = editor.signals;
11
+
12
+ const container = new UIDiv();
13
+
14
+ const geometry = object.geometry;
15
+ const parameters = geometry.parameters;
16
+
17
+ // radius
18
+
19
+ const radiusRow = new UIRow();
20
+ const radius = new UINumber( parameters.radius ).onChange( update );
21
+
22
+ radiusRow.add( new UIText( strings.getKey( 'sidebar/geometry/torus_geometry/radius' ) ).setClass( 'Label' ) );
23
+ radiusRow.add( radius );
24
+
25
+ container.add( radiusRow );
26
+
27
+ // tube
28
+
29
+ const tubeRow = new UIRow();
30
+ const tube = new UINumber( parameters.tube ).onChange( update );
31
+
32
+ tubeRow.add( new UIText( strings.getKey( 'sidebar/geometry/torus_geometry/tube' ) ).setClass( 'Label' ) );
33
+ tubeRow.add( tube );
34
+
35
+ container.add( tubeRow );
36
+
37
+ // radialSegments
38
+
39
+ const radialSegmentsRow = new UIRow();
40
+ const radialSegments = new UIInteger( parameters.radialSegments ).setRange( 1, Infinity ).onChange( update );
41
+
42
+ radialSegmentsRow.add( new UIText( strings.getKey( 'sidebar/geometry/torus_geometry/radialsegments' ) ).setClass( 'Label' ) );
43
+ radialSegmentsRow.add( radialSegments );
44
+
45
+ container.add( radialSegmentsRow );
46
+
47
+ // tubularSegments
48
+
49
+ const tubularSegmentsRow = new UIRow();
50
+ const tubularSegments = new UIInteger( parameters.tubularSegments ).setRange( 1, Infinity ).onChange( update );
51
+
52
+ tubularSegmentsRow.add( new UIText( strings.getKey( 'sidebar/geometry/torus_geometry/tubularsegments' ) ).setClass( 'Label' ) );
53
+ tubularSegmentsRow.add( tubularSegments );
54
+
55
+ container.add( tubularSegmentsRow );
56
+
57
+ // arc
58
+
59
+ const arcRow = new UIRow();
60
+ const arc = new UINumber( parameters.arc * THREE.MathUtils.RAD2DEG ).setUnit( '°' ).setStep( 10 ).onChange( update );
61
+
62
+ arcRow.add( new UIText( strings.getKey( 'sidebar/geometry/torus_geometry/arc' ) ).setClass( 'Label' ) );
63
+ arcRow.add( arc );
64
+
65
+ container.add( arcRow );
66
+
67
+ //
68
+
69
+ function refreshUI() {
70
+
71
+ const parameters = object.geometry.parameters;
72
+
73
+ radius.setValue( parameters.radius );
74
+ tube.setValue( parameters.tube );
75
+ radialSegments.setValue( parameters.radialSegments );
76
+ tubularSegments.setValue( parameters.tubularSegments );
77
+ arc.setValue( parameters.arc * THREE.MathUtils.RAD2DEG );
78
+
79
+ }
80
+
81
+ signals.geometryChanged.add( function ( mesh ) {
82
+
83
+ if ( mesh === object ) {
84
+
85
+ refreshUI();
86
+
87
+ }
88
+
89
+ } );
90
+
91
+ //
92
+
93
+ function update() {
94
+
95
+ editor.execute( new SetGeometryCommand( editor, object, new THREE.TorusGeometry(
96
+ radius.getValue(),
97
+ tube.getValue(),
98
+ radialSegments.getValue(),
99
+ tubularSegments.getValue(),
100
+ arc.getValue() * THREE.MathUtils.DEG2RAD
101
+ ) ) );
102
+
103
+ }
104
+
105
+ return container;
106
+
107
+ }
108
+
109
+ export { GeometryParametersPanel };
@@ -0,0 +1,121 @@
1
+ import * as THREE from 'three';
2
+
3
+ import { UIDiv, UIRow, UIText, UIInteger, UINumber } from './libs/ui.js';
4
+
5
+ import { SetGeometryCommand } from './commands/SetGeometryCommand.js';
6
+
7
+ function GeometryParametersPanel( editor, object ) {
8
+
9
+ const strings = editor.strings;
10
+ const signals = editor.signals;
11
+
12
+ const container = new UIDiv();
13
+
14
+ const geometry = object.geometry;
15
+ const parameters = geometry.parameters;
16
+
17
+ // radius
18
+
19
+ const radiusRow = new UIRow();
20
+ const radius = new UINumber( parameters.radius ).onChange( update );
21
+
22
+ radiusRow.add( new UIText( strings.getKey( 'sidebar/geometry/torusKnot_geometry/radius' ) ).setClass( 'Label' ) );
23
+ radiusRow.add( radius );
24
+
25
+ container.add( radiusRow );
26
+
27
+ // tube
28
+
29
+ const tubeRow = new UIRow();
30
+ const tube = new UINumber( parameters.tube ).onChange( update );
31
+
32
+ tubeRow.add( new UIText( strings.getKey( 'sidebar/geometry/torusKnot_geometry/tube' ) ).setClass( 'Label' ) );
33
+ tubeRow.add( tube );
34
+
35
+ container.add( tubeRow );
36
+
37
+ // tubularSegments
38
+
39
+ const tubularSegmentsRow = new UIRow();
40
+ const tubularSegments = new UIInteger( parameters.tubularSegments ).setRange( 1, Infinity ).onChange( update );
41
+
42
+ tubularSegmentsRow.add( new UIText( strings.getKey( 'sidebar/geometry/torusKnot_geometry/tubularsegments' ) ).setClass( 'Label' ) );
43
+ tubularSegmentsRow.add( tubularSegments );
44
+
45
+ container.add( tubularSegmentsRow );
46
+
47
+ // radialSegments
48
+
49
+ const radialSegmentsRow = new UIRow();
50
+ const radialSegments = new UIInteger( parameters.radialSegments ).setRange( 1, Infinity ).onChange( update );
51
+
52
+ radialSegmentsRow.add( new UIText( strings.getKey( 'sidebar/geometry/torusKnot_geometry/radialsegments' ) ).setClass( 'Label' ) );
53
+ radialSegmentsRow.add( radialSegments );
54
+
55
+ container.add( radialSegmentsRow );
56
+
57
+ // p
58
+
59
+ const pRow = new UIRow();
60
+ const p = new UIInteger( parameters.p ).onChange( update );
61
+
62
+ pRow.add( new UIText( strings.getKey( 'sidebar/geometry/torusKnot_geometry/p' ) ).setClass( 'Label' ) );
63
+ pRow.add( p );
64
+
65
+ container.add( pRow );
66
+
67
+ // q
68
+
69
+ const qRow = new UIRow();
70
+ const q = new UIInteger( parameters.q ).onChange( update );
71
+
72
+ qRow.add( new UIText( strings.getKey( 'sidebar/geometry/torusKnot_geometry/q' ) ).setClass( 'Label' ) );
73
+ qRow.add( q );
74
+
75
+ container.add( qRow );
76
+
77
+ //
78
+
79
+ function refreshUI() {
80
+
81
+ const parameters = object.geometry.parameters;
82
+
83
+ radius.setValue( parameters.radius );
84
+ tube.setValue( parameters.tube );
85
+ tubularSegments.setValue( parameters.tubularSegments );
86
+ radialSegments.setValue( parameters.radialSegments );
87
+ p.setValue( parameters.p );
88
+ q.setValue( parameters.q );
89
+
90
+ }
91
+
92
+ signals.geometryChanged.add( function ( mesh ) {
93
+
94
+ if ( mesh === object ) {
95
+
96
+ refreshUI();
97
+
98
+ }
99
+
100
+ } );
101
+
102
+ //
103
+
104
+ function update() {
105
+
106
+ editor.execute( new SetGeometryCommand( editor, object, new THREE.TorusKnotGeometry(
107
+ radius.getValue(),
108
+ tube.getValue(),
109
+ tubularSegments.getValue(),
110
+ radialSegments.getValue(),
111
+ p.getValue(),
112
+ q.getValue()
113
+ ) ) );
114
+
115
+ }
116
+
117
+ return container;
118
+
119
+ }
120
+
121
+ export { GeometryParametersPanel };
@@ -0,0 +1,135 @@
1
+ import * as THREE from 'three';
2
+
3
+ import { UIDiv, UIRow, UIText, UIInteger, UISelect, UICheckbox, UINumber } from './libs/ui.js';
4
+ import { UIPoints3 } from './libs/ui.three.js';
5
+
6
+ import { SetGeometryCommand } from './commands/SetGeometryCommand.js';
7
+
8
+ function GeometryParametersPanel( editor, object ) {
9
+
10
+ const strings = editor.strings;
11
+ const signals = editor.signals;
12
+
13
+ const container = new UIDiv();
14
+
15
+ const geometry = object.geometry;
16
+ const parameters = geometry.parameters;
17
+
18
+ // points
19
+
20
+ const pointsRow = new UIRow();
21
+ pointsRow.add( new UIText( strings.getKey( 'sidebar/geometry/tube_geometry/path' ) ).setClass( 'Label' ) );
22
+
23
+ const points = new UIPoints3().setValue( parameters.path.points ).onChange( update );
24
+ pointsRow.add( points );
25
+
26
+ container.add( pointsRow );
27
+
28
+ // radius
29
+
30
+ const radiusRow = new UIRow();
31
+ const radius = new UINumber( parameters.radius ).onChange( update );
32
+
33
+ radiusRow.add( new UIText( strings.getKey( 'sidebar/geometry/tube_geometry/radius' ) ).setClass( 'Label' ) );
34
+ radiusRow.add( radius );
35
+
36
+ container.add( radiusRow );
37
+
38
+ // tubularSegments
39
+
40
+ const tubularSegmentsRow = new UIRow();
41
+ const tubularSegments = new UIInteger( parameters.tubularSegments ).onChange( update );
42
+
43
+ tubularSegmentsRow.add( new UIText( strings.getKey( 'sidebar/geometry/tube_geometry/tubularsegments' ) ).setClass( 'Label' ) );
44
+ tubularSegmentsRow.add( tubularSegments );
45
+
46
+ container.add( tubularSegmentsRow );
47
+
48
+ // radialSegments
49
+
50
+ const radialSegmentsRow = new UIRow();
51
+ const radialSegments = new UIInteger( parameters.radialSegments ).onChange( update );
52
+
53
+ radialSegmentsRow.add( new UIText( strings.getKey( 'sidebar/geometry/tube_geometry/radialsegments' ) ).setClass( 'Label' ) );
54
+ radialSegmentsRow.add( radialSegments );
55
+
56
+ container.add( radialSegmentsRow );
57
+
58
+ // closed
59
+
60
+ const closedRow = new UIRow();
61
+ const closed = new UICheckbox( parameters.closed ).onChange( update );
62
+
63
+ closedRow.add( new UIText( strings.getKey( 'sidebar/geometry/tube_geometry/closed' ) ).setClass( 'Label' ) );
64
+ closedRow.add( closed );
65
+
66
+ container.add( closedRow );
67
+
68
+ // curveType
69
+
70
+ const curveTypeRow = new UIRow();
71
+ const curveType = new UISelect().setOptions( { centripetal: 'centripetal', chordal: 'chordal', catmullrom: 'catmullrom' } ).setValue( parameters.path.curveType ).onChange( update );
72
+
73
+ curveTypeRow.add( new UIText( strings.getKey( 'sidebar/geometry/tube_geometry/curvetype' ) ).setClass( 'Label' ), curveType );
74
+
75
+ container.add( curveTypeRow );
76
+
77
+ // tension
78
+
79
+ const tensionRow = new UIRow().setDisplay( curveType.getValue() == 'catmullrom' ? '' : 'none' );
80
+ const tension = new UINumber( parameters.path.tension ).setStep( 0.01 ).onChange( update );
81
+
82
+ tensionRow.add( new UIText( strings.getKey( 'sidebar/geometry/tube_geometry/tension' ) ).setClass( 'Label' ), tension );
83
+
84
+ container.add( tensionRow );
85
+
86
+ //
87
+
88
+ function refreshUI() {
89
+
90
+ const parameters = object.geometry.parameters;
91
+
92
+ tubularSegments.setValue( parameters.tubularSegments );
93
+ radius.setValue( parameters.radius );
94
+ radialSegments.setValue( parameters.radialSegments );
95
+ closed.setValue( parameters.closed );
96
+
97
+ points.setValue( parameters.path.points, false );
98
+ curveType.setValue( parameters.path.curveType );
99
+ tension.setValue( parameters.path.tension );
100
+
101
+ tensionRow.setDisplay( curveType.getValue() == 'catmullrom' ? '' : 'none' );
102
+
103
+ }
104
+
105
+ signals.geometryChanged.add( function ( mesh ) {
106
+
107
+ if ( mesh === object ) {
108
+
109
+ refreshUI();
110
+
111
+ }
112
+
113
+ } );
114
+
115
+ //
116
+
117
+ function update() {
118
+
119
+ tensionRow.setDisplay( curveType.getValue() == 'catmullrom' ? '' : 'none' );
120
+
121
+ editor.execute( new SetGeometryCommand( editor, object, new THREE.TubeGeometry(
122
+ new THREE.CatmullRomCurve3( points.getValue(), closed.getValue(), curveType.getValue(), tension.getValue() ),
123
+ tubularSegments.getValue(),
124
+ radius.getValue(),
125
+ radialSegments.getValue(),
126
+ closed.getValue()
127
+ ) ) );
128
+
129
+ }
130
+
131
+ return container;
132
+
133
+ }
134
+
135
+ export { GeometryParametersPanel };