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.
- package/README.md +134 -209
- package/SKILL.md +95 -0
- package/apps/environment/index.js +200 -1
- package/apps/environment/models/decorative/.gitkeep +0 -0
- package/apps/environment/models/hazards/.gitkeep +0 -0
- package/apps/environment/models/interactive/.gitkeep +0 -0
- package/apps/environment/models/structures/.gitkeep +0 -0
- package/apps/environment/smartObjects.js +114 -0
- package/apps/interactable/index.js +155 -0
- package/apps/physics-crate/index.js +15 -9
- package/apps/power-crate/index.js +18 -12
- package/apps/tps-game/$GDUPI.vrm +0 -0
- package/apps/tps-game/Cleetus.vrm +0 -0
- package/apps/tps-game/index.js +185 -27
- package/apps/world/index.js +68 -22
- package/bin/create-app.js +337 -0
- package/client/ARControls.js +301 -0
- package/client/LoadingManager.js +117 -0
- package/client/MobileControls.js +1122 -0
- package/client/anim-lib.glb +0 -0
- package/client/animation.js +306 -0
- package/client/app.js +1341 -65
- package/client/camera.js +191 -33
- package/client/createLoadingScreen.js +69 -0
- package/client/editor/bridge.js +113 -0
- package/client/editor/css/main.css +794 -0
- package/client/editor/images/rotate.svg +4 -0
- package/client/editor/images/scale.svg +4 -0
- package/client/editor/images/translate.svg +4 -0
- package/client/editor/index.html +103 -0
- package/client/editor/js/Command.js +41 -0
- package/client/editor/js/Config.js +81 -0
- package/client/editor/js/Editor.js +785 -0
- package/client/editor/js/EditorControls.js +438 -0
- package/client/editor/js/History.js +321 -0
- package/client/editor/js/Loader.js +987 -0
- package/client/editor/js/LoaderUtils.js +90 -0
- package/client/editor/js/Menubar.Add.js +510 -0
- package/client/editor/js/Menubar.Edit.js +145 -0
- package/client/editor/js/Menubar.File.js +466 -0
- package/client/editor/js/Menubar.Help.js +73 -0
- package/client/editor/js/Menubar.Status.js +51 -0
- package/client/editor/js/Menubar.View.js +183 -0
- package/client/editor/js/Menubar.js +27 -0
- package/client/editor/js/Player.js +53 -0
- package/client/editor/js/Resizer.js +58 -0
- package/client/editor/js/Script.js +503 -0
- package/client/editor/js/Selector.js +102 -0
- package/client/editor/js/Sidebar.Geometry.BoxGeometry.js +121 -0
- package/client/editor/js/Sidebar.Geometry.BufferGeometry.js +115 -0
- package/client/editor/js/Sidebar.Geometry.CapsuleGeometry.js +97 -0
- package/client/editor/js/Sidebar.Geometry.CircleGeometry.js +97 -0
- package/client/editor/js/Sidebar.Geometry.CylinderGeometry.js +121 -0
- package/client/editor/js/Sidebar.Geometry.DodecahedronGeometry.js +73 -0
- package/client/editor/js/Sidebar.Geometry.ExtrudeGeometry.js +196 -0
- package/client/editor/js/Sidebar.Geometry.IcosahedronGeometry.js +73 -0
- package/client/editor/js/Sidebar.Geometry.LatheGeometry.js +98 -0
- package/client/editor/js/Sidebar.Geometry.Modifiers.js +73 -0
- package/client/editor/js/Sidebar.Geometry.OctahedronGeometry.js +74 -0
- package/client/editor/js/Sidebar.Geometry.PlaneGeometry.js +97 -0
- package/client/editor/js/Sidebar.Geometry.RingGeometry.js +121 -0
- package/client/editor/js/Sidebar.Geometry.ShapeGeometry.js +76 -0
- package/client/editor/js/Sidebar.Geometry.SphereGeometry.js +133 -0
- package/client/editor/js/Sidebar.Geometry.TetrahedronGeometry.js +74 -0
- package/client/editor/js/Sidebar.Geometry.TorusGeometry.js +109 -0
- package/client/editor/js/Sidebar.Geometry.TorusKnotGeometry.js +121 -0
- package/client/editor/js/Sidebar.Geometry.TubeGeometry.js +135 -0
- package/client/editor/js/Sidebar.Geometry.js +332 -0
- package/client/editor/js/Sidebar.Material.BooleanProperty.js +60 -0
- package/client/editor/js/Sidebar.Material.ColorProperty.js +87 -0
- package/client/editor/js/Sidebar.Material.ConstantProperty.js +62 -0
- package/client/editor/js/Sidebar.Material.MapProperty.js +249 -0
- package/client/editor/js/Sidebar.Material.NumberProperty.js +60 -0
- package/client/editor/js/Sidebar.Material.Program.js +73 -0
- package/client/editor/js/Sidebar.Material.RangeValueProperty.js +63 -0
- package/client/editor/js/Sidebar.Material.js +751 -0
- package/client/editor/js/Sidebar.Object.Animation.js +102 -0
- package/client/editor/js/Sidebar.Object.js +898 -0
- package/client/editor/js/Sidebar.Project.App.js +165 -0
- package/client/editor/js/Sidebar.Project.Image.js +225 -0
- package/client/editor/js/Sidebar.Project.Materials.js +82 -0
- package/client/editor/js/Sidebar.Project.Renderer.js +144 -0
- package/client/editor/js/Sidebar.Project.Video.js +242 -0
- package/client/editor/js/Sidebar.Project.js +31 -0
- package/client/editor/js/Sidebar.Properties.js +73 -0
- package/client/editor/js/Sidebar.Scene.js +585 -0
- package/client/editor/js/Sidebar.Script.js +129 -0
- package/client/editor/js/Sidebar.Settings.History.js +146 -0
- package/client/editor/js/Sidebar.Settings.Shortcuts.js +175 -0
- package/client/editor/js/Sidebar.Settings.js +60 -0
- package/client/editor/js/Sidebar.js +41 -0
- package/client/editor/js/Storage.js +98 -0
- package/client/editor/js/Strings.js +2028 -0
- package/client/editor/js/Toolbar.js +84 -0
- package/client/editor/js/Viewport.Controls.js +92 -0
- package/client/editor/js/Viewport.Info.js +136 -0
- package/client/editor/js/Viewport.Pathtracer.js +91 -0
- package/client/editor/js/Viewport.ViewHelper.js +39 -0
- package/client/editor/js/Viewport.XR.js +222 -0
- package/client/editor/js/Viewport.js +900 -0
- package/client/editor/js/commands/AddObjectCommand.js +68 -0
- package/client/editor/js/commands/AddScriptCommand.js +75 -0
- package/client/editor/js/commands/Commands.js +23 -0
- package/client/editor/js/commands/MoveObjectCommand.js +111 -0
- package/client/editor/js/commands/MultiCmdsCommand.js +85 -0
- package/client/editor/js/commands/RemoveObjectCommand.js +88 -0
- package/client/editor/js/commands/RemoveScriptCommand.js +81 -0
- package/client/editor/js/commands/SetColorCommand.js +73 -0
- package/client/editor/js/commands/SetGeometryCommand.js +87 -0
- package/client/editor/js/commands/SetGeometryValueCommand.js +70 -0
- package/client/editor/js/commands/SetMaterialColorCommand.js +86 -0
- package/client/editor/js/commands/SetMaterialCommand.js +79 -0
- package/client/editor/js/commands/SetMaterialMapCommand.js +143 -0
- package/client/editor/js/commands/SetMaterialRangeCommand.js +91 -0
- package/client/editor/js/commands/SetMaterialValueCommand.js +90 -0
- package/client/editor/js/commands/SetMaterialVectorCommand.js +79 -0
- package/client/editor/js/commands/SetPositionCommand.js +84 -0
- package/client/editor/js/commands/SetRotationCommand.js +84 -0
- package/client/editor/js/commands/SetScaleCommand.js +84 -0
- package/client/editor/js/commands/SetSceneCommand.js +103 -0
- package/client/editor/js/commands/SetScriptValueCommand.js +80 -0
- package/client/editor/js/commands/SetShadowValueCommand.js +73 -0
- package/client/editor/js/commands/SetUuidCommand.js +70 -0
- package/client/editor/js/commands/SetValueCommand.js +75 -0
- package/client/editor/js/libs/acorn/acorn.js +3236 -0
- package/client/editor/js/libs/acorn/acorn_loose.js +1299 -0
- package/client/editor/js/libs/acorn/walk.js +344 -0
- package/client/editor/js/libs/app/index.html +57 -0
- package/client/editor/js/libs/app.js +251 -0
- package/client/editor/js/libs/codemirror/addon/dialog.css +32 -0
- package/client/editor/js/libs/codemirror/addon/dialog.js +163 -0
- package/client/editor/js/libs/codemirror/addon/show-hint.css +36 -0
- package/client/editor/js/libs/codemirror/addon/show-hint.js +529 -0
- package/client/editor/js/libs/codemirror/addon/tern.css +87 -0
- package/client/editor/js/libs/codemirror/addon/tern.js +750 -0
- package/client/editor/js/libs/codemirror/codemirror.css +344 -0
- package/client/editor/js/libs/codemirror/codemirror.js +9849 -0
- package/client/editor/js/libs/codemirror/mode/glsl.js +233 -0
- package/client/editor/js/libs/codemirror/mode/javascript.js +959 -0
- package/client/editor/js/libs/codemirror/theme/monokai.css +41 -0
- package/client/editor/js/libs/esprima.js +6401 -0
- package/client/editor/js/libs/jsonlint.js +453 -0
- package/client/editor/js/libs/signals.min.js +14 -0
- package/client/editor/js/libs/tern-threejs/threejs.js +5031 -0
- package/client/editor/js/libs/ternjs/comment.js +87 -0
- package/client/editor/js/libs/ternjs/def.js +588 -0
- package/client/editor/js/libs/ternjs/doc_comment.js +401 -0
- package/client/editor/js/libs/ternjs/infer.js +1635 -0
- package/client/editor/js/libs/ternjs/polyfill.js +80 -0
- package/client/editor/js/libs/ternjs/signal.js +26 -0
- package/client/editor/js/libs/ternjs/tern.js +993 -0
- package/client/editor/js/libs/ui.js +1346 -0
- package/client/editor/js/libs/ui.three.js +855 -0
- package/client/facial-animation.js +455 -0
- package/client/index.html +7 -4
- package/client/loading.css +147 -0
- package/client/loading.html +25 -0
- package/client/style.css +251 -0
- package/package.json +7 -3
- package/server.js +9 -1
- package/src/apps/AppContext.js +1 -1
- package/src/apps/AppLoader.js +50 -37
- package/src/apps/AppRuntime.js +32 -8
- package/src/client/InputHandler.js +233 -0
- package/src/client/JitterBuffer.js +207 -0
- package/src/client/KalmanFilter.js +125 -0
- package/src/client/MessageHandler.js +101 -0
- package/src/client/PhysicsNetworkClient.js +141 -68
- package/src/client/ReconnectManager.js +62 -0
- package/src/client/SmoothInterpolation.js +127 -0
- package/src/client/SnapshotProcessor.js +144 -0
- package/src/connection/ConnectionManager.js +21 -3
- package/src/connection/SessionStore.js +13 -3
- package/src/index.client.js +4 -6
- package/src/netcode/EventLog.js +29 -15
- package/src/netcode/LagCompensator.js +25 -26
- package/src/netcode/NetworkState.js +4 -1
- package/src/netcode/PhysicsIntegration.js +20 -6
- package/src/netcode/PlayerManager.js +10 -2
- package/src/netcode/SnapshotEncoder.js +66 -19
- package/src/netcode/TickSystem.js +13 -4
- package/src/physics/World.js +66 -13
- package/src/protocol/msgpack.js +90 -63
- package/src/sdk/ReloadHandlers.js +12 -2
- package/src/sdk/ReloadManager.js +5 -0
- package/src/sdk/ServerHandlers.js +50 -11
- package/src/sdk/StaticHandler.js +22 -6
- package/src/sdk/TickHandler.js +101 -34
- package/src/sdk/scaffold.js +31 -0
- package/src/sdk/server.js +59 -33
- package/src/shared/movement.js +2 -1
- package/src/spatial/Octree.js +5 -0
- package/apps/interactive-door/index.js +0 -33
- package/apps/patrol-npc/index.js +0 -37
- package/src/connection/QualityMonitor.js +0 -46
- package/src/debug/StateInspector.js +0 -42
- package/src/index.js +0 -1
- package/src/index.server.js +0 -27
- package/src/protocol/Codec.js +0 -60
- package/src/protocol/SequenceTracker.js +0 -71
- package/src/sdk/ClientMessageHandler.js +0 -80
- package/src/sdk/client.js +0 -122
- package/world/kaira.glb +0 -0
- 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 };
|